.net 调用Oracle 的一些总结。

原来一直用SQLServer,最近开始用Oracle了。转型当中遇到了很多问题,随着遇到的问题越来越多,我会把自己的心得不断地补充,以备不时之需。

一、一上来遇到的就是.net 调用Oracle 存储过程、函数困难,关于这方面的常见问题,请参照这位兄弟的博客:

http://cwbboy.cnblogs.com/archive/2006/03/22/356017.html

二、在使用Oracle的过程中发现,Oracle的对于SQL语句的检查要比SQLServer严格的多,比如:

      1、在Oracle和SQLServer中,虽然建表的时候不允许有重复的字段名,但是在查询语句中如果使用了重复别名,情况就不一样了,比如:
      SELECT A.* FROM (
      SELECT ID,code as 代码,cn_name as 中文名称,code as 代码,cn_name as 中文名称 FROM BS_PERSON 
      ) A

在SQLServer中执行成功,而在Oracle中执行则会提示错误:ORA-00918: column ambiguously defined,意思是列没有明确定义。为什么Oracle中会这样呢?原来,在嵌套查询中,外层查询会根据子查询的查询结果生成临时表A,又因为在表中是不允许有重复字段的,Oracle对于这点检查十分严格,SQLServer只对实际的物理表进行检查。所以会有此差异。

 三、Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" 的解决办法:
      1、原来Oracle10g以后版本在安装前会先检测系统的IP地址,而如果通过DHCP动态获取IP地址的机器,在解析IP地址时Oracle会认为是不确定的IP地址,就会出现上述异常。经修改c:\windows\system32\drivers\etc\hosts文件来手动解析后安装成功,文件内容如下:
      127.0.0.1 localhost
      动态获取的IP地址 计算机机器名

      2、单机版上安装Oracle的解决办法:

      到控制面板/添加硬件,在向导中选择“是,已经连接了此硬件”→“网络适配器”→“Microsoft Loopback Adapter”,添加完成,你会发现新建了个假的“本地连接”,为得是骗下Oracle。把这个本地连接的IP设置一下(例如192.168.1.1)。这时,再回去重新让Oracle检测一遍,通过!。

四、ORA-12514:TNS无法识别当前请求的服务名

网上的解决办法:修改Listener.ora文件,例如:

SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (SID_NAME = PLSExtProc) 
      (ORACLE_HOME = G:\oracle\product\10.2.0\db_1) 
      (PROGRAM = extproc) 
    ) 
  (SID_DESC = 
    (GLOBAL_DBNAME = ORCL) 
    (ORACLE_HOME = G:\oracle\product\10.2.0\db_1)   
    (SID_NAME = ORCL) 
    )
 
)
LISTENER = 
  (DESCRIPTION_LIST = 
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 机器的IP地址)(PORT = 1521)) 
    ) 
  )

黑体字部分为要在Listener.ora文件中添加的部分,红色为需要注意修改的部分。

然后再重起Oracle服务和监听服务,注意先后顺序。

这是通常情况的下的解决办法,但我的情况很特殊。由于我的服务器是通过DHCP动态获取IP,服务器IP变了后,通过上述方式修改,鼓捣半天也不行,令我百思不得其解。后来重装了Oracle,遇到了问题三,从而辗转发现原来是Oracle无法自动识别动态IP在作祟。虽然费了一番大周折,但总算问题解决了。

当然可能还有很多其他的原因。就我来讲遇到的情况是这样的。。。。。。

以上未完待续,前后顺序很乱,随学随记,最后在整理顺序……

      

posted @ 2011-01-28 14:34  eb5mj  阅读(299)  评论(0编辑  收藏  举报