[size=13.3333px]database link ,我们习惯称为db link。
作用:用于从a数据库到b数据库之间访问的一种手段。类似于 ogg 中的表同步(用户同步)。如上所述,db link 的主要作用是跨库查询。有很多业务都需要进行跨库查询。在我们公司有时就不得不去去创建一些db link。
优点:创建方式简单、易懂、可以拥有创建用户的所有权限。
缺点:自然,方便的手段就会有更多的不利。
1 大量消耗数据库资源;本地系统每通过DBLINK链接远端系统一次,都会生成一个本地session,如本地session不退出或者手动释放,只有通过session超时才能自动释放,会浪费大量的系统资源
2 容易出现数据库BUG:大量使用DBLINK,本地系统极易出现ORA-02068、ORA-03113、ORA-02080、ORA-02054、ORA-02050等Oracle错误,这种错误大部分会影响当前session正在处理的业务
3 性能较差:由于使用DBLINK,本地系统在获取数据时,每次链接都会对远端数据库进行一次全表扫描,且所有数据都会传输回本地数据库内,导致性能降低并且严重浪费当前系统资源。尤其出现一条sql语句从两个DBLINK中取数,更被称之为“性能杀手”,尤其是OLTP型数据库
4 数据传输不稳定,占用带宽严重,容易产生丢包风险:DBLINK本身没有数据存储、监控等功能,是通过网络中的数据库进行传输时,如果在传输过程中出现数据丢包现象,DBLINK本身不会发现,只用当业务进行完毕才能发现丢包现象,这样会影响当前正在处理的业务;另外,通过DBLINK查询的数据会像数据全部传至本地数据库进行操作,数据传输量很大,占用带宽严重,可能会导致网络堵塞
5 Oracle数据功能受限:DBLINK本身不支持对oracle LOB大对象的操作,在使用PROCDURE时,使用COMMIT等操作时可能会出现错误
6 可扩展性较差:如果多系统之间 使用DBLINK进行传输,每增加一个系统,都会增加一个或多个DBLINK链接或者修改对应的接口程序,如果修改其中一个接口,需要修改所有关联系统内的接口程序
7 维护性差、安全性较低:通过DBLINK进行链接需要将远端数据库用户名、密码、IP地址存在本地数据库,如远端进行密码修改、IP地址变更,本地数据库也需要修改,如果系统较多,每个系统都需要同时修改。切本地数据库管理员能够看到远端数据的密码、IP地址,对系统安全产生影响
可是,即使是在缺点这么这么多的情况下,还是会有人用,归根到底,个人感觉还是oracle对两个库之间的交互做的并不是特别好,ogg 好用是好用,但是在表多的情况下,我们可是深受其害。 [size=13.3333px]用法:创建dblink的先决条件便是两个库要能交互(local database to remote database)网络要能连接正常,其次。要在源端数据库tnsname 文件中配置上访问目标的参数。并且能 tnsping 通。
database link 分为两种:一种为 public(公有) 一种为 private(个人)。顾名思义,公有dblink即源库所有的用户都可以使用,个人dblink则只有创建者用户可以使用。
创建dblink是要有相应的权限的。
select * from user_sys_privs where privilege like upper('%LINK%');
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SYS CREATE DATABASE LINK NO
SYS DROP PUBLIC DATABASE LINK NO
SYS CREATE PUBLIC DATABASE LINK NO
CREATE DATABASE LINK 为创建个人dblink权限。
CREATE PUBLIC DATABASE LINK 为创建公有dblink 权限。 [size=13.3333px]创建dblink
当tnsnames中有了参数。且有了相应的权限之后,就可以创建dblink。创建方式有以下几种。 [size=13.3333px]创建个人dblink语句为 CREATE database link 开头:
使用当前用户的用户名和密码去连接远程数据库。如果密码不对会报错
create database link test1 using 'test'; [size=13.3333px]创建公有dblink语句CREATE PUBLIC database link
使用指定的用户和密码创建公有 dblink
create public database link test3 connect to scott identified by tiger using 'test'; [size=13.3333px]建一个shared 的数据库连接
create shared public database link test4 connect to scott identified by "tiger" authenticated by username identified by "passwd" using 'test';
使用shared方式的 database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。 [size=13.3333px]还有一种创建方式是不使用tnsname的情况
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)'; [size=13.3333px]删除dblink
首先需要查询出来有哪些dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
然后如果为pubilc 则删除方式为 drop public database link
如果为个人则删除方式为:drop database link [size=13.3333px]其实本质上来说,dblink 并不是一个很复杂的东西。但是鉴于对数据库的影响。本着能少用就少用的原则。如果能用一些导入导出去替换dblink(我们也正在这么做)。是最好的。
|