oracle的listener监听器可以使用动态监听也可以使用静态监听.一般为安全起见,配置指定的ip的静态监听.
但许多环境中为了管理的方便,并未配置静态监听,而是采用了动态监听的方法.
采用动态监听时,listener使用gethostbyname()去得到ip地址,当ip地址不是本机.而且ip地址指向的主机上面
面又安装了oracle数据库,且监听器没有启动起来的时候,且sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES = (NTS)出现下述错误:
TNS-01189: The listener could not authenticate the user
也就是说.如果已经报出此报错,则已经满足了以下几个条件
1.listener通过主机名得到的ip地址不是本机
2.ip地址指向的主机上面安装了oracle数据库,且监听器没有启动起来
3.sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES = (NTS)
在往深里分析,这个不仅仅在动态监听时会遇到,就是在静态监听时也会遇到.只要listener中制定的host为主机名,而主机名又非本机.及满足了报错的必要条件
此问题的解决方法
1.修改/etc/hosts文件,将主机名和ip地址对应正确即可.这是最常规的方法
2.oracle也提供了其他解决方法(查看metalink ID 285439.1 ),就是在修改listener监听器
LISTENER=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=ANYTHING))
(ADDRESS=(PROTOCOL=TCP)(HOST=serverhost)(PORT=1521))
)
以上问题我在10.2.0.4中遇到并通过修改主机名的方法得以解决.
阅读(2805) | 评论(0) | 转发(0) |