我在Windows 7 64位操作系统中安装了Oracle 11g Express Edition Release 2并试图执行JDBC程序,然后出现以下错误:
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 8 more
Run Code Online (Sandbox Code Playgroud)
小智 164
我通过纠正我的jdbc字符串修复了这个问题.
例如,正确的jdbc字符串应该是......
jdbc:oracle:thin:@myserver:1521/XE
Run Code Online (Sandbox Code Playgroud)
但是我使用的jdbs字符串是......
jdbc:oracle:thin:@myserver:1521:XE
Run Code Online (Sandbox Code Playgroud)
(注意:之间1521和XE应该是/)
这个错误的jdbc字符串也给我一个ORA-12505错误.
Luk*_*ard 85
有一些事情可能导致此问题,但在开始使用JDBC之前,您需要确保可以使用SQL*Plus连接到数据库.如果您不熟悉SQL*Plus,它是一个用于连接Oracle数据库的命令行工具,Oracle数据库长期以来一直是Oracle的标准组成部分,它包含在Oracle XE中.
使用JDBC连接到Oracle数据库时,不直接连接到数据库.而是连接到TNS侦听器,然后将您连接到数据库.该错误ORA-12505意味着侦听器已启动并且您可以连接到它,但它无法将您连接到数据库,因为它不知道该数据库已启动.有两个原因:
ORA-12505表示侦听器知道该数据库,但侦听器尚未从数据库收到数据库已启动的通知.(如果您尝试使用错误的SID连接到错误的数据库,则会收到ORA-12154错误"TNS:无法解析指定的连接标识符".)
"服务"管理单元中正在运行哪些Oracle服务?(从"控制面板">"管理工具">"服务"中打开它,或者只需"开始">"运行"> services.msc.)您需要运行OracleServiceXE和OracleXETNSListener服务.
如果服务都已启动,您是否可以在命令提示符下使用以下任何一种方法连接到SQL*Plus中的数据库?(我假设您在已安装Oracle XE的计算机上运行这些程序.)
sqlplus system/system-password@XE
sqlplus system/system-password
sqlplus / as sysdba
(替换system-password为在Oracle XE安装期间为SYS和SYSTEM用户设置的密码.)
这三个中的第一个通过TNS监听器连接,但后两个连接直接连接到数据库而不通过监听器,只有当您与数据库在同一台机器上时才能工作.如果第一个失败但其他两个失败,那么JDBC连接也将失败.如果是这样,请使用其他两个中的任何一个连接到数据库并运行ALTER SYSTEM REGISTER.然后退出SQL*Plus并再次尝试第一个表单.
如果第三个失败但第二个失败,请将您的用户帐户添加到ora_dba组.在控制面板>计算机管理>本地用户和组中执行此操作.
一旦你可以得到表格的连接
sqlplus system/system-password@XE
要工作,您应该能够通过JDBC连接到Oracle XE.(顺便说一下,你没有向我们展示你用来连接数据库的JDBC代码,但是我怀疑它很可能是正确的;如果连接字符串的某些部分是错误的,那么会有各种其他错误.)
Raj*_*Raj 39
我也得到了同样的错误但是当他们尝试了所有这三个失败时.如果以上三个失败.如果你发现服务(我的情况下是XE)丢失,请尝试LSNRCTL状态试试这个
现在你可以看到服务
即使看不到尝试这个sqlplus /nolog
conn system ... password ...
connected.
alter system register;
exit
lsnrctl stat
...
sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat
这应该可行......
小智 29
当您收到此错误"ORA-12505时,TNS:侦听器当前不知道连接描述符中给出的SID"
解决方案:打开服务,然后开始OracleServiceXE尝试连接...
raj*_*esh 10
我找到了这个例外的原因.他们是
1)默认情况下数据库XE的名称.所以url将是" jdbc:oracle:thin:@localhost:1521:XE ".
2)确保OracleServiceXE,OracleXETNSListener正在运行.它将位于控制面板\所有控制面板项\管理工具\服务中
Pie*_*e C 10
如果您在 Oracle SQL Developer 中有一个工作连接,请使用连接菜单上的信息来构建您的 url,如下图所示:
在上面的例子中,网址是: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice
请注意,如果您使用的是 SID,则主机名后面有一个冒号 (":") 而不是斜杠 ("/")。
我通过纠正我的JDBC代码解决了这个问题.
正确的JDBC字符串应该是......
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");
Run Code Online (Sandbox Code Playgroud)
但我使用的JDBC字符串是......
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
Run Code Online (Sandbox Code Playgroud)
因此,指定orcl而不是xe的错误显示此错误,因为SID名称错误.
小智 8
当我使用以下代码时,我的问题得到了解决:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
Run Code Online (Sandbox Code Playgroud)
面对类似的错误,上述任何解决方案都没有帮助.listner.ora文件中存在问题.我错误地添加SID了SID_LIST下面看到的(星星之间的部分*).
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
*(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)*
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
Run Code Online (Sandbox Code Playgroud)
更正了此错误,如下所示:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
Run Code Online (Sandbox Code Playgroud)
手动停止侦听器OracleServiceXE和OracleXETNSListener,因为它没有通过转到控制面板\所有控制面板项\管理工具\服务自动停止.重新启动数据库,它就像一个魅力.
Oracle:精简型服务名称语法
仅 JDBC Thin 驱动程序支持 Thin 样式服务名称。语法是:
@//主机名:端口号/服务名
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA