【问题标题】:cant connect with JDBCto Oracle DB with listener disabled在禁用侦听器的情况下,无法通过 JDBC 连接到 Oracle DB
【发布时间】:2016-09-12 17:32:11
【问题描述】:

负责将 Java 代码连接到已禁用 TNS 侦听器的 Oracle 11.2 数据库,但未能成功。代码预计与数据库在同一台机器上运行,所以我的理解是连接是可能的

如果提供正确的用户和密码,SQLPlus 可以在本地连接。

我不会添加我尝试过的所有代码,但它看起来大致像这样(目前):How to connect JDBC to tns oracle。在这一点上,我只是在猜测连接字符串,没有运气。

虽然我不确定它是否相关,但这里是 tnsnames.ora 结构。

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA = ...
ORACLR_CONNECTION_DATA = ...

[EDIT] 忘了提到现有的.NET 代码可以建立连接。不是 .NET 开发人员,但这是我认为的相关代码。

Dim oConn As New OracleConnection

oConn.ConnectionString = String.Format("User id={0};Password={1};", "***", "***")
oConn.Open()
oConn.Close()

【问题讨论】:

    标签: java .net oracle


    【解决方案1】:

    当监听器关闭时,您仍然可以通过共享内存(IPC)连接到数据库。但瘦(纯 Java)JDBC 驱动程序不支持该选项。

    所以你的选择是:

    • 仅在 localhost 127.0.0.1 上启动侦听器。所以外界无法访问它
    • 使用 JDBC OCI 驱动,但是这个不太好设置。

      XE=
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(Key = IPCKEY))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA = (SID = XE))
      )
      

    【讨论】:

    • Listener 不是一个选项,打算尝试 OCI 路由。我能找到的最好的文档在这里:docs.oracle.com/cd/B28359_01/java.111/b31224/…。你能推荐任何其他可能有帮助的资源吗?
    • 我不明白为什么监听器不是一个选项,但是这些天共享内存没有被广泛使用。这是古代的东西。
    • 我不拥有数据库,拥有数据库的团队出于安全原因拒绝更改。让我感动的是 sqlplus 可以很好地连接,我假设(可能不正确)它是用 Java 编写的。
    • sqlplus 是用 C 语言编写的,并且使用 OCI 驱动程序。 安全原因是无稽之谈。如果要禁止访问数据库,请使用防火墙。
    • PS:那个数据库在windows上运行?那么这完全不合逻辑。
    【解决方案2】:

    根据定义,tns 连接是需要监听器的网络连接。客户端和数据库在同一台机器上并不重要,它仍然使用 tns(网络)协议。

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 2012-03-11
      • 2018-07-20
      • 2013-09-29
      • 1970-01-01
      • 2017-01-21
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多