您的位置:首页 > 数据库 > Oracle

利用oracle高级复制功能实现数据同步的问题

2007-10-09 10:18 781 查看



/**//* 从DPS到EMIS,表dpsuser.gg_web_info_m */




/**//* 首先确保在EMIS数据库中已经建立了dpsuser和相应的表空间dpsdata */




/**//* 第一步,配置主体端 */


connect system/manager@dps


grant connect,dba,resource to dpsuser;






/**//* 创建复制管理员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;






/**//* 分配proxy snapshot administration权限给repadmin,list_of_gnames为null,意味着可以管理所有对象组 */


begin


dbms_repcat_admin.register_user_repgroup(


username => 'repadmin',


privilege_type => 'proxy_snapadmin',


list_of_gnames => null);


end;


/






/**//* 分配'receiver'权限给repadmin */


begin


dbms_repcat_admin.register_user_repgroup(


username => 'repadmin',


privilege_type => 'receiver',


list_of_gnames => null);


end;


/


grant select any table to repadmin;






/**//* 以repadmin身份登录 */


connect repadmin/repadmin@DPS




/**//* 在DPS上建立主体组,主体组名为REP_DPS,并往主体组中加入一个表 */




/**//* 建立主体组 */


begin


dbms_repcat.create_master_repgroup(


gname => 'rep_dps',


qualifier => '',


group_comment => '');


end;


/




/**//* 向主体组中加入表gg_web_info_m */


begin


dbms_repcat.create_master_repobject(


gname => 'rep_dps',


type => 'table',


oname => 'gg_web_info_m',


sname => 'dpsuser',


copy_rows => true,


use_existing_object => true);


end;


/






/**//* 建立相应的快照日志 */


create snapshot log


on dpsuser.gg_web_info_m


tablespace system


with primary key


excluding new values;






/**//* 生成复制支持 */


begin


dbms_repcat.generate_replication_support(


sname => 'dpsuser',


oname => 'gg_web_info_m',


type => 'table',


min_communication => true,


generate_80_compatible => false);


end;


/






/**//* 第二步,配置快照端 */


connect system/manager@emis






/**//* 修改用户权限 */


grant connect,dba,resource to dpsuser;






/**//* 创建复制管理员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;






/**//* 授予repadmin用户可以创建快照 */


grant create any snapshot to repadmin;


grant alter any snapshot to repadmin;






/**//*在EMIS服务器上添加到DPS的连接,可以通过修改tnsnames.ora实现 */






/**//* 在EMIS建立与DPS的数据库链接 */


create public database link dps connect to repadmin identified by repadmin using 'dps';






/**//* 在EMIS建立刷新组ref_dps */


begin


dbms_refresh.make(


name => 'dpsuser.ref_dps',


list => '',


next_date => sysdate,


interval => '/*1:Secs*/ sysdate + 1/(60*60*24)',


implicit_destroy => false,


lax => false,


job => 0,


rollback_seg => null,


push_deferred_rpc => true,


refresh_after_errors => true,


purge_option => null,


parallelism => null,


heap_size => null);


end;


/








/**//* 在EMIS建立快照组 同步为synchronous,异步为asynchronous*/


begin


dbms_repcat.create_snapshot_repgroup(


gname => 'rep_dps',


master => 'dps',


propagation_mode => 'asynchronous');


end;


/






/**//*建立快照,快照要在表所属的用户下建立,所以要先用dpsuser登陆 */


connect dpsuser/dps@emis






/**//* 建立gg_web_info_m的快照 */


create snapshot dpsuser.gg_web_info_m


build immediate


refresh force


next sysdate + 1/86400


for update


as


select * from dpsuser.gg_web_info_m@dps;






/**//* 将快照加入刷新组 */


begin


dbms_refresh.add(


name => 'dpsuser.ref_dps',


list => 'dpsuser.gg_web_info_m',


lax => true);


end;


/






/**//* 将快照加入快照组 */


begin


dbms_repcat.create_snapshot_repobject(


gname => 'rep_dps',


sname => 'dpsuser',


oname => 'gg_web_info_m',


type => 'snapshot',


min_communication => false);


end;


/






/**//* 第三步,在DPS端激活主体组 */


connect system/manager@dps


begin


dbms_repcat.resume_master_activity(


gname => 'rep_dps');


end;


/





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: