ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID
我在我的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
我通过更正我的jdbcstring解决了这个问题。
例如,正确的jdbcstring应该是…
jdbc:oracle:thin:@myserver:1521/XE
但是我使用的jdbsstring是…
jdbc:oracle:thin:@myserver:1521:XE
(注意: 1521
和XE
之间应该是/
)
这个糟糕的jdbcstring也给我一个ORA-12505错误。
有几件事情可能会导致这个问题,但在开始使用JDBC之前,需要确保可以使用SQL * Plus连接到数据库。 如果您不熟悉SQL * Plus,那么它就是连接Oracle数据库的命令行工具,Oracle数据库已经成为Oracle的标准组件,并且已包含在Oracle XE中。
使用JDBC连接到Oracle数据库时,不能直接连接到数据库。 而是连接到TNS侦听器,然后将其连接到数据库。 错误ORA-12505
意味着监听程序已经启动,您可以连接到它,但无法将您连接到数据库,因为它不知道该数据库已启动。 有两个原因:
- 数据库还没有启动,
- 数据库没有注册到监听器,例如,因为数据库是在监听器之前启动的。 (当数据库启动的时候,如果监听器已经在运行,它将自己注册到监听器,如果监听器没有运行,数据库不会自行注册,如果监听器启动,它不会去寻找可能的数据库注册。)
ORA-12505意味着监听者知道该数据库,但监听者没有收到数据库通知数据库已启动。 (如果您尝试连接到错误的数据库,使用错误的SID,则会出现ORA-12154错误“TNS:无法parsing指定的连接标识符”。)
服务pipe理单元中运行了哪些Oracle服务? (从“控制面板”>“pipe理工具”>“服务”或者“开始”>“运行”>“ services.msc
打开此项)。需要运行服务OracleServiceXE和OracleXETNSListener。
如果这两个服务都已经启动,您可以在命令提示符下使用以下任何一种方式连接到SQL * Plus中的数据库吗? (我假设你在安装Oracle XE的计算机上运行这些程序。)
sqlplus系统/ 系统密码 @XE
sqlplus系统/ 系统密码
sqlplus / as sysdba
(使用您在Oracle XE安装期间为SYS和SYSTEM用户设置的密码replacesystem-password
。)
这三个中的第一个通过TNS侦听器连接,但是第二个不通过侦听器直接连接到数据库,并且只在与数据库位于同一台计算机上时才起作用。 如果第一个失败,而另外两个成功,那么JDBC连接也将失败。 如果是这样,请使用其他两个连接到数据库并运行ALTER SYSTEM REGISTER
。 然后退出SQL * Plus并再次尝试第一个表单。
如果第三个失败,但第二个失败,请将您的用户帐户添加到ora_dba组。 在控制面板>计算机pipe理>本地用户和组中执行此操作。
一旦你可以得到表格的连接
sqlplus系统/ 系统密码 @XE
要工作,您应该能够通过JDBC连接到Oracle XE。 (顺便说一下,你没有向我们展示你用来连接数据库的JDBC代码,但是我认为这很可能是正确的;如果连接string的一部分是错误的,会出现各种其他错误。
我也得到了同样的错误,但尝试所有三个失败。 如果以上三个失败。请尝试LSNRCTL状态,如果你发现服务(XE在我的情况下)失踪尝试这个sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...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
这应该可能工作…
当你得到这个错误“ORA-12505,TNS:侦听器当前不知道在连接描述符中给出的SID”
解决scheme:打开服务,然后启动OracleServiceXE
,然后尝试连接…
我发现了这个例外的一些原因,他们是
1)默认数据库XE的名称,这个URL将是“ jdbc:oracle:thin:@localhost:1521:XE ”。
2)确保OracleServiceXE,OracleXETNSListener正在运行。它将位于控制面板\所有控制面板项目\pipe理工具\服务
我通过纠正我的JDBC代码解决了这个问题。
正确的JDBCstring应该是…
conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");
但是我使用的JDBCstring是…
conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
所以,指定orcl而不是xe的错误显示了这个错误,因为SID名称是错误的。
我使用下面的代码解决了我的问题:
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
我最初来到这里也遇到了同样的问题。 我已经在Windows 8(64位)上安装了Oracle 12c,但是我已经通过命令行上的'TNSPING xe'解决了它…如果未build立连接或未find名称,请尝试数据库名称,在我的情况下,它是'orcl'…'TNSPING orcl'再次,如果ping成功,那么你需要在这种情况下(或任何数据库名称使用)更改SID为'orcl'…
Oracle:瘦型服务名称语法
瘦式服务名称仅受JDBC Thin驱动程序支持。 语法是:
@ //主机:端口号/服务名
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
我还没有看到广泛讨论的一种可能性,就是解决主机本身的主机名可能有问题。 如果在/ etc / hosts中没有$(hostname)的条目,Oracle监听器会感到困惑,不会出现。
原来是我的问题,并在/ etc / hosts中添加主机名和IP地址解决了这个问题。
面对类似的错误,上述任何解决scheme都没有帮助。 在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)
更正了这个错误,如下所示:
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)
停了下来,数据库
手动停止监听器OracleServiceXE和OracleXETNSListener,因为它不会自动通过转到控制面板\所有控制面板项目\pipe理工具\服务停止。 重新启动数据库,它像一个魅力。
我也面临同样的问题。 我已经使用VMware在Windows XP操作系统中安装了Oracle Express版本10g,并且工作正常。 由于在10g提供的SQL实用程序中inputSQL查询非常尴尬,因为我习惯于与SQL开发人员一起工作,所以我在XP中安装了32位SQL开发人员,并尝试连接到我的DB SID“XE”。 但连接失败,错误-ORA-12505 TNS侦听器当前不知道连接描述符中给出的SID。 由于SQL工具正常工作,并且我也使用相同的方法创build了less数Informatica映射,所以我在海上遇到了这个问题。 我在这些东西上浏览了很多东西,并在公共论坛上检查了“lsnrctl”的状态后,向我提供了一些build议,但无济于事。 但是,今天早上我试着再次创build一个新的连接,而瞧,它没有问题的工作。 在阅读了几篇文章之后,我猜测有时候听者会在数据库连接之前收听,或者是因为我在这里是一个新手而原谅我,但是我build议重新启动机器并再次检查。
我有同样的问题,所以要解决这个问题我首先重新configuration我的监听器使用netca
后,我删除了我的旧数据库是ORCL通过使用dbca
然后我使用dbca
再次创build新的数据库
我面临同样的问题,并通过重新启动OracleServiceXE服务解决。 转到Services.msc,然后validation“OracleServiceXE”服务已启动并正在运行
通过在主机中执行tnsping和实例名称来检查。 它会给你tns描述和大部分时间主机名是不同的,这是不匹配的。
我同样解决我的问题
在Unix机器上$ tnsping(回车)
它给了我全面的描述,我发现主机名是不同的.. 🙂
搞了一些cmd后突然得到了同样的问题。 原来ORACLE SERVICE XE已经停止运行了。 花了我2秒,从pipe理工具重新启动它。 TNX!
在浏览start->run->services.msc
时,请检查OracleServiceXE
和OracleXETNSListener
的状态是否已经start->run->services.msc
。
对于我的情况,只有OracleXETNSListener
已经启动,但是OracleServiceXE
没有启动,当我通过right clicking -> start
并检查它为我工作的连接
我在SQL Workbench有类似的问题。
url:
jdbc:oracle:thin:@ 111.111.111.111:1111:xe
不起作用。
url:
jdbc:oracle:thin:@ 111.111.111.111:1111:asdb
作品。
这有助于我的具体情况。 我担心,这可能存在许多其他的解决scheme。
有类似的问题。 这个问题突然发生了 – 我们有负载均衡的数据库连接URL,但是在jdbc连接中我直接指向一个db。
更改为负载平衡数据库url,它的工作。
在我的情况下,没有工作,最后我重新启动我的甲骨文和TNS的听众,一切工作。 挣扎了两天。
我通过在我的TNSNAMES.ora文件中将“ SID ”更改为“ SERVICE_NAME ”来解决此问题。
请查看您的数据库是否要求SID或SERVICE_NAME。
干杯
如果您使用Oracle Express Edition,则应该具有此URL
JDBC:预言:瘦:@localhost:1521:XE
我有类似的问题与liquibaseconfiguration插件在pom.xml。 我改变了我的configuration:
`<configuration> <driver>oracle.jdbc.OracleDriver</driver> <url>jdbc:oracle:thin:@localhost:1521:xe</url> <defaultSchemaName></defaultSchemaName> <username>****</username> <password>****</password> </configuration>`