分类: Oracle
2006-11-06 15:36:36
简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。 Oracle 高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。
同步复制,复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以根据需求设置间隔时间。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
下边是我分别做同步复制和异步复制的例子,当然之前已经看了n多的资料,和两天的煎熬,才保证了复制能够正确的运行
同步运行测试过程:
1.数据库存在两个实例 ora1,ora2
2.确定两台数据库的dblink,创建正常,可以正常连接
3.创建repadmin用户用于管理复制组,需要付给一定的权限:
创建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用户为propagator,并授予执行任何procedure的权限
EXECUTE dbms_defer_sys.register_propagator('REPADMIN');
GRANT execute any procedure TO REPADMIN;
分配快照权限给repadmin,意味着可以管理所有对象组
BEGIN dbms_repcat_admin.register_user_repgroup( username => 'repadmin', privilege_type => 'proxy_snapadmin', list_of_gnames => NULL); END;
分配接收权限给repadmin BEGIN dbms_repcat_admin.register_user_repgroup( username => 'repadmin', privilege_type => 'receiver', list_of_gnames => NULL); END; /
GRANT select any table TO repadmin;
在ORANEI上建立主体组,主体组名为zl_g,并往主体组中加入一个表建立复制主体组 BEGIN DBMS_REPCAT.CREATE_MASTER_REPGROUP( gname => '"zl_g"', qualifier => '', group_comment => ''); END; /
应用用户:SA/SA 复制对象表为:
test1 在ora1上select * from global_name;;
ora1 创建复制对象test1;
create table test1 as select * from dba_users;
把user_id设置为主键在ora2上同样创建创建一个表test1,同时手工同步数据再在ora1上创建复制组
execute dbms_repcat.create_master_repgroup('zl_g');
select gname,master,status from dba_repgroup where gname='ZL_G';
在复制组里加入复制对象execute dbms_repcat.create_master_repobject(sname=>'sa',oname=>'test1',type=>'table',use_existing_object=>true,gname=>'zl_g',copy_rows=>false);
使复制对象产生复制支持 execute dbms_repcat.generate_replication_support('sa','test1','table');
select gname, master, status from dba_repgroup where gname='ZL_G'; select sname,oname,status,gname from dba_repobject where gname='ZL_G';
添加主体复制节点 execute dbms_repcat.add_master_database (gname=>'zl_g',master=>'ORA2',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'synchronous'); select gname, dblink, masterdef MASTERDEF, master MASTER from sys.dba_repsites where gname='ZL_G';
在ora1启动复制 execute dbms_repcat.resume_master_activity('zl_g',true); ok!数据同步配置完毕,好了时间不早了,看来异步下次再写吧!呵呵