dblink在分布式数据库集群中很常见,今天简单的总结一下。
db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。
数据库名称是db_name。数据库名称一般都取得比较短,重名概率高。
所以,oracle模仿域名搞出一个global_name。
global_name=db_name+db_domain。
有了global_name,就可以实现数据库命名的全局唯一。
例:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
如果global_names=true,那么db link的命名要和远程数据库的global_name相同;(默认)
如果global_names=false,那么你可以随便命名db link。
查询global_names是true还是false,在pl/sql中的命令窗口(不是sql窗口)执行:show parameter global_names
一、首先在tns文件中创建目标数据库的信息。
# tnsnames.ora Network Configuration File: d:\u01\product\11.2.0\dbhome_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) TERRY = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = kkterry-PC)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = terry) ) ) gd2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.199.250)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = good2) ) )
创建connected user的db link语法:此种方法@gd2,只会返回目标库中scott下面的对象。
create public databas link gd2 connect to scott identified by tiger using 'good2';
创建fixed user的db link语法:此方法@gd2,原库是什么用户,就回读取目标库什么用户。如果目标库没有此用户,会报错ora01017,用户名密码不对。
create public databas link gd2 using 'good2';
public参数指的是是否为私有的。
二、dblink查询:
查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:
SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';
三、dblink删除:
DROP PUBLIC DATABASE LINK gd2;
DROP DATABASE LINK gd2;
四、dblink使用:
SELECT xxx FROM table_name@dblink_name;
查询、删除和插入数据和操作本地的数据库是一样的
五、同义词配合:
第四点中from emp@toBeJing可以创建同义词来替代:
CREATE SYNONYM 同义词名 FOR 表名;
CREATE SYNONYM 同义词名 FOR 表名@数据库链接名;
如:create synonym bj_scott_emp for emp@toBeJing;
于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@toBeJing