oracle远程数据库同步

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)

    )

  )';

 

 说明:

jwxt_link为源数据库的dblink

 jwxt为数据库用户名称

Host 为目标数据库的IP

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;  

发布了17 篇原创文章 · 获赞 1 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览