【发布时间】:2017-12-08 05:06:40
【问题描述】:
我正在尝试哄骗 Oracle XE 接受来自 JDBC 的连接。我使用 XE 安装中的 ojdbc6.jar(也有 ojdbc5 和 ojdbc6_g jar)。我尝试过使用 oracle.jdbc.OracleDriver 和 oracle.jdbc.driver.OracleDriver,驱动程序类已注册。我使用描述符:jdbc:oracle:thin:@localhost:1521:XE。
我也尝试过以 /XE 而不是 :XE 结尾,我有时会看到这种情况。还尝试了实际的主机名 Kaveri 而不是 localhost。
我可以用sqlplus登录,数据库已打开,主服务和TNS监听服务正在运行。
listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\Data\OracleXE\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\Data\OracleXE\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = Kaveri)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
tsnames.ora:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Kaveri)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
我明白了
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(Unknown Source)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
或者使用我们自己的java程序我得到
java.sql.SQLRecoverableException: IO Error: Socket read timed out
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
...
Caused by: oracle.net.ns.NetException: Socket read timed out
at oracle.net.ns.Packet.receive(Packet.java:350)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 39 more
lsnrctl 似乎过了一会儿就挂了:
> lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.2.0 - Production on 04-JUL-2017
17:29:09
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12560: TNS:protocol adapter error
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=Kaveri)(PORT=1521)))
这是在 Windows 10 上“重新安装”Oracle XE。为免生疑问,我也关闭了防火墙,但没有任何效果(我希望!)。
如何调试连接到 Oracle?谢谢。
更新:我在撒谎 - 或者 Windows 是 - 当它列出 TNSListener 正在运行时,情况实际上是“本地计算机上的 OracleXETNSListener 服务启动然后停止......”
【问题讨论】:
标签: jdbc windows-10 ojdbc oracle-xe