今天遇到了一个问题,某省的报表应用链接数据库报错:
1 |
错误信息:MSG: ORA-06502: PL/SQL: numeric or value error ORA-06512: at "REPORTPLUS.COMMON", line 337 ORA-29257: host he_rdb01 unknown ORA-06512: at line 1 SQL: begin :RET := common.droppartition("20080125000000","20080126000000","1",:DYPARA1,:DYPARA2,:PROCCODE,:PROCERRM,:SQLERRLOG); end; |
进一步检查line 337行的sql:SELECT utl_inaddr.get_host_address FROM dual;
测试在数据库主机执行该语句,正常!测试在应用服务器端执行,发现取不到IP地址。由于utl_inaddr.get_host_address已经脱离了数据库,因此不再检查tnsnames的问题,直接检查hosts文件的配置,发现应用服务器端的hosts文件没有配置,也是配置好了IP和hostname。
如果此时已经配置好了hosts文件,那么我的域名解析应该没问题了吧?但是此时ping hostname还是ping不到!怎么回事?
想到有可能是域名解析的问题了。。。。。。。查了一下/etc/nsswitch.config,发现没这个文件,而且没这个文件的话,主机做域名解析的时候,是先去查DNS,再查NIS,最后再查/etc/hosts。最后新建nsswitch.conf文件,并且指定首先查hosts文件。终于搞定!
另外,由utl_inaddr.get_host_address想到还有一个取IP的方法,用sys_context(‘USERENV’,’IP_ADDRESS’),用这个包的时候,注意不要直接sqlplus “/ as sysdba”直接登录,要利用网络登录sqlplus user/pwd@SID;也要注意hosts文件的配置。
2条评论
老大,怎么能联系到你?还要招人吗?
re qsxing:我收到了你的邮件,但是没看到你的简历啊?我还以为你没兴趣了,请把简历发给我吧,上回给你的邮件中是我公司的mail地址。