无法通过禁用侦听器将JDBC连接到Oracle DB

时间:2016-05-16 19:54:13

标签: java .net oracle

任务并且未能将Java代码连接到已禁用 TNS侦听器的Oracle 11.2数据库。代码应该在与DB相同的机器上运行,所以我的理解是可以连接

当给出正确的用户名和密码时,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 = ...

[编辑] 忘记提及现有的.NET代码能够建立连接。不是.NET开发人员,但我认为这是相关的代码。

Dim oConn As New OracleConnection

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

2 个答案:

答案 0 :(得分: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))
    )
    

答案 1 :(得分:0)

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