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 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)
)
) ' ;
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
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.参考资料