分类: Oracle
2008-04-26 16:23:59
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dannyyuan.blog.51cto.com/212520/70760 |
用Oracle有一段时间了,总是会出现一些奇怪的问题。最近在配置LISTENER.ORA和TNSNAMES.ORA文件时,竟然也出现了无法联通的问题,TNSPING能通过,但SQLPLUS无法成功。报出连接的常见的12514错误。
我的开始配置文件listener.ora是这样的: LISTNER.ORA SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u00/app/oracle/product/10.2.0/db) (PROGRAM = extproc) ) )
LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) ) ) mydb = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) ) ) 同样的配置在开发环境中TNSLISTEN没有什么问题,能侦听mydb实例,在生产环境中就发现不行,出现TNSPING没问题,SQLPLUS无法联通。 后来把mydb段删除,在SID_LIST_LISTENER里加如下SID_DESC后才能侦听我的数据库实例。
(SID_DESC =
(SID_NAME = mydb) (ORACLE_HOME = /u00/app/oracle/product/10.2.0/db) (GLOBAL_DBNAME=mydb.domain.com) ) 其中SID_NAME,GLOBAL_DBNAME可以全带,也可以只带其中一项。针对LISTENER的配置,TNSNAMES.ORA的配置会有所变化。如果带SID,则TNS可用用SID 来实现联接,如果LISTENER带GLOBAL_DBNAME,则可以用SERVICE_NAME来实现联接 如SERVICE_NAME mydbname = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mydb.domain.com) ) ) 或SID mydbname = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = mydb) ) ) 如LISTENER两者都带,则TNSNAMES两种方法均可。 开发环境中,这种配置可以自动支持两种方法的,域名为机器所在域名即可。 问题1、在于产品环境不为什么不支持这种配置方法? 问题2、用开发环境配置时,服务器端SQLPLUS无法成功后报12514错误,接着输入用户名/密码能联通,估计用SID直接联?在SQLPLUS带会强制TNSNAMES解析? 问题3、LSNCTL启动后,无法检测实例状态,即便是成功侦听。 本文出自 “守望者的技术日记和六味生活” 博客,请务必保留此出处http://dannyyuan.blog.51cto.com/212520/70760 本文出自 51CTO.COM技术博客 |