版本:Oracle 11.2.0.4.0
操作系统:linux redhat 6.4
问题描述:
在实例为hsdb1创建可以连接远程实例dwdb 的 dblink ,查询实例dwdb下的数据报错。
创建脚本:
CREATE public DATABASE LINK hsdb1 CONNECT TO scott IDENTIFIED BY Tiger
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.151)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = dwdb)))';
错误信息如下:
问题分析
ORA-02085 解决办法 :
// *Cause: a database link connected to a database with a different name.
// The connection is rejected.
// *Action: create a database link with the same name as the database it
// connects to, or set global_names=false.
//
2)从报错信息的描述上已经可以得到问题的原因和处理方法
错误原因:使用的dblink名字与要连接的数据库名字不相同
处理方法:有两种处理方法
第一种处理方法:创建与对方数据库名字相同的dblink
第二种处理方法:调整数据库参数global_names值为false,取消这种限制
global_names和global_name看起来很相似,global_names的作用是创建db link时是否强制使用远程数据库的global_name,如果global_names=true否,则db link name必须要求是remote database的global_name,否则创建之后db link 不能连同 。
验证:
问题解决
1.登录实例hsdb1对应的用户执行如下脚本:
alter system set global_names=FALSE;
2。创建和对方数据库名字相同的dblink
select * from global_name;
补充:
Oracle DBLink创建和维护以及ORA-02085 解决办法
Creating Database Links
如果多个用户共享一个DBlink 创建脚本
--sys用户创建
CREATE SHARED PUBLIC database link DWDB
CONNECT TO ADM IDENTIFIED BY FoticAdm
AUTHENTICATED BY ADM IDENTIFIED BY FoticAdm
USING'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.7.54.21)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dwdb)
)
)';