【发布时间】:2018-04-17 14:58:31
【问题描述】:
我们设置了一个 Oracle 服务器,并使用带有 SSL 的 TCP 作为连接。这个设置是使用助手向导完成的,我们几乎在所有地方都使用了默认设置(这也意味着不存在 tnsnames.ora 或 listener.ora)。 lsnrctl status 表明正确的端口正在侦听。
我们正在尝试通过 DBeaver 和 SQuirrel SQL 连接到该数据库,但无法使其正常工作。我们已经为程序设置了 vmargs 以包含服务器的证书(例如dbeaver.exe -vmargs -Djavax.net.ssl.trustStore=C:/...keystore.jks -Djavax.net.ssl.trustStorePassword=password -Djavax.net.ssl.trustStoreType=JKS),这可以正常工作。
使用具体的 JDBC URL 字符串 (jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=IP)(PORT=5500))(CONNECT_DATA=(SERVICE_NAME=testdb)))) 连接到数据库不起作用,并在 60 秒后超时而没有出现适当的错误(IO 错误:从读取调用中得到减一)。我们已经尝试了几乎所有方法,但无法使其正常工作。
端口分配正确,正常的TCP协议和1521端口可以成功访问数据库。jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=IP)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=testdb)))
我们是否缺少步骤?似乎没有任何防火墙问题。证书似乎也可以正常工作,但我们无法连接任何程序(或通过命令行连接 sqlplus)。
有人知道可能是什么问题吗?谢谢!
【问题讨论】:
-
你的听众听TPCS协议吗?您应该在
lsnrctl status的输出中看到 -
是的:
Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=...)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=...)(PORT=5500))(Security=(my_wallet_directory=/home/oracle/app/product/12.1.0/dbhome_1/admin/testdb/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "testdb" has 1 instance(s). Instance "testdb", status READY, has 1 handler(s) for this service... Service "testdbXDB" has 1 instance(s). Instance "testdb", status READY, has 1 handler(s) for this service... -
您正在尝试连接端口 5500,但该端口仅用于 EMExpress。请参阅“Presentation=HTTP”,这意味着您没有 SQLNet 协议。您需要另一个用于 SQLNet over TCPS 的端口。看看blogs.oracle.com/dev2dev/…
-
有道理,是的!也感谢您的链接。我现在使用新的端口 2484 让它工作,但是,没有遵循链接说明(尽管它们对我们的 java 客户端很有用)。看似重要的注意事项:将oracle服务器和客户端分开,不要在同一台机器上操作它们,这对我不起作用。
-
我很高兴听到!您可能希望通过您所采取的步骤自己回答您的问题,以便将来在此方面使用谷歌搜索的用户可以从您的专业知识中受益:)