从另一个ORACLE数据库查询表

时间:2015-02-06 15:14:52

标签: sql oracle oracle11g

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

SELECT * FROM TABLE_NAME@UATDEVORADB.

1 个答案:

答案 0 :(得分:9)

对于Oracle,

CREATE DATABASE LINK ...

e.g。

创建并测试了数据库链接后,您可以执行查询(显示的样式)以从远程数据库中检索行。

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

<强>后续

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

如果这个问题是关于从两个单独的&#34;模式查询&#34;在相同的数据库中,只要用户对第二个模式中的对象具有足够的权限,就可以使用模式的名称来限定标识符,例如

SELECT * FROM UATDEVORADB.TABLE_NAME

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

CREATE DATABASE LINK UADEVORADB 
  CONNECT TO user 
  IDENTIFIED BY password
  USING 'uadevoradb' ;

(这将需要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)))'

如果&#34;用户&#34;在数据库链接中指定的不同于&#34;所有者&#34;远程系统上的表格,并且没有引用该表格的同义词,表格标识符需要与所有者进行限定...

SELECT * FROM OWNER.TABLE_NAME@UADEVORADB ;