我需要创建一个数据库链接,该链接是指向同一服务器上架构的链接。是否有一个特殊的关键字可以用于此?(如本地或本地主机)
我不完全确定 tnsnames 中的服务器名称是什么,这可能是我的问题的一部分。
这是针对涉及需要数据库链接才能继续的脚本的复杂情况。
我需要创建一个数据库链接,该链接是指向同一服务器上架构的链接。是否有一个特殊的关键字可以用于此?(如本地或本地主机)
我不完全确定 tnsnames 中的服务器名称是什么,这可能是我的问题的一部分。
这是针对涉及需要数据库链接才能继续的脚本的复杂情况。
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 文件中的相应条目。
如果您无法修改 TNSNAMES.ORA,您甚至可以对 DB 链接使用Easy Connect 语法。假设监听器在默认端口上,那么下面的 SQL 将获取连接字符串
select utl_inaddr.get_host_address||':1521/'||sys_context('USERENV','INSTANCE_NAME') from dual
如果“同一服务器上的架构”是指同一数据库中的架构,您可能会遇到问题。(例如,如果脚本将架构之外的任何内容视为外部数据库以展平后续 SQL 操作)。
Oracle 对环回链接的处理略有不同,如果使用链接的数据库全局名称,您可能会收到 ORA-02082 错误(“环回数据库链接必须具有连接限定符”)。如果您收到此错误,您必须将链接命名为不同的名称,例如“loopback”,但这也需要将 global_names 数据库参数设置为 false。否则,您将收到“ORA-02085:数据库链接 someName 连接到 someOtherName”