数据库链接(Database Link)告诉Oracle如何从一个库到达另一个数据库。
需要在两个Oracle数据库之间手工同步数据时,DBLink是最方便快捷的手段之一,创建DBLink的方式一般是这样:
create public database link <DBLink名称> connect to <被连接库的用户名> identified by <被连接库的密码> using '<Oracle客户端工具建立的指向被连接库服务名>';
例如:
create public database link XMDS_KF connect to XMDS identified by XMDS using 'XMDS_KF';
但这种方式有个缺点就是必须要在服务器建立一个被连接库的服务名,如果不建则会报错:
ORA-12154: TNS: 无法处理服务名
,但如果直接使用地址来建DBLink,就可以省去配置服务名的麻烦了:
create public database link XMDS_KF connect to XMDS identified by XNDS using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 145.24.16.182)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XMDS)
)
)';
这样创建,在tnsnames.ora中不会有这段监听。
基本操作:
创建DBLINK:
使用pl/sql developer建:找到Database Links,右键新建
名称:dblink名 连接到用户名:目标数据库登录名 密码:目标数据库密码
数据库:目标数据库服务名
查询表:
select * from 用户名.表 @DBLINK名称 where 条件;
查询函数:
select 用户名.函数名@DBLINK名称(参数) from dual;
在本地函数中调用dblink函数:
Result:=用户名.函数名@DBLINK名称(参数);
复制dblink中的表结构与数据:
CREATE TABLE 表名 AS SELECT * FROM 用户名.表名@DBLINK名称 where 条件
索引这些可以使用手工建:在pl/sql developer的SQL窗口中选中表名再查看表结构
备注:
如果机子上同时安装Oracle的数据库与客户端,要用数据库建需连接dblink的数据库的服务
在过程中创建表时要先给权限execUTE immediate 'Grant Create any table to 用户名';
从dblink的从张表中取数只需在每个表名后加@dblink名称