加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle数据库同步——高级复制

(2014-07-17 09:09:02)
标签:

it

oracle

数据库同步

表复制

高级复制

分类: DBA

情景模拟

现在有两台服务器:

1)    机器名:ThinkPad    IP:126.33.9.190  Oracle SIDORCL

2)    机器名:ZHANGJIAN  IP: 126.33.9.154  Oracle SID: ORCL

目的:将ThinkPad机器上用户Geosoc里面的BookMark表同步到ZHANGJIAN机器里面去。

 

(一)    高级复制

1.      查看是否具备高级复制功能

首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replicationTRUE,则支持高级复制功能;否则不支持)。

select * from v$option

2.      设置相应参数

本例的先决条件:你需要设置好相应的参数,

job_queue_processes需要大于0,

global_name=true,

并且建立相应的db link

alter system set global_names=true scope=both;

 

3.      创建复制管理员账号

在两个数据库上分别创建复制管事员用户REPADMIN(该用户名及密码可以任意设置,建议统一采用该名字,密码统一为orcl)。

--创建repadmin用户管理复制环境 
CREATE USER REPADMIN IDENTIFIED BY REPADMIN; 
ALTER USER REPADMIN DEFAULT TABLESPACE USERS; 
ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP; 
GRANT connect, resource TO REPADMIN;

--授予repadmin用户权限可以管理当前站点中任何主体组 
EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN'); 
--授予repadmin用户权限可以为任何表创建snapshot logs 
GRANT comment any table TO REPADMIN; 
GRANT lock any table TO REPADMIN; 

--指定repadmin用户为propagator,并授予执行任何procedure的权限 

EXECUTE dbms_defer_sys.register_propagator('REPADMIN'); 
GRANT execute any procedure TO REPADMIN;

 

4.  更改数据库全局名

由于后面创建数据库链接(Database link)时需要用到数据库全局名,因此遇到同名的数据库全局名时需要更改其数据库名。

ThinkPad机器:改为 ORCL_THINKPAD

alter database rename global_name to ORCL_THINKPAD;
ZHANGJIAN
机器:改为 ORCL_ZHANGJIAN

alter database rename global_name to ORCL_THINKPAD;

 

5.      在两个数据库上分别建立到对方的数据库链接

建立数据库链接的前提是两个数据库能互相访问,因此需要在数据库端先建立互相的连接本地命名。

由于开启了Global_namesTrue,因此链接名必须与Global名一致。

ThinkPad: 建立到ZHANGJIAN的本地命名为ORCL154

create public database link ORCL_ZHANGJIAN connect to REPADMIN identified by orcl using 'ORCL154';

ZHANGJIAN:建立到ThinkPad的本地命名为ORCL190


create public database link 
ORCL_THINKPAD connect to REPADMIN identified by orcl using 'ORCL190';

 

建立好链接后,可以在各自的机器上测试链接是否成功。

Select * from BookMark@ORCL_ZHANGJIAN

 

6.      创建复制组

在需要被复制的数据库上建立复制组,本例中是ThinkPad机器需要被复制,因此在此数据库上建立复制组。

REPADMIN登录数据库ORCL

a)    创建复制组:

execute dbms_repcat.create_master_repgroup('rep_geosoc'); 

b)    在复制组里加入复制对象:

execute dbms_repcat.create_master_repobject(sname=>'geosoc',oname=>'bookmark',type=>'table',use_existing_object=>true,gname=>'rep_geosoc',copy_rows=>false);

c)    对复制对象产生复制支持:

execute dbms_repcat.generate_replication_support('geosoc','bookmark','table');

d)    添加主体复制节点:

execute dbms_repcat.add_master_database(gname=>'rep_geosoc',master=>'ORCL_ZHANGJIAN',use_existing_objects=>true,copy_rows=>false, propagation_mode => 'synchronous');

e)    在主体定义站点启动复制:

execute dbms_repcat.resume_master_activity('rep_geosoc',true);

 

7.      配置完成

Good Luck!当你走到这里什么错误都没发生,恭喜你!也恭喜我,表示我的文档写的没有那么差,比较负责任的将网上的东西抄下来经过了一番整理!

 

但这里还是提醒两点:

1:同步的数据表BookMark必须具有主键!

2:同步前,两个数据表初始化是一样的,也就是说同步前,ZHANGJIAN机器上的BookMark表必须和ThinkPad表上的数据一致!可以采用以下的语句进行创建。

Insert Into BookMark select * from BookMark@ORCL_THINKPAD.

 

 

下面你可以尽情的在ThinkPad机器上操作BookMark表,你会即时发现ZHANGJIAN机器上的BookMark表也随之跟着发生变化,Amazoning!

但是,你在ZHANGJIAN机器上操作BOOKMARK表,ThinkPad机器上却没什么变化!So Boring!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有