Database Link的介绍
数据库链接(Database link)是能够让你在当前数据库中,访问另一个数据库的一种方法。另一个数据库可以是Oracle,也可以是其他数据库,但是访问其他数据库中的对象,需要使用Oracle Heterogeneous Services。
使用数据库链接后,可以访问其他数据库中的表、视图和PL/SQL对象。
Database Link的创建语法
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是公有的,也就是数据库中所有用户都可以使用。
- CONNECT TO 指定连接到远程数据库的用户和凭证
- CURRENT_USER 指定以当前用户作为远程数据库的用户。
- user IDENTIFIED BY 指定远程数据库的用户名和密码,如果未指定,则以登录用户的用户名和密码连接到远程数据库。
- dblink_authentication 创建shared数据库链接时才需要指定此子句,该子句会向远程服务器验证用户身份。
- USING 指定远程数据库的链接串。如果仅指定数据库名,则Oracle会将数据库domain隐式附加到连接字符串以创建完整的服务名。因此如果远程数据库domain和当前数据库domain不同,则必须指定完整的服务名。
创建Database Link所需要的权限
创建私有Database link需要源数据库中的当前用户具有CREATE DATABASE LINK的权限。
创建公有Database link需要源数据库中的当前用户具有CREATE PUBLIC DATABASE LINK的权限。
创建Database link需要远程数据库中的用户具有CREATE SESSION的权限。Database Link的使用
使用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指的是非共享(Shread)的Database link。
如果你的DB LINK只是简单的使用一次或者偶尔使用一下,那么不必去创建共享的DB LINK,直接创建一个非共享私有DB LINK以供自己使用即可。
创建Database Link的示例
此例子主要是创建一个非共享私有的Database Link,使用scott用户去连接到ip为192.168.0.3的orcl实例中。
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的示例
Shared Database link使用场景
Shared Database link既可以是私有的,也可以是公共的。
在需要使用DB LINK的环境中,如果使用DB LINK的用户数量远远大于本地数据库中的服务器进程数量时,建议使用共享DB LINK。
创建Shared Database Link的示例
此例子主要是创建一个共享的私有Database Link,使用scott用户去连接到ip为192.168.0.3的orcl实例中。
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的示例
Public Database Link使用场景
在需要使用DB LINK的环境中,如果DB LINK想让所有用户都有权限使用,则可以创建一个公共的DB LINK。
创建Public Database Link的示例
此例子主要是创建一个公共的Database Link,此实例中的所有用户都能够通过他访问到目标数据库。
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;