我有两个不同的数据库,一个是我用于开发的DEVORADB
,另一个是UATORADB
,测试人员用它来进行测试。 UATORADB
拥有尚未开发的最新数据。我想查询UATORADB
中DEVORADB
数据库中的表。我用这样的方式写DEVORADB
但没有得到结果:
SELECT * FROM TABLE_NAME@UATDEVORADB.
答案 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 ;