在一个Linux 64位平台上,安装了11.2版本和9.2版本两个数据库,启动11.2的监听,尝试连接9.2的数据库报错ORA-12537。
详细的错误信息如下:
[oracle@bjtest admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 1月 18 18:31:37 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn ndmain/ndmain@172.25.198.230/bjtrade
ERROR:
ORA-12537: TNS: 连接关闭
SQL> conn ndmain/ndmain@172.25.198.230/test112
ERROR:
ORA-01017: invalid username/password; logon denied
连接11.2的数据库没有问题,这里报错是由于密码不正确,但是网络连接显然是正确的。
ORA-12537: TNS:connection closed
Cause: "End of file" condition has been reached; partner has disconnected.
Action: None needed; this is an information message.
Oracle的错误文档的说明非常的不靠谱,看来只能查询METALINK了。发现metalink上有不少和ORA-12537有关的bug,但是根据这些描述进行设置后,问题无法解决:
[oracle@bjtest admin]$ pwd
/data/oracle/product/11.2/network/admin
[oracle@bjtest admin]$ more listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = /opt/oracle/product/9.2)
(SID_NAME = bjtrade)
(ENVS = "LD_LIBRARY_PATH_64=/opt/oracle/product/9.2/lib")
)
(SID_DESC =
(GLOBAL_DBNAME = test112)
(ORACLE_HOME = /data/oracle/product/11.2)
(SID_NAME = test112)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
)
)
)
在监听配置文件listener.ora中增加LD_LIBRARY_PATH或LD_LIBRARY_PATH_64的ENVS参数,问题依旧。
如果尝试使用9.2的监听,则9i的连接正常,11g连接报错:
SQL> conn test/test@172.25.198.230/BJTRADE
已连接。
SQL> conn test/test@172.25.198.230/test112
ERROR:
ORA-12500: TNS: 监听程序无法启动专用服务器进程
对应的监听信息为:
[oracle@bjtest ~]$ lsnrctl status
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 19-1月 -2010 03:58:59
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 9.2.0.4.0 - Production
启动日期 18-1月 -2010 19:58:21
正常运行时间 0 天 8 小时 0 分 37 秒
跟踪级别 off
安全性 OFF
SNMP OFF
监听器参数文件 /opt/oracle/product/9.2/network/admin/listener.ora
监听器日志文件 /opt/oracle/product/9.2/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjtest)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjtest)(PORT=8080))(Presentation=HTTP)(Session=RAW))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjtest)(PORT=2100))(Presentation=FTP)(Session=RAW))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ZHIFU" 包含 1 个例程。
例程 "ZHIFU", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "bjtest" 包含 2 个例程。
例程 "bjtest", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "bjtest", 状态 READY, 包含此服务的 1 个处理程序...
服务 "bjtestXDB" 包含 1 个例程。
例程 "bjtest", 状态 READY, 包含此服务的 1 个处理程序...
服务 "bjtrade" 包含 2 个例程。
例程 "bjtrade", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
例程 "bjtrade", 状态 READY, 包含此服务的 1 个处理程序...
服务 "bjtradeXDB" 包含 1 个例程。
例程 "bjtrade", 状态 READY, 包含此服务的 1 个处理程序...
服务 "test112" 包含 1 个例程。
例程 "test112", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
使用11.2的监听,9.2数据库无法访问,使用9.2的监听,11.2的数据库又无法访问,看来只能使用双监听了,修改11.2的监听,使其监听1522端口:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
)
)
)
[oracle@bjtest admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-1月 -2010 04:02:48
Copyright (c) 1991, 2009, Oracle. All rights reserved.
启动/data/oracle/product/11.2/bin/tnslsnr: 请稍候...
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
系统参数文件为/data/oracle/product/11.2/network/admin/listener.ora
写入/data/oracle/diag/tnslsnr/bjtest/listener/alert/log.xml的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjtest)(PORT=1522)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期 19-1月 -2010 04:02:48
正常运行时间 0 天 0 小时 0 分 0 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /data/oracle/product/11.2/network/admin/listener.ora
监听程序日志文件 /data/oracle/diag/tnslsnr/bjtest/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjtest)(PORT=1522)))
服务摘要..
服务 "PLSExtProc" 包含 1 个实例。
实例 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "bjtrade" 包含 1 个实例。
实例 "bjtrade", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "test112" 包含 1 个实例。
实例 "test112", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
SQL> conn test/test@172.25.198.230/BJTRADE
已连接。
SQL> conn test/TEST@172.25.198.230:1522/test112
已连接。
看来Oracle的监听还存在不少多版本兼容问题。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-625848/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-625848/