从另一个ORACLE数据库查询表

Xuh*_*aib 8 sql oracle oracle11g

我有两个不同的数据库,一个DEVORADB用于开发,另一个UATORADB用于测试.UATORADB拥有尚未开发的最新数据.我想查询UATORADB数据库中的表DEVORADB.我是以DEVORADB这样的方式写作但没有得到结果:

SELECT * FROM TABLE_NAME@UATDEVORADB.
Run Code Online (Sandbox Code Playgroud)

spe*_*593 11

对于Oracle,

CREATE DATABASE LINK ...
Run Code Online (Sandbox Code Playgroud)

例如

通过创建和测试数据库链接,您可以执行查询(显示的样式)以从远程数据库中检索行.

参考:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5005.htm#SQLRF01205

跟进

注意:在Oracle中,术语"数据库"是指与Oracle"实例"关联的数据文件和日志文件.从第二个"数据库"检索数据意味着您需要与另一个数据库建立第二个连接.Oracle提供了一种称为"数据库链接"的工具.这允许一个数据库实例的会话(连接)连接到另一个数据库实例.(如果没有此工具,客户端将需要创建两个单独的连接,并且需要单独查询这两个数据库.)

如果此问题涉及从同一数据库中的两个单独"模式" 查询,只要用户对第二个模式中的对象具有足够的权限,就可以使用模式的名称限定标识符,例如

SELECT * FROM UATDEVORADB.TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

要访问单独数据库上的数据,可以使用数据库链接...

CREATE DATABASE LINK UADEVORADB 
  CONNECT TO user 
  IDENTIFIED BY password
  USING 'uadevoradb' ;
Run Code Online (Sandbox Code Playgroud)

(这将需要Oracle服务器上的tnsnames.ora文件或oracle名称服务器中的适当匹配条目,或者可以拼写连接详细信息来代替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)))'
Run Code Online (Sandbox Code Playgroud)

如果数据库链接中指定的"user"与远程系统上表的"owner"不同,并且没有引用该表的同义词,则表标识符需要与所有者进行限定...

SELECT * FROM OWNER.TABLE_NAME@UADEVORADB ;
Run Code Online (Sandbox Code Playgroud)