服务器 频道

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

  【IT168 服务器学院】/* 从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;
  /
  

0
相关文章