我正在尝试使用ojdbc6.jar连接到远程Oracle数据库。 JDK 1.8,Oracle 11g。
听众无法工作!:
C:\Users\user>lsnrctl services
LSNRCTL for 64-bit Windows: Version 12.1.0.2.0 - Production on 09-FEB-2018
20:20:37
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
64-bit Windows Error: 61: Unknown error
有没有办法在不使用TNSNAMES.ora中的任何记录的情况下进行连接?
我尝试过各种各样的选择,但都没有。
选项#1:
("jdbc:oracle:thin:scott/tiger@//server_address:1521/SERVICE_NAME");
(scott = username,tiger =密码)
其中:
server_address是ip,如169.xx.xx.xxx
SERVICE_NAME源自:
SELECT sys_context('USERENV', 'SERVICE_NAME') FROM DUAL;
选项#2:
("jdbc:oracle:thin:scott/tiger@//SERVER_HOST:1521/SERVICE_NAME")
其中: - SERVER_HOST 源自:
SELECT sys_context('USERENV', 'SERVER_HOST') FROM DUAL;
选项#3:
("jdbc:oracle:thin:scott/tiger@//server_address:1521:SID");
其中SID来自:
SELECT sys_context('USERENV', 'SID') FROM DUAL;
选项#4:
与#1,#2或#3相同,但在server_address或SERVER_HOST之前没有“//”。
我尝试了更多组合,混合server_address,SERVER_HOST和SID,但无济于事。我总是得到同样的错误:
java.sql.SQLException: Listener refused the connection with the following
error:
*ORA-12514, TNS:listener does not currently know of service requested in
connect descriptor*
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at
oracle.jdbc.driver.T4CDriverExtension.getConnection
(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at testutil.OracleConnection.main(OracleConnection.java:55)
Caused by: oracle.net.ns.NetException: Listener refused the connection with
the following error:
ORA-12514, TNS:listener does not currently know of service requested in
connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:399)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
... 7 more
如果不涉及TNSNAMES,我认为我使用了正确的语法。据我研究过,如果我在TNSNAMES中有条目,语法如下:
("jdbc:oracle:thin:@host_address:1521:xe","scott", "tiger");
但是,不幸的是,我没有\ network \ admin \ sample的管理员权限,所以在我的情况下它不是一个选项。
答案 0 :(得分:1)
您的选择都是正确的,但听众必须正常工作。如果侦听器无法正常运行,唯一的连接方法是使用bequeath在盒子上,jdbc url看起来像这样
// the url for bequeath connection
String url = "jdbc:oracle:oci8:@";
ods.setURL(url);
答案 1 :(得分:0)
使用JDBC瘦驱动程序远程连接的唯一方法(JDBC URL以jdbc:oracle:thin
开头)是通过tcp或tcps,这两种方法都需要启动并运行并注册监听器。让监听器运行后,您可以尝试在问题中提到的URL。如果您想使用应用程序连续性或RAC等高级选项,我建议使用服务名称而不是SID。