创建 create public database link test_link connect to scott identified by tiger using (description = (address_list = (address = (protocol = tcp)(host = 127.0.0.1)(port = 1521)) ) (connect_data = (service_name = lee) ) ); --使用 select enam
创建 create public database link test_link connect to scott identified by tiger using '(description = (address_list = (address = (protocol = tcp)(host = 127.0.0.1)(port = 1521)) ) (connect_data = (service_name = lee) ) )'; --使用 select ename from emp@test_link; --删除 drop public database link test_link;
一:dblink创建:
1、已经配置本地服务
create public database
link tobejing connect to scott
identified by tiger using 'bejing'
数据库连接字符串'bejing'是当前客户端数据库中tnsnames.ora文件里定义的别名名称.可以用net8 easy config或者直接修改tnsnames.ora里定义.
2、直接建立链接
create database link tobejing connect to scott identified by tiger using '(description = (address_list = (address = (protocol = tcp)(host = x.x.x.x )(port = 1521)) ) (connect_data = (service_name = bjorcl) ) )';create database link toiasconnect to ias identified by cisusing '(description =(address_list =(address = (protocol = tcp)(host = 127.0.0.1)(port = 1521)))(connect_data =(service_name = cis1.com)))';
host=数据库的ip地址,service_name=数据库的ssid。
其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。
注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。
1.先创建public database link,不用指定用户和密码
scott@test>conn system/test connected.system@test>create public database link orcl using 'bejing';database link created.
2.再在各个用户下创建私有database link(同public database link名称相同),指定用户和密码
system@test>conn scott/tiger connected. scott@test>create database link orcl connect to scott identified by tiger; database link created.
实际上相当于:
create database link orcl using 'bejing' connect to scott identified by tiger;
db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。
connected user,简单来说,连接方数据库以connected的用户来连接远程数据库。
fixed user,简单来说,连接方数据库以fixed(指定的)用户来连接远程数据库。
看看创建db link语法,你对这两种类型就比较清楚了。
创建connected user的db link语法:
create databas link foo connect to scott identified by tiger using 'bejing' ;
创建fixed user的db link语法:
create databas link foo using 'bejing' ;
db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。
所以,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
二、dblink查询:
查看所有的数据库链接,进入系统管理员sql>操作符下,运行命令:
sql>select owner,object_name from dba_objects where object_type='database link';
三、dblink删除:
drop public database link tobejing
四、dblink使用:
select……from表名@数据库链接名;
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。
例:查询北京数据库中emp表数据 select * from emp@tobejing;
五、同义词配合:
第四点中from emp@tobejing可以创建同义词来替代:
create synonym同义词名for 表名;
create synonym同义词名for 表名@数据库链接名;
如:create synonym bj_scott_emp for emp@tobejing;
于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@tobejing
db link是独立于创建用户(user_db_links的username)起作用的,其他用户无法使用这个连接,无权限也不能删除它。