我有两个不同的数据库,一个是我用于开发的DEVORADB
,另一个是测试人员用于测试的UATORADB
。 UATORADB
具有最新数据,尚无开发中。我想从UATORADB
中的DEVORADB
数据库查询表。我以这种方式用DEVORADB
编写,但没有得到结果:
SELECT * FROM TABLE_NAME@UATDEVORADB.
最佳答案
对于Oracle,
CREATE DATABASE LINK ...
例如
创建并测试数据库链接后,您可以进行查询(显示的样式)以从远程数据库中检索行。
引用:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5005.htm#SQLRF01205
FOLLOWUP
注意:在Oracle中,术语“数据库”是指与Oracle“实例”关联的数据文件和日志文件。从第二个“数据库”中检索数据意味着您需要与另一个数据库的第二个连接。 Oracle提供了一种称为“数据库链接”的功能。这允许到一个数据库实例的 session (连接)连接到另一个数据库实例。 (没有此功能,客户端将需要创建两个单独的连接,并且需要分别查询两个数据库。)
如果该问题是关于从同一数据库中的两个单独的“方案”进行查询的,则只要用户对第二模式中的对象具有足够的特权,标识符就可以使用该模式的名称来限定。
SELECT * FROM UATDEVORADB.TABLE_NAME
要访问单独数据库上的数据,可以使用数据库链接...
CREATE DATABASE LINK UADEVORADB
CONNECT TO user
IDENTIFIED BY password
USING 'uadevoradb' ;
(这将需要在Oracle服务器或oracle名称服务器上的tnsnames.ora文件中有一个适当的匹配条目,或者可以用tnsnames.ora条目代替连接详细信息,例如:
CREATE DATABASE LINK UADEVORADB
CONNECT TO user IDENTIFIED BY password
USING '(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=uadevorahost1)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=uadevoradb.domaindb)))'
如果在数据库链接中指定的“用户”与远程系统上表的“所有者”不同,并且没有引用该表的同义词,则表标识符将需要与所有者进行限定...
SELECT * FROM OWNER.TABLE_NAME@UADEVORADB ;
关于sql - 来自另一个ORACLE数据库的查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28368876/