熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle的同步復制研究

2013-11-13 22:17:24  來源: Oracle 

  數據庫支持高級復制功能
  您可以用system身份登錄數據庫查看v$option視圖如果其中Advanced replication為TRUE則支持高級復制功能否則不支持
  數據庫初始化參數要求
  ①db_domain =
  指明數據庫的域名(默認的是WORLD)這裡可以用您公司的域名
  ②global_names = true
  它要求數據庫鏈接(database link)和被連接的數據庫名稱一致
  現在全局數據庫名db_name++db_domain
  ③有跟數據庫job執行有關的參數
  job_queue_processes = 定義SNP進程的啟動個數為n系統缺省值為正常定義范圍為根據任務的多少可以配置不同的數值
  job_queue_interval = 定義系統每隔N秒喚醒該進程一次系統缺省值為正常范圍為事實上該進程執行完當前任務後就進入睡眠狀態睡眠一段時間後由系統的總控負責將其喚醒
  distributed_transactions =
  open_links =
  
  如果修改了以上這幾個參數需要重新啟動數據庫以使參數生效
  
  數據庫名 ying    orcl
  數據庫域名     
  數據庫sid號   ying orcl
  Listener端口號
  服務器ip地址
  
  改數據庫全局名稱建公共的數據庫鏈接
  ①用system身份登錄ying數據庫
  alter database rename global_name to
  用system身份登錄orcl數據庫
  alter database rename global_name to
  
  ②用system身份登錄ying數據庫
  create public database link using ying;
  select * from globacn
  用system身份登錄orcl數據庫
  create public database link using orcl
  select * from globacn
  
  建立管理數據庫復制的用戶repadmin並賦權
  ①用system身份登錄ying數據庫
  create user repadmin identified by repadmin default tablespace users temporary tablespace temp
  begin
  dbms_defer_sysregister_propagator(repadmin);
  end;
  grant execute any procedure to repadmin;
  begin
  dbms_repcat_admingrant_admin_any_repgroup(repadmin);
  end;
  grant comment any table to repadmin;
  grant lock any table to repadmin;
  
  ②同樣用system身份登錄orcl數據庫運行以上的命令管理數據庫復制的用戶repadmin並賦權
  create user repadmin identified by repadmin default tablespace users temporary tablespace temp
  begin
  dbms_defer_sysregister_propagator(repadmin);
  end;
  grant execute any procedure to repadmin;
  begin
  dbms_repcat_admingrant_admin_any_repgroup(repadmin);
  end;
  grant comment any table to repadmin;
  grant lock any table to repadmin;
  
  *********************************************************************
  說明repadmin用戶名和密碼可以根據用戶的需求自由命名
  *********************************************************************
  
  在數據庫復制的用戶repadmin下創建私有的數據庫鏈接
  ①用repadmin身份登錄ying數據庫
  create database link connect to repadmin identified by repadmin;
  select * from globacn; 測試
  ②用repadmin身份登錄orcl數據庫
  create database link connect to repadmin identified by repadmin;
  select * from globacn; 測試
  
  創建或選擇實現數據庫復制的用戶和對象給用戶賦權數據庫對象必須有主關鍵字
  假設我們用ORACLE裡舉例用的water用戶t_file_all表
  ①用internal身份登錄ying數據庫創建water用戶並賦權
  SQL>create user water identified by water default tablespace water temporary tablespace water;
  SQL>grant connect resource to water;
  SQL>grant execute on sysdbms_defer to water;
  ②用water身份登錄ying數據庫創建表t_file_all
  ③如果數據庫對象沒有主關鍵字可以運行以下SQL命令添加
  alter table t_file_all add (constraint t_file_all_key primary key (t_file_all_id));
  ④在ying數據庫water用戶下創建主關鍵字的序列號范圍避免和orcl的沖突
  ⑤在ying數據庫water用戶下插入初始化數據
  ⑥在orcl數據庫那邊同樣運行以上①
  ⑦在orcl數據庫water用戶下創建主關鍵字的序列號范圍避免和water的沖突
  ⑧在beijing數據庫scott用戶下插入初始化數據
  
  創建要復制的組water_t_file_all加入數據庫對象產生對象的復制支持
  ①用repadmin身份登錄ying數據庫創建主復制組water_t_file_all
  begin
  dbms_repcatcreate_master_repgroup(water_t_file_all);
  end;
  ②在復制組scott_mg裡加入數據庫對象
  begin
  dbms_repcatcreate_master_repobject
  (sname=>wateroname=>t_file_all
  type=>tableuse_existing_object=>true
  gname=>water_t_file_all
  );
  end;
  *******************************
  參數說明
  sname 實現數據庫復制的用戶名稱
  oname 實現數據庫復制的數據庫對象名稱
  (表名長度在個字節內程序包名長度在個字節內)
  type 實現數據庫復制的數據庫對象類別
  (支持的類別索引同義詞觸發器視圖過程函數程序包程序包體)
  use_existing_object true表示用主復制節點已經存在的數據庫對象
  gname 主復制組名
  *******************************
  ③對數據庫對象產生復制支持
  begin
  dbms_repcatgenerate_replication_support(watert_file_alltable);
  end;
  (說明產生支持water用戶下t_file_all表復制的數據庫觸發器和程序包)
  ④確認復制的組和對象已經加入數據庫的數據字典
  select gname master status from dba_repgroup 測試
  select * from dba_repobject 測試
  
  創建主復制節點
  ①用repadmin身份登錄ying數據庫創建主復制節點
  begin
  dbms_repcatadd_master_database
  (gname=>water_t_file_all
  master=>
  use_existing_objects=>true
  copy_rows=>false
  propagation_mode => asynchronous);
  end;
  **********************************************
  參數說明
  gname 主復制組名
  master 加入主復制節點的另一個數據庫
  use_existing_object true表示用主復制節點已經存在的數據庫對象
  copy_rows false表示第一次開始復制時不用和主復制節點保持一致
  propagation_mode 異步地執行
  ***********************************************
  select * from user_jobs; 測試是否在復制任務中
  
  使同步組的狀態由停頓(quiesced )改為正常(normal)
  ①用repadmin身份登錄ying數據庫運行以下命令
  begin
  dbms_repcatresume_master_activity(water_t_file_allfalse);
  end;
  不行用該命令
  begin
  dbms_repcatresume_master_activity(water_t_file_alltrue);
  end;
  測試同步是否正常(status為normal)
  select gname master status from dba_repgroup
  
  創建復制數據庫的時間表我們假設用固定的時間表分鐘復制一次
  ①用repadmin身份登錄ying數據庫運行以下命令
  begin
  dbms_defer_sysschedule_push (
  destination =>
  interval => sysdate + /(*) 每隔分鐘
  next_date => sysdate);
  end;
  /
  begin
  dbms_defer_sysschedule_purge (
  next_date => sysdate
  interval => sysdate + /(*)
  delay_seconds =>
  rollback_segment => );
  end;
  
  ②用repadmin身份登錄orcl數據庫運行以下命令
  begin
  dbms_defer_sysschedule_push (
  destination =>
  interval => sysdate + /(*) 每隔分鐘
  next_date => sysdate);
  end;
  /
  begin
  dbms_defer_sysschedule_purge (
  next_date => sysdate
  interval => sysdate + /(*) 每隔分鐘
  delay_seconds =>
  rollback_segment => );
  end;
  
  添加或修改兩邊數據庫的記錄
From:http://tw.wingwit.com/Article/program/Oracle/201311/18695.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.