从一台PC连接到Oracle数据库,从另一台机器连接到Java应用程序

时间:2015-02-16 06:43:17

标签: oracle jdbc oracle12c tnsnames

我已经在我的机器上安装了Oracle 12c(桌面类),我可以在同一台机器上通过sql developer使用它。现在我如何在局域网中使用来自另一台机器(用于Java应用程序)的相同数据库?我尝试使用jdbc瘦驱动程序,如下所示:jdbc:oracle:thin:@10.0.11.69:1521:orcl其中10.0.11.69是我安装Oracle的IP地址。我是否需要安装任何安装了oracle的服务器(10.0.11.69)才能从另一台机器连接到我的数据库?   我从过去的3天开始尝试这个问题并提到同一模型的许多问题,但没有一个问题解决了我的问题。 我的tnsnames.ora描述如下:

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

提前致谢。

3 个答案:

答案 0 :(得分:0)

如果是Oracle 12c安装,则需要连接到PDB。您可以在tnsnames.ora中添加以下条目:

   pdborcl =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = pdborcl)
      )
    )

设置完成后,需要重新启动监听器。

lsnrctl stop
lsnrctl start

然后连接字符串将是这样的:

jdbc:oracle:thin:@//10.0.11.69:1521/pdborcl

请注意,上面的连接字符串使用服务名称而不是SID,因为在12C中我们需要使用服务名称而不是SID来连接到PDB。有关详细信息,请查看此post

答案 1 :(得分:0)

Java应用程序不会使用它自己的tnsnames.ora。你必须打电话:

System.setProperty("oracle.net.tns_admin", "..path to tnsnames.ora");

告诉司机在哪里搜索它。 另请注意,瘦驱动程序不支持某些tnsnames.ora构造。例如,"包括"指令。

答案 2 :(得分:0)

感谢以下链接Configuring the connection between client and server Oracle 10g

经过长时间的研究,我发现我需要在listener.ora文件中添加我的局域网地址(10.0.11.69),以解决我的问题。

所以我的listener.ora现在看起来像这样:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
        (ADDRESS_LIST=
            (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
            (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.11.69)(PORT = 1521))

        )

    )
  )