7

我需要创建一个数据库链接,该链接是指向同一服务器上架构的链接。是否有一个特殊的关键字可以用于此?(如本地或本地主机)

我不完全确定 tnsnames 中的服务器名称是什么,这可能是我的问题的一部分。

这是针对涉及需要数据库链接才能继续的脚本的复杂情况。

4

3 回答 3

8

DB 链接机制通过 TNS,因此只需为您的本地数据库定义一个 TNS 条目并在您的链接中使用它。

您的客户端 TNSNAMES.ORA 文件应包含类似以下内容的条目:

YourDBAlias =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = yourHOST)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = YourDB)
    )
  )

确保该条目也存在于数据库服务器上的 TNSNAMES.ORA 文件中。

然后,将数据库链接创建为:

CREATE [PUBLIC] DATABASE LINK yourLinkName
       CONNECT TO theSchema IDENTIFIED BY thePW
       USING 'YourDBAlias';

这应该可以解决问题(假设您使用的是 TNS 命名)。

此外,如果您不确定数据库的 TNS 名称是什么,可以在 SQL*Plus 中发出以下命令:

show parameter service_names

这将向您显示数据库在其侦听器中注册的名称。您应该能够从中找到 TNSNAMES.ORA 文件中的相应条目。

于 2010-06-02T19:27:43.457 回答
4

如果您无法修改 TNSNAMES.ORA,您甚至可以对 DB 链接使用Easy Connect 语法。假设监听器在默认端口上,那么下面的 SQL 将获取连接字符串

select utl_inaddr.get_host_address||':1521/'||sys_context('USERENV','INSTANCE_NAME') from dual

于 2010-06-02T23:38:29.817 回答
1

如果“同一服务器上的架构”是指同一数据库中的架构,您可能会遇到问题。(例如,如果脚本将架构之外的任何内容视为外部数据库以展平后续 SQL 操作)。

Oracle 对环回链接的处理略有不同,如果使用链接的数据库全局名称,您可能会收到 ORA-02082 错误(“环回数据库链接必须具有连接限定符”)。如果您收到此错误,您必须将链接命名为不同的名称,例如“loopback”,但这也需要将 global_names 数据库参数设置为 false。否则,您将收到“ORA-02085:数据库链接 someName 连接到 someOtherName”

于 2010-06-03T13:01:19.300 回答