1. 在源库创建dblink:
方法一:
有两台数据库服务器:如22数据库服务器,17数据库服务器。22为源数据库,17为目标数据库,即要将22数据库同步到17上。
步骤一:
用pl/sql 登录到17数据库,创建dblink,执行以下代码:
create database link jwxt_link connect to jwxt identified by jwxt using '
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.71.22)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
说明:
l jwxt_link为源数据库的dblink
l jwxt为数据库用户名称
l Host 为目标数据库的IP
l SERVICE_NAME =orcl 为数据库的名称
--查看数据库实例名
select * from global_name;
CREATE PUBLIC DATABASE LINK 数据库链接名 CONNECT TO 用户名 IDENTIFIED BY 密码 USING '本地配置的数据的实例名';
数据库链接名 :jwxt_link为数据库链接名,可任意。
用户:即为源数据库的用户名和密码。
ORCL:为22源数据库的配置的数据的实例名:即为Oracle Database 12c 安装路径的tasnames.ora 配置文件中
图1:
图2:
如果建立成功,会提示:Database link created.
2.--测试是否创建成功
select * from dual@jwxt_link;
--如何返回数据库的GLOBAL_NAME?
show parameter global_name;
--也可以通过查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持
select * from v$option;
--如何检查Oracle的版本是否支持同步功能
select * from v$option where PARAMETER='Advanced replication'
--查看所有的dblink
select * from all_db_links;
3.删除dblink 语句:
drop database link jwxt;
说明jwxt 为建立dblink时的名称。
--3.通过merge语句完成表数据同步
--从center将表merge同步到branch,同步的依据是两个表的pk ,第一个ksgl_ksmcb为目标库的表,第二个ksgl_ksmcb 为源数据库的表;jwxt_link 为源数据库的dblink的名称
merge into ksgl_ksmcb@jwxt_link b using ksgl_ksmcb k on (b.ksmcdm=k.ksmcdm) --如果pk值是相同则将指定表的值更新到目标表
when matched then update set b.bz=k.bz,b.ksmc=k.ksmc --如果pk值不一至,则将源表中的数据整条插入到目标表中
when not matched then
insert values(k.ksmcdm, k.ksmc,k.sfqy,k.bz,k.czr,k.czrxm,k.czsj);
--记得merge后必须commit,否则更改未能提交
commit;