Oracle DBLink创建和维护以及ORA-02085 解决办法(一)

2015-07-16 12:07:38 · 作者: · 浏览: 0

首先Oracle DBLink 分成 如下三种:


创建dblink:


一:创建 public database link 的实例:


create public database link? todb151?


? ? ? connect to hezi? identified by manager


? ? ? using '(DESCRIPTION =


? ? ? ? ? ? ? ? (ADDRESS_LIST =


? ? ? ? ? ? ? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.4.151)(PORT = 18000))


? ? ? ? ? ? ? ? )


? ? ? ? ? ? ? ? (CONNECT_DATA =


? ? ? ? ? ? ? ? ? (SERVICE_NAME = newzqdb)


? ? ? ? ? ? ? ? )


? ? ? ? ? ? ? )';? ?
应该注意的是:
1,上面的hezi 这个用户,是你要连接的远程数据库中的用户(也就是 4.151上的)。


2,SQL> select * from pd_zh_cn.tb_goods@todb151;? 通过todb151来跨库查询4.151,会拥有hezi的查询权限。只要本地的用户拥有数据库访问权限即可,所以尽量不要建public数据库连接,或者不要用大权限用户hezi来创建,以免让本地小权限的用户,去远程4.151查看到了不该看到的信息。


3.using 后面的引号中间的内容实际上就有? 本地tnsname.ora 中的相应数据库连接信息。所以这里也可以直接改写成:
create public database link? todb151?


? ? ? connect to hezi? identified by manager


? ? ? using 'db151' ;? ? ? ? ? ? ? ? ? ? ?


前提是本地tnsname.ora 文件中有:


? db151 =


? (DESCRIPTION =


? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.151)(PORT = 18000))


? ? (CONNECT_DATA =


? ? ? (SERVER = DEDICATED)


? ? ? (SERVICE_NAME = newzqdb)


? ? )


? )


其中SERVICE_NAME 一般是下面红字部分,


SQL> show parameter service_names


NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE? ? ? ? VALUE


------------------------------------ ----------- ------------------------------


service_names? ? ? ? ? ? ? ? ? ? ? ? string? ? ? newzqdb


还要注意要和监听的服务名一致,因为这个远程是要借助监听的。这里明确的告诉大家,配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME)输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAME和tnsnames.ora中的SERVICE_NAME保持一致,所以如果是静态监听,那么在创建dblink时应该也应该符合,service_name =listerner.ora中的GLOBAL_DBNAME ,(创建dblink时不一定非得一样)


[oracle@rac1 ~]$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 01-JUL-2015 21:39:53


Copyright (c) 1991, 2009, Oracle.? All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=newzq.com.cn)(PORT=18000)))
STATUS of the LISTENER
------------------------
Alias? ? ? ? ? ? ? ? ? ? LISTENER
Version? ? ? ? ? ? ? ? ? TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date? ? ? ? ? ? ? ? 01-JUL-2015 20:18:41
Uptime? ? ? ? ? ? ? ? ? ? 0 days 1 hr. 21 min. 12 sec
Trace Level? ? ? ? ? ? ? off
Security? ? ? ? ? ? ? ? ? ON: Local OS Authentication
SNMP? ? ? ? ? ? ? ? ? ? ? OFF
Listener Parameter File? /u01/oracle/products/database/11.2.0.1/network/admin/listener.ora
Listener Log File? ? ? ? /u01/oracle/products/diag/tnslsnr/newzq/listener/alert/log.xml
Listening Endpoints Summary...
? (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=newzq.com.cn)(PORT=18000)))
Services Summary...
Service "newzqdb" has 1 instance(s).
? Instance "newzqdb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


二:创建 private dblink 实例:注意没有private字眼。


? create database link dblink


? ? ? ? connect to liuwenhe identified by liuwenhe


? ? ? ? using '(DESCRIPTION =


? ? ? ? ? ? ? ? (ADDRESS_LIST =


? ? ? ? ? ? ? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.151)(PORT = 1521))


? ? ? ? ? ? ? ? )


? ? ? ? ? ? ? ? (CONNECT_DATA =


? ? ? ? ? ? ? ? ? (SERVICE_NAME = newzqdb)


? ? ? ? ? ? ? ? )


? ? ? ? ? ? ? )';?


?管理dblink:? ? ? ? ? ? ? ? ?


在当前数据库下查看所有的DBLINK的方法:


? ? 1. select * from dba_db_links;? ? ?


删除当前数据库下的一个指定的DBLINK的方法:


? ? 1. 删除public link?


? ? ? ? drop public database link dblink;


? ? 2. 删除private link?


? ? ? ? drop database link dblink;


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
第二种处理方法:调整数据库参数gl