如何创建远程和本地是同一服务器的数据库链接

时间:2010-06-02 18:46:15

标签: oracle database-link

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

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

这是一个复杂的情况,涉及需要数据库链接继续的脚本。

3 个答案:

答案 0 :(得分:8)

数据库链接机制通过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文件中找到相应的条目。

答案 1 :(得分:4)

如果你不能修改TNSNAMES.ORA,你可以使用Easy Connect syntax甚至数据库链接。 假设侦听器在默认端口上,则以下SQL将获取连接字符串

从双重选择utl_inaddr.get_host_address ||':1521 /'|| sys_context('USERENV','INSTANCE_NAME')

答案 2 :(得分:1)

如果“同一服务器上的架构”表示同一数据库中的架构,则可能会出现问题。 (例如,如果脚本将模式之外的任何内容视为外部数据库以展平后续SQL操作)。

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