针对某个表使用高级复制进行数据同步示例(一)

2014-11-24 15:14:08 · 作者: · 浏览: 0
针对某个表使用高级复制进行数据同步示例
高级复制与流复制概念:
高级复制(Advanced Replication)
高级复制也称为对称复制,分为多主体站点复制(Multiple Master Rplication)、物化视图站点复制(Materialized View Replication)和前两种的混合复制。高级复制主要是用在对称的、等同的 数据库(仅限 Oracle数据库之间)表之间的(单向或双向)的复制,以满足分布式应用的需求。多主体站点复制基于Oracle的触发器(Trigger)捕获DML和DDL操作,并将这些操作封装在Remote Procedure Calls(RPCs)里,并借助Deferred Transaction Queue来传递RPCs并在目标数据库利用Internal Trigger执行传递过来的RPCs从而实现了数据的同步,如果仅仅是高级复制环境中的只读物化视图环境,那么会直接利用解析物化视图日志的方式来实现数据的同步,而不用DTQ来传递RPCs,基于这一特点,高级复制对网络的稳定性和传输速度要求较高,配置也稍显麻烦。另外一点要特别注意,就是物化视图复制方式不支持DDL的变更同步。
流复制(Stream)
流复制是Oracle 10g新推出的同步技术,基于logminer(数据库必须运行在Archive Log模式),通过Oracle Advanced Queue来实现数据的同步复制,可以实现表,用户,数据库级别的同步,而高级复制支持的对象仅为表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体等。Stream相对高级复制而言配置简单,通过oracle gateway还可用于异构平台和异构数据库的数据同步,这是高级复制做不到的。
实验如下:
1.数据库名、global_name等基础环境:
源端:
SYS@bys1>select name,db_unique_name from v$database;
NAME DB_UNIQUE_NAME
--------- ------------------------------
BYS1 bys1
SYS@bys1>show parameter global_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean TRUE
SYS@bys1>select * from global_name;
GLOBAL_NAME
----------------------------------------------------------------------------------------------------
BYS1
SYS@bys1>show parameter job_queue_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 1000
#######
目标端:
SYS@bys2>select name,db_unique_name from v$database;
NAME DB_UNIQUE_NAME
------------------ ------------------------------------------------------------
BYS1 BYS2
SYS@bys2>show parameter global_name
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
global_names boolean TRUE
SYS@bys2>select * from global_name;
GLOBAL_NAME
----------------------------------------------------------------------------------------------------
BYS2
SYS@bys2>show parameter job_queue_processes
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
job_queue_processes integer 1000
###########################################################
2.在源端和目标端分别使用以下语句创建用户:
复制用户--源和目标都做:
create user repadmin identified by repadmin;
默认的用户表空间是USER,默认临时表空间是TEMP的话,以下两句可以不执行。
alter user repadmin default tablespace users;
alter user repadmin temporary tablespace temp;
grant connect ,resource to repadmin;
execute dbms_repcat_admin.grant_admin_any_schema('REPADMIN');
grant comment any table to repadmin;
execute dbms_defer_sys.register_propagator('REPADMIN');
grant execute any procedure to REPADMIN;
源和目标端创建业务用户-源和目标都做:
create user gp identified by gp default tablespace users;
grant dba to gp;
###################################################################
3.创建测试表--源端和目标端都做
SYS@bys1>conn gp/gp
Connected.
GP@bys1