介绍

数据库链接(Database link)是能够让你在当前数据库中,访问另一个数据库的一种方法。另一个数据库可以是Oracle,也可以是其他数据库,但是访问其他数据库中的对象,需要使用Oracle Heterogeneous Services。

使用数据库链接后,可以访问其他数据库中的表、视图和PL/SQL对象。

权限

创建私有Database link需要源数据库中的当前用户具有CREATE DATABASE LINK的权限。 创建公有Database link需要源数据库中的当前用户具有CREATE PUBLIC DATABASE LINK的权限。 创建Database link需要远程数据库中的用户具有CREATE SESSION的权限。

语法

CREATE [ SHARED ] [ PUBLIC ] DATABASE LINK dblink
  [ CONNECT TO
    { CURRENT_USER
    | user IDENTIFIED BY password [ dblink_authentication ]
    }
  | dblink_authentication
  ]...
  [ USING connect_string ] ;

参数介绍:

  • SHARED 可选参数,指定DB Link是共享的,多个会话可以使用同一个链接。
  • PUBLIC 可选参数,指定DB Link是共有的,数据库中的所有用户都可以使用DB Link。
  • CONNECT TO 连接到远程数据库的用户和凭证
  • CURRENT_USER 指定以当前用户作为远程数据库的用户
  • user IDENTIFIED BY 指定远程数据库的用户和密码。如果未指定,则使用登录用户的用户名和密码。
  • dblink_authentication 只有使用共享DB Link时才需要指定,指定后会向远程服务器验证用户身份。
  • USING 指定远程数据库的连接串。如果仅指定数据库名,则Oracle会将数据库domain隐式附加到连接字符串以创建完整的服务名。因此,如果远程数据库的domain和当前数据库的domain不同,则必须指定完整的服务名。

专用服务器和共享服务器对DB Link的影响

在使用专用和共享的数据库中,可能有以下几种可能。

在专用或共享的数据库模式中,创建一个非共享的DB LINK,如果应用程序使用标准的PUBLIC Database Link,并且有100个用户需要同时连接,就需要100个连接到远程数据库的直接网络连接。

在共享的数据库模式中,创建一个共享的DB Link,如果源数据库中有10个共享服务器进程,那么使用相同数据库链接的100个用户只需要10个或更少的网络连接到远程数据库。每个源数据库的共享服务器进程可能只需要一个到远程数据库的连接。

在专用的数据库模式中,创建一个共享的DB Link,如果10个客户端连接到专用源数据库,并且每个客户端在同一个连接上有10个会话(因此会有100个会话),并且每个会话引用相同的远程数据库,则只需要10个连接。对于非共享数据库链接,需要100个连接。

DataBase Link的使用示例

创建DataBase Link示例

在当前服务器中,创建一个服务器ip为192.168.0.3的scott用户的非共享数据库链接。

create database link bu_scott
connect to scott identified by "scott"
using '(DESCRIPTION =
(ADDRESS_LIST=(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)';

删除DataBase Link示例

drop database link bu_scott;

创建Shared Database link示例

在当前服务器中,创建一个服务器ip为192.168.0.3的scott用户的共享数据库链接。

建议:如果使用DB Link的用户数量远远大于本地数据库中的服务器进程数量时,使用共享DB Link对服务器资源使用会降低。

create shared database link bu_scott
connect to scott identified by "scott"
authenticated by scott identified by "scott"
using '(DESCRIPTION =
(ADDRESS_LIST=(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)';

删除Shared Database link示例

drop database link bu_scott;

创建Public Database Link示例

在当前服务器中,创建一个服务器ip为192.168.0.3的scott用户的公有数据库链接。

create public database link bu_scott
connect to scott identified by "scott"
using '(DESCRIPTION =
(ADDRESS_LIST=(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)';

删除Public Database Link示例

drop public database link bu_scott;