两个数据库之间的通信(Oracle,VirtualBox)

时间:2016-03-19 00:10:26

标签: oracle virtualbox dblink

目前我正在尝试了解两个数据库如何相互通信(例如:从一个数据库获取数据)。

详细说明

我有两个Oracle数据库,一个在Windows上,另一个在Oracle VirtualBox上。在Windows DB上,我有一个用户(PAI),其中包含一个名为TESTME的表。在VirtualBox上,仅创建了用户(PAI_VB)。现在,我想从VB的SQL Developer中显示TESTME表的内容。

我做完了

我想使用LINK语句显示表TESTME:

CREATE DATABASE LINK LINK_TO_PAI
  CONNECT TO PAI IDENTIFIED BY PAI
  USING 'DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=myIP)(PORT=1521))
  (CONNECT_DATA=(SERVICE_NAME=XE))';

注意:“说明”部分中的数据来自Windows上的tnsname.ora文件。

有了这个,通过以下查询,我将设法显示表:

SELECT * FROM PAI.TESTME@LINK_TO_PAI;

不幸的是,它不起作用。

来自控制台的错误

ORA-12154: TNS:could not resolve the connect identifier specified
12154. 00000 -  "TNS:could not resolve the connect identifier specified"
*Cause:    A connection to a database or other service was requested using
           a connect identifier, and the connect identifier specified could not
           be resolved into a connect descriptor using one of the naming methods
           configured. For example, if the type of connect identifier used was a
           net service name then the net service name could not be found in a
           naming method repository, or the repository could not be
           located or reached.
*Action:   
           - If you are using local naming (TNSNAMES.ORA file):
           - Make sure that "TNSNAMES" is listed as one of the values of the
           NAMES.DIRECTORY_PATH parameter in the Oracle Net profile

问题

  1. 请问你能解决我的问题(我知道在*行动部分有一个提示,但我仍然无法解决)。
  2. 也许,您可以向我介绍另一种方法,使两个数据库之间的通信成为可能。
  3. 修改

    我设法通过SQLDeveloper和SQLPlus从我的VB机器连接到Win10上的机器。不幸的是,使用Oracle LINK我无法访问数据库中的数据。

    已解决!!

    我设法解决了我的问题。 LINK中存在的问题。以下部分:

    'DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=myIP)(PORT=1521))
      (CONNECT_DATA=(SERVICE_NAME=XE))' 
    

    在tnsnames.ora文件中我应该按如下方式定义我的链接:

    CREATE DATABASE LINK LINK_TO_PAI
    CONNECT TO PAI IDENTIFIED BY PAI
    USING 'xe';
    

    在那次微小的改变之后,我能够在我的例子中自由地使用LINK。干杯:)

2 个答案:

答案 0 :(得分:3)

以下是您需要为工作数据库链接提供的内容:

  • 两台主机之间的网络连接。
  • 在您要连接的主机上运行的Oracle侦听器进程。
  • 创建链接时更正TNS条目。
  • 更正用户名和密码以连接到远程数据库。

您获得的TNS-12154错误意味着虚拟主机上运行的数据库无法使用您提供的描述访问XE的侦听器。

    尝试从虚拟机连接到Windows主机时,
  1. Make sure you're using the correct IP address
  2. 从虚拟环境运行tnsping以查看它是否可以访问Windows主机侦听器。

    tnsping 'DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=your_windows_host_ip_from_step_1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE))'
    
    如果您的TNS条目在虚拟机上的tnsping XE文件中存储为XE,则只需

    tnsnames.ora
    另请参阅: Oracle文档 - Testing Connections

  3. tnsping获得OK响应后,尝试使用sqlplus(sqlplus PAI/PAI@XE)或通过在虚拟主机上运行的SQL Developer连接到XE。如果您可以通过这种方式连接,那么您的数据库链接也应该使用相同的TNS条目。

答案 1 :(得分:0)

这是oracle的一个棘手的部分,因为有许多不同的方式来建立连接。 我建议您开始确保在Windows和虚拟机环境中都有tnsnames.ora文件。你顺便在VirtualBox中运行什么操作系统? 在两个tnsnames.ora文件中,都应该命名两个数据库。最容易使它们相同。 然后将sql * plus从windows连接到VirtualBox中的数据库,从VirtualBox连接到Windows上的数据库。 只是为了确保您的网络和tns配置正常。

如果这样可以在使用后使用tnsnames中的servce别名重新创建db-link。这应该有用。