DBLINK简介及使用
1、ORACLE DBLINK简介
ORACLE DBLINK(数据库链接)顾名思义为数据库之间的中间桥梁,用于链接两个数据库,打破两个数据库的壁垒。对使用人员来说可以在一个数据库直接访问到其他已建立dblink的数据库,通过在查询表后面增加类似@“dblink名称”就可直接访问其他数据库表数据,即表名+@+dblink 名字,用于进行数据流转及数据分析等。如图1-1所示,“zwcs”是我已经创建好访问测试环境的dblink,当我们在其他数据库需要访问测试数据库中的表数据时,直接使用dblink的方式就相当方便。
图1-1dblink方式访问其他数据库的数据
2、dblink的使用
2.1 dblink的创建
首先执行“select * from user_sys_privs where privilege like upper('%DATABASE LINK%')”语句查询当前用户有无dblink创建、删除权限;若有返回行证明有对应权限,sys用户默认有创建dblink的权限。若无返回行,使用sys用户执行“grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK,CREATE DATABASE LINK to 用户名;”语句为对应用户授予创建公共dblink、删除公共dblink的权限;如图2-1所示用户ZWBI已有创建删除dblink权限。
图2-1查询用户dblink权限
赋予用户对应dblink权限后,用户即可创建dblink来访问不同数据库的数据。创建dblink有两种方式一种是使用执行SQL语句,一种是通过pl/sq来创建;SQL语句的创建方式:
'-- Create database link
create public database link dblinkname--创建一个公共dblink
connect to username identified by password--访问的对应用户名,密码
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST =ip )(PORT =db_port)))(CONNECT_DATA =(SERVICE_NAME =orcl)))';
参数说明dblinkname dblink名称,username访问数据库用户名,password访问数据库用户名密码,ip 访问数据库地址,db_port 访问数据库端口号,orcl访问数据库实例名。
PL/SQ创建方式:
应用后对应自动生成的SQ如下所示
-- Drop existing database link
drop public database link TEST1;
-- Create database link
create public database link TEST1
connect to T1
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST =10.256.9.20)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME =orcl)))';
2.2 dblink的使用
语法:表名+@+dblink名字
2.3删除dblink
语法:drop (public) database link dblink名字。
dblink性能分析
1、优点
Dblink对于用户来说无需在乎数据库的物理布局,将各数据库连成一个整体,非常方便用户进行数据的访问与分析,为数据库的跨库实时查询提供了一个很好的解决方案。
2、缺点
Dblink有效的解决了跨库查询的问题,但同时也带来了性能方面的问题,在oracle中调用一次dblink就会新建一个事务,如不及时释放,会导致占用比较多的表空间,有可能造成表空间不足的问题,需在所有调用dblink语句后面加上 commit 或者 rollback;
Dblink在进行排序与复杂的链接查询时的效率相对较低。由于使用DBLINK,本地系统在获取数据时,每次链接都会对远端数据库进行一次全表扫描,且所有数据都会传输回本地数据库内,导致性能降低并且严重浪费当前系统资源。尤其出现一条sql语句从两个DBLINK中取数,更被称之为“性能杀手”,尤其是OLTP型数据库。
总结
针对上述我们对dblink的了解,我们可以针对不同的应用场景来灵活应用dblink,当我们访问的数据量不大,或者访问的频率不高或者主要用于实时性分析的业务场景,这时候可考虑采用dblink的方式来进行系统集成的数据访问和数据分析。Dblink提供了一种不同数据库访问的解决方案,当然我们也可以扩展对应dblink链接的应用,比如通过dblink和数据库快照结合的方式来实现数据的同步等。从目前个人使用dblink的经验来说,当企业数据仓库的数据量小于I TB时dblink的表现还是杠杠的。最后,这篇文章不妥之处,欢迎大家多多指正,大家关于数据库的数据交互有其他的更友好的访问方式欢迎大家多多讨论,共同进步,做数据的同路人。