Database Link详解

一、dblink创建 (两种方式):

1、已经配置本地服务

createpublicdatabase

  link toBeJing connecttoscott
  identifiedby
tigerusing'BEJING'


数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

2、直接建立链接

createdatabaselinktoBeJing

  connecttoscottidentifiedbytiger
  using'(DESCRIPTION=
  (ADDRESS_LIST=
  (ADDRESS=(PROTOCOL=TCP)(HOST=X.X.X.X )(PORT=1521))
  )
  (CONNECT_DATA=
  (SERVICE_NAME=BJORCL)
  )
  )';


host=数据库的ip地址,service_name=数据库的ssid。

  其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。

注意:假如创建全局dblink,则必须使用systm或sys用户,在database前加public

1.先创建PUBLICDATABASELINK,不用指定用户和密码 

scott@TEST>connsystem/test
   Connected.
system@TEST>CREATEPUBLICDATABASELINKorclUSING'BEJING';
  Databaselinkcreated.


  2.再在各个用户下创建私有DATABASELINK(同PUBLICDATABASELINK名称相同),指定用户和密码
system@TEST>connscott/tiger
   Connected.
   scott@TEST>CREATEDATABASELINKorclCONNECTTOscottIDENTIFIEDBYtiger;
   Databaselinkcreated.

  实际上相当于: 

 CREATEDATABASELINKorclUSING'BEJING'CONNECTTOscottIDENTIFIEDBYtiger;


db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。
connected user,简单来说,连接方数据库以connected的用户来连接远程数据库。
fixed user,简单来说,连接方数据库以fixed(指定的)用户来连接远程数据库。


看看创建db link语法,你对这两种类型就比较清楚了。

创建connecteduser的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删除:

DROPPUBLICDATABASELINKtoBeJing

四、dblink使用:

SELECT……FROM表名@数据库链接名;

  查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。

例:查询北京数据库中emp表数据 select * from emp@toBeJing;

五、同义词配合:

第四点中fromemp@toBeJing可以创建同义词来替代:


CREATE SYNONYM同义词名FOR 表名;


CREATE SYNONYM同义词名FOR 表名@数据库链接名;

如:create synonym bj_scott_emp foremp@toBeJing;

于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@toBeJing

DB LINK是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。

你可能感兴趣的:(database link)