物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单一的大型数据库。用户可以通过网络对异地数据库中的数据进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的,开发人员无需关心网络的链接细节、数据在网络节点中的具体分布情况和服务器间的协调工作过程。
数据库之间的链接建立在DATABASE LINK上。数据库链接定义从一个Oracle数据库到另一个数据库的单行通信通道。要创建一个DATABASE LINK,必须首先在建立链接的数据库上设置链接字符串,即配置一个远程数据库的本地网络服务名。
1.数据库链接的类型
Oracle数据库支持3种数据库链接:
(1) private:由创建该链接的用户拥有,且仅对创建者可用。
(2) public:由PUBLIC用户拥有,数据库中的所有用户都可以使用它。
(3) global:由PUBLIC用户拥有。当Oracle网络使用目录服务器时,目录服务器为网络中的每个数据库自动创建和管理global数据库链接(作为网络服务名)。数据库中的所有用户都可以使用它。
2.数据库链接的用户
创建数据库链接时,应该确定哪个用户连接到远程数据库访问数据。
与数据库链接有关的用户有3类:
(1)Connected user
访问数据库链接(链接定义中没有固定的用户名和口令)的本地用户。例如,如果system在查询中使用了public链接,那么connected user为system,且它访问远程数据库的system模式。
注意:一个connected user不必是链接的创建者,它可以是能够使用该链接的任何用户。
例:
SQL> create public database link hq using 'hq';
(2)Current user
一个current_user数据库链接的global user。global user必须使用X.509证书进行认证(SSL认证的企业用户),或者使用口令进行认证(口令认证的企业用户),并且是涉及该数据库链接的两个数据库中的用户。
SQL> create public database link hq connect to current_user using 'hq';
(3)Fixed user
用户名和口令是数据库链接定义中一部分的用户。如果链接中包含fixed用户,在使用该fixed用户的用户名和口令连接远程数据库。
SQL> create public database link hq connect to jane identified by doe using hq;
这样,当本地数据库上的scott用户使用链接hq时,他将作为jane用户连接到网络服务名为hq的数据库。
3.数据库链接的命名
数据库链接的命名与远程数据库的初始化参数global_names的值有关:
如果global_names=true,则要求数据库链接的名字与远程数据库的全局数据库名相同。
如果global_names=false,则不要求数据库链接的名字与远程数据库的全局数据库名相同。
4.创建数据库链接
使用create database link语句创建数据库链接。创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。
CREATE DATABASE LINK和CREATE SESSION这两种权限都包含在CONNECT角色中,而CREATE PUBLIC DATABASE LINK权限在DBA中。
设远程数据库的全局数据库名为sales.acme.com。
例1:Private connected use
SQL> create database link sales.acme.com using 'sales_us';
例2:Private global current user
SQL> create database link foo connect to current_user using 'am_sls';
例3:Private fixed user
SQL> create database link sales.acme.com connect to scott identified by tiger using 'sales_us';
例4:Public fixed user
SQL> create public database link sales connect to scott identified by tiger using 'rev';
例5: Shared public fixed user
SQL> create shared public database link sales.acme.com connect to scott identified by tiger authenticated by anupam identified by bhide using 'sales';
共享数据库链接:
每个应用使用一个数据库链接访问远程数据库。当多个用户同时运行应用时,将在本地和远程数据库之间造成大量的连接。共享数据库链接可以限制网络连接的数量。
5.使用数据库链接
SQL> select * from emp@sales;
对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:
SQL> create synonym sales_emp for emp@sales;
还可以建立一个本地的远程视图,方便使用:
SQL> create view sales_emp_view as select * from emp@sales;
现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户,访问此视图,但该用户必须有访问数据库链接的权限。
6.管理数据库链接
(1)关闭数据库链接
如果用户在会话中访问数据库链接,那么直到会话结束时,该链接将一直保持打开。
手工关闭数据库链接:
alter session close database link dblink;
(2)删除数据库链接:
drop [public] database link dblink;
7.查看数据库链接的信息
(1)查看有哪些数据库链接
三个数据字典视图:dba_db_links、all_db_links、user_db_links。
SQL> select * from dba_db_links;
desc dba_db_links:可以查看各字段的含义
(2)查看哪些数据库链接是打开的
使用动态性能视图v$dblink和gv$dblink(RAC中有用),可以查询当前会话中打开的数据库链接的信息
SQL> select * from v$dblink;