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

Communication between two databases (Oracle, VirtualBox)

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

详细说明

我有两个 Oracle 数据库,一个在 Windows 上,另一个在 Oracle VirtualBox 上。在 Windows 数据库上,我有一个用户 (PAI),只有一个 table 叫 TESTME。在 VirtualBox 上,只创建了用户 (PAI_VB)。现在,我想显示 SQL 开发者 VB 的 TESTME table 的内容。

我完成了

我想使用 LINK 语句显示 table 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))';

注意:'DESCRIPTION' 部分的数据取自 Windows 上的 tnsname.ora 文件。

有了这个,通过下面的查询我将设法显示 table:

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. 能否请您提出解决我问题的方法(我知道在*Action部分有提示,但我仍然无法解决)。
  2. 也许,你可以向我介绍另一种使两个数据库之间的通信成为可能的方法。

编辑

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

已解决!!

我设法解决了我的问题。问题出在LINK。由于以下部分:

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

位于 tnsnames.ora 文件中,我应该按如下方式定义我的 link:

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

在那个小改动之后,我可以在我的示例中自由使用 LINK。干杯:)

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

如果这可行,请在使用后使用来自 tnsnames 的服务别名重新创建您的 db-link。这应该有效。

这是您需要的工作数据库 link:

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

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

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

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

    或者只是 tnsping XE 如果您在虚拟机的 tnsnames.ora 文件中将 TNS 条目存储为 XE。
    另请参阅: Oracle 文档 — Testing Connections.

  3. 一旦您从 tnsping 获得 OK 响应,请尝试使用 sqlplus (sqlplus PAI/PAI@XE) 或通过虚拟主机上的 SQL Developer 运行 连接到 XE。如果您可以那样连接,您的数据库 link 也应该使用相同的 TNS 条目。