db_link就是从一个ORACLE数据库服务连接到另一个oracle数据库服务的单方向的指针。
db_link连接是在A数据库上的用户能使用存储在A上的link来调用B数据库上的信息。
db_link分为private和public两种:
private:只有创建该db_link的用户才能连接
public:所有的数据库用户都能连接。如果创建全局db_link,必须使用system或sys用户
database link的好处就是它能允许用户在远端数据库连接另一个用户的对象。也就是说,一个本地用户能在远端数据库没有该用户时,访问远端数据库。
创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC
DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。
创建db_link语法:
CREATE [PUBLIC|PRIVATE] DATABASE LINK 名字 CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘连接字符串’;
当初始化参数GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
连接字符串:$ORACLE_HOME/network/admin/tnsnames.ora中定义远程数据库的连接串。
用户名/密码:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。
查看已创建的db link:
select owner,object_name from dba_objects where object_type='DATABASE LINK';
db_link的引用:
SELECT * FROM employees@products;
SELECT * FROM hr.employees@products ;
db_link的缺点:
db_link看似好像十分方便,创建是很简单,但是在使用中后台却会出现锁,其实这个锁倒不是最让人心烦的,而是每次使用db_link查询的时候,均会与远程数据库创建一个连接,db_link是不会自动释放这个连接的,如果是大量使用db_link查询,会造成web 项目的连接数不够,最后导致系统无法正常运行。