oracle数据库对象-datebase link

database link是oracle的数据库对象之一,用于跨数据库访问。它定义了一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。database link是A到B单向的连接。

1、准备工作
1)在tnsnames.ora中做好名字解析的配置。

vim $ORACLE_HOME/network/admin/tnsnames.ora

例如:

TESTDB52 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.12.52)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = testdb)
     )
)



2)检查tnsping能否成功

tnsping testdb52

2、基本语法

CREATE [PUBLIC] DATABASE LINK link_name
CONNECT TO username IDENTIFIED BY password
USING 'connect_string';

说明:
link_name:database link的名称
username:对端数据库的用户名
password:对端数据库的密码
connect_string:连接字符串

创建语句:

create database link testdblink
connect to liu identified by test12345
using 'testdb52';

如果没有在tnsnames.ora配置连接,也可以直接使用“ip地址:端口/SID”来表示。

创建语句2:

create database link testdblink2
connect to liu identified by test12345
using '192.168.12.52:1521/testdb';

注意:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。

3、database link使用
建立了dblink后,可以对对端数据库进行正常的增、删、改、查操作。使用格式为:“表名@dblink名称”。

例子,对SSPPSZL表操作:

select * from SSPPSZL@testdblink;

insert into SSPPSZL@testdblink(poszbh) values (‘8’);

update SSPPSZL@testdblink set yinhdm = ‘9’ where poszbh = ‘8’;


delete from SSPPSZL@testdblink where poszbh = '8';

4、删除database link

drop database link testdblink;

5、如果使用“数据库ip:端口/实例名”方式报错:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
改成使用tnsnames.ora里面的格式,注意CONNECT_DATA后面是SERVICE_NAME还是SID,写tns名字或者内容
drop database link “DBLINKPOSP”;
CREATE DATABASE LINK “DBLINKPOSP” CONNECT TO POSP IDENTIFIED BY “posp0721” USING ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.10)(PORT = 1521))
)
(CONNECT_DATA =
(SID = airtrip)
)
)’;

验证
select sysdate from dual@DBLINKPOSP;

参考资料:
http://blog.csdn.net/iamhj/article/details/7105249