两个数据库(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
问题
- 能否请您提出解决我问题的方法(我知道在*Action部分有提示,但我仍然无法解决)。
- 也许,你可以向我介绍另一种使两个数据库之间的通信成为可能的方法。
编辑
我设法通过 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 的侦听器。
- Make sure you're using the correct IP address 尝试从您的虚拟机连接到您的 Windows 主机时。
运行 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.
- 一旦您从
tnsping
获得 OK 响应,请尝试使用 sqlplus (sqlplus PAI/PAI@XE
) 或通过虚拟主机上的 SQL Developer 运行 连接到 XE。如果您可以那样连接,您的数据库 link 也应该使用相同的 TNS 条目。
目前我正在尝试了解两个数据库如何相互通信(例如:从一个数据库到另一个数据库)。
详细说明
我有两个 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
问题
- 能否请您提出解决我问题的方法(我知道在*Action部分有提示,但我仍然无法解决)。
- 也许,你可以向我介绍另一种使两个数据库之间的通信成为可能的方法。
编辑
我设法通过 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 的侦听器。
- Make sure you're using the correct IP address 尝试从您的虚拟机连接到您的 Windows 主机时。
运行
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.- 一旦您从
tnsping
获得 OK 响应,请尝试使用 sqlplus (sqlplus PAI/PAI@XE
) 或通过虚拟主机上的 SQL Developer 运行 连接到 XE。如果您可以那样连接,您的数据库 link 也应该使用相同的 TNS 条目。