我需要创建一个数据库链接,该链接是指向同一服务器上的架构的链接。是否有一个特殊的关键字用于此? (如本地或本地主机)
我不完全确定服务器名称在tnsnames中是什么,这可能是我问题的一部分。
这是一个复杂的情况,涉及需要数据库链接继续的脚本。
答案 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”