ORACLE Database LINK

1.简介

    Database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。

2.分类

类型 Owner 描述
Private(默认) 创建database link的user拥有该database link 在本地数据库的特定的schema下建立的database link。只有建立该database link的schema的session能使用这个database link来访问远程的数据库。同时也只有Owner能删除它自己的private database link。
Public Owner是PUBLIC Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库。
Global Owner是PUBLIC 网络中的数据库中的用户均可使用该database link. 因为当Oracle 使用目录服务器的时候,它会在该目录下的所有数据库里都创建这个 global database link,并且统一控制。因此所有在目录下的数据库里的用户均可使用。

 3.远程数据库用户验证方法

用户类型 描述
Connected user(默认) 当创建database link的时候没用用CONNECT TO username指定固定的user的时候当前用户的登陆信息将会被用来验证登陆远程数据库,如果本地用户是SYSTEM的话那么登陆远程数据库的用户也是SYSTEM。
注意:Connected user不一定是建立database link的用户,任何一个可以使用该database link的用户都可以是Connected user。
Fixed user 在建立database link的时候如果指定了用户名/密码时,所有使用使用使用该database link的用户,不管是否是建立database link的用户,都将使用指定的用户去登陆远程的数据库。
Current user 需要用户连接到本地数据库的时候是全局用户的身份连接的。这样这个全局用户就可以使用指定帐户的上下文,而无需存储密码信息到link中。

4.连接方式 

取值 说明
不指定 默认值建立一个dedicated的连接,每一个使用database link的本地session都会对应有一个远程数据库的session。
SHARED 创建一个共享的数据库连接,同时要指定database link_authentication。
使用shared方式的database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。在使用shared database link的时候,到database link的连接会在连接以后与本地连接断开,为防止未授权的session使用此链接而要求在创建shared database link的时候必须要指定database link_authentication。

5.使用

1)创建

基本语法

CREATE [ SHARED ] [ PUBLIC ] database link link_name
      [
CONNECT TO user IDENTIFIED BY password ]
      [
AUTHENTICATED BY user IDENTIFIED BY password ]
      [
USING ' connect_string ' ];
connect_string:TNS Name,可以不配置而采用下述方法创建
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING ' (DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = sales.company.com)(PORT = 1521))
    )
    (CONNECT_DATA =
        (SERVICE_NAME = sales)
    )
)
' ;
当前数据库的domainName不为空的话,创建后的dbLinkName将自动加上domainName后缀,变为dbLinkName.domainName, 但使用时可不加domainName后缀,Oracle会自动加上。
查看domainName
select * from GLOBAL_NAME;
返回结果为
DB_NAME.DOMAIN_NAME
2)删除
DROP [ PUBLIC] database link link_name 
3)查看相关信息
select * from USER_DB_LINKS;
4)使用
select * from tableName@dblinkName;
支持增删改查基本操作只要,可以通过创建同义词来简化 tableName@dblinkName
select * from synonymName;
关于JDBC操作
我在使用JDBC直接操作同义词时会出现分布事务不提交的情况, 后改为JDBC操作存储过程,存储过程操作同义词,使得JDBC简介操作同义词,但仍用JDBC管理事务后正常, 百思不得其解。
6.参考资料
http://blog.csdn.net/shimiso/article/details/6854511
http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts004.htm#i1008710

你可能感兴趣的:(DataBase)