我试图从NetBeans连接到Oracle 10.2.0,使用以下连接字符串:
jdbc:oracle:thin:@localhost:1521:XE
最奇怪的部分是,一切工作正常,直到一个重新启动。我开始得到这个TNS-12505错误所有的时间;看看我的listener.log中的最终条目:
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-APR-2011 13:46:48 Copyright (c) 1991,2005,Oracle. All rights reserved. System parameter file is D:\oraclexe\app\oracle\product\10.2.0\server\network\admin\listener.ora Log messages written to D:\oraclexe\app\oracle\product\10.2.0\server\network\log\listener.log Trace information written to D:\oraclexe\app\oracle\product\10.2.0\server\network\trace\listener.trc Trace level is currently 0 Started with pid=3460 Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Brodyaga-PC)(PORT=1521))) Listener completed notification to CRS on start TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE 14-APR-2011 13:48:54 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58458)) * establish * XE * 12505 TNS-12505: TNS:listener does not currently know of SID given in connect descriptor 14-APR-2011 13:49:00 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58481)) * establish * XE * 12505 TNS-12505: TNS:listener does not currently know of SID given in connect descriptor 14-APR-2011 13:49:02 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58487)) * establish * XE * 12505 TNS-12505: TNS:listener does not currently know of SID given in connect descriptor 14-APR-2011 13:50:23 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Brodyaga))(COMMAND=services)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * services * 0
前三个条目是我尝试从NetBeans连接。第四,通过sql * Plus连接,工作得很好。
这里是我的listener.ora的内容:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = Brodyaga-PC)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
和tnsnames.ora:
XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Brodyaga-PC)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) )
并从> lsnrctl服务
C:\Users\Brodyaga>lsnrctl services LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-APR-2011 13:59 :45 Copyright (c) 1991,Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) Services Summary... Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc",status UNKNOWN,has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 LOCAL SERVER Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc",has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 LOCAL SERVER The command completed successfully
两个Oracle服务都启动,sql * Plus连接良好。
您需要为XE添加SID条目,以便向侦听器注册实例。
安装Oracle XE后,一切看起来不错,但是当你发布
C:\>sqlplus / as sysdba sql>shutdown immediate sql>startup TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
该实例将不会向侦听器注册。
所以,请编辑您的listener.ora这样:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = XE) (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server) ) (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server) (PROGRAM = extproc) ) )
当我在Windows 7上安装Oracle XE时,出现了此问题。在Windows XP上没有遇到此问题。一般来说,这个条目不应该是必需的,因为实例应该自动注册到监听器。在Linux(Fedora)上运行Oracle XE,无需将XE添加到sid列表。