目前我正在尝试了解两个数据库如何相互通信(例如:从一个数据库获取数据)。
我有两个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
我设法通过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。干杯:)
答案 0 :(得分:3)
以下是您需要为工作数据库链接提供的内容:
您获得的TNS-12154错误意味着虚拟主机上运行的数据库无法使用您提供的描述访问XE的侦听器。
从虚拟环境运行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。
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。这应该有用。