【问题标题】:Query table from another ORACLE database从另一个 ORACLE 数据库查询表
【发布时间】:2015-02-06 15:14:51
【问题描述】:

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

SELECT * FROM TABLE_NAME@UATDEVORADB.

【问题讨论】:

  • 它的 db_name.table_name
  • 您需要连接到两个数据库(具有唯一的数据库句柄),并分别查询每个句柄
  • 删除了 mysql 标记,因为该语法显然适用于 Oracle
  • 哪个数据库是Oracle,哪个是MySQL?
  • 如果您使用的是 Oracle,则需要 set up a dblink

标签: sql oracle oracle11g


【解决方案1】:

对于甲骨文,

CREATE DATABASE LINK ...

例如

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

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

跟进

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

如果这个问题是关于从 same 数据库中的两个单独的“模式”查询,只要用户对第二个模式中的对象有足够的权限,标识符就可以用名称来限定架构的,例如

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 ;

【讨论】:

  • 如何在 TOAD 中创建链接
  • 如果您在 TOAD 调用 CREATE DATABASE LINK 命令时遇到错误,则您无权在任何 SQL 工具中创建数据库链接,并且可能需要让您的 DBA 创建链接,或授予您创建链接的权限。
  • 对于提供的这个示例代码,我发现在 USING 子句中需要多一个括号: (DESCRIPTION=(...)) 而不是 DESCRIPTION=(...) If所以 - 它对我来说很好!感谢您的合格回答!
  • @AlexeyPyankov:感谢您指出整个 tnsnames 条目应包含在 USING 子句中的括号中。我已经编辑了答案以包括您推荐的那组外部括号。 (我从不使用完整的 tnsnames 条目。我总是按名称引用 TNSNAMES 或 LDAP 条目。如果需要更改主机名、端口或服务名称,我可以修改 tns 条目,而无需更改任何 db_link定义。)
  • 只是添加供参考,您也可以使用:CREATE DATABASE LINK ADEVORADB CONNECT TO user IDENTIFIED BY password USING 'uadevorahost1:1521/uadevoradb.domaindb'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2017-08-17
  • 1970-01-01
  • 2017-04-02
  • 2023-01-11
  • 2017-09-30
相关资源
最近更新 更多