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

實現Oracle數據庫復制

2013-11-13 15:41:04  來源: Oracle 

  我們經常希望把各地的數據入庫後進行統一的應用現在可以用復制技術來解決這個問題但實現數據庫復制也是要有一些條件的
  
  首先數據庫要具備高級復制功能(用system身份登錄數據庫查看v$option視圖如果其中Advanced replication為TRUE則支持高級復制功能否則不支持)
  
  如果具備高級復制功能數據庫要進行一些參數初始化
  
  db_domain = 指明數據庫的域名(默認的是WORLD)這裡可以用您公司的域名global_names = true 它要求數據庫鏈接(database link)和被連接的數據庫名稱一致現在全局數據庫名db_name++db_domain
  
  跟數據庫job執行有關的參數
  job_queue_processes =
  job_queue_interval =
  distributed_transactions =
  open_links =
  
  第一行定義SNP進程的啟動個數為n系統缺省值為正常定義范圍為根據任務的多少可以配置不同的數值第二行定義系統每隔N秒喚醒該進程一次系統缺省值為正常范圍為事實上該進程執行完當前任務後就進入睡眠狀態睡眠一段時間後由系統的總控負責將其喚醒如果修改了以上這幾個參數需要重新啟動數據庫以使參數生效
  
  做完了初步的准備我們來實現數據庫同步復制
  
  假設在Internet上有兩個數據庫一個叫中國(China)一個叫日本(Japan)
  具體配置如下
  數據庫名ChinaJapan
  數據庫域名
  數據庫sid號 ChinaJapan
  Listener端口號
  服務器ip地址
  確認兩個數據庫之間可以互相訪問在tnsnamesora裡設置數據庫連接字符串
  中國這邊的數據庫連接字符串是以下的格式
  Japan =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = Japan)
  )
  )
  運行$tnsping Japan出現以下提示符
  Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))
  OK(n毫秒)
  表明中國數據庫可以訪問日本數據庫在日本那邊也同樣配置確認$tnsping China 是通的
  改數據庫全局名稱建公共的數據庫鏈接
  用system身份登錄China數據庫
  SQL>alter database rename global_name to ;
  用system身份登錄Japan數據庫
  SQL>alter database rename global_name to ;
  用system身份登錄China數據庫
  SQL>create public database link using Japan;
  測試數據庫全局名稱和公共的數據庫鏈接
  SQL>select * from globalcn;
  返回結果為就對了
  用system身份登錄Japan數據庫
  SQL>create public database link using China;
  測試數據庫全局名稱和公共的數據庫鏈接
  SQL>select * from globalcn;
  返回結果為就對了
  建立管理數據庫復制的用戶repadmin並賦權
  用system身份登錄China數據庫
  SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
  SQL>execute dbms_defer_sysregister_propagator(repadmin);
  SQL>grant execute any procedure to repadmin;
  SQL>execute dbms_repcat_admingrant_admin_any_repgroup(repadmin);
  SQL>grant comment any table to repadmin;
  SQL>grant lock any table to repadmin;
  同樣用system身份登錄Japan數據庫運行以上的命令管理數據庫復制的用戶repadmin並賦權
  在數據庫復制的用戶repadmin下創建私有的數據庫鏈接
  用repadmin身份登錄China數據庫
  SQL>create database link connect to repadmin identified 試這個私有的數據庫鏈接
  SQL>select * from globalcn;
  返回結果為就對了
  用repadmin身份登錄Japan數據庫
  SQL>create database link connect to repadmin identified by repadmin;
  測試這個私有的數據庫鏈接
  SQL>select * from globalcn;
  返回結果為就對了
  創建或選擇實現數據庫復制的用戶和對象給用戶賦權數據庫對象必須有主關鍵字
  用internal身份登錄China數據庫創建scott用戶並賦權
  SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
  SQL>grant connect resource to scott;
  SQL>grant execute on sysdbms_defer to scott;
  用scott身份登錄China數據庫創建表dept
  SQL>create table dept
  (deptno number() primary key
  dname varchar()
  loc varchar() );
  如果數據庫對象沒有主關鍵字可以運行以下SQL命令添加
  SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
  在China數據庫scott用戶下創建主關鍵字的序列號范圍避免和Japan的沖突
  SQL> create sequence dept_no increment by start with maxvalue cycle nocache;
  在China數據庫scott用戶下插入初始化數據
  SQL>insert into dept values (dept_nonextvalaccountingnew york);
  SQL>insert into dept values (dept_nonextvalresearchdallas);
  SQL>commit;
  在Japan數據庫那邊同樣運行以上①
  在Japan數據庫scott用戶下創建主關鍵字的序列號范圍避免和China的沖突
  SQL> create sequence dept_no increment by start with maxvalue cycle nocache;
  在Japan數據庫scott用戶下插入初始化數據
  SQL>insert into dept values (dept_nonextvalsaleschicago);
  SQL>insert into dept values (dept_nonextvaloperationsboston);
  SQL>commit;
  
  
  在Japan數據庫那邊同樣運行以上①
  
  在Japan數據庫scott用戶下創建主關鍵字的序列號范圍避免和China的沖突
  
  SQL> create sequence dept_no increment by start with maxvalue cycle nocache;
  
  在Japan數據庫scott用戶下插入初始化數據
  
  SQL>insert into dept values (dept_nonextvalsaleschicago);
  SQL>insert into dept values (dept_nonextvaloperationsboston);
  
  SQL>commit;
  
  創建要復制的組scott_mg加入數據庫對象產生對象的復制支持
  
  用repadmin身份登錄China數據庫創建主復制組scott_mg
  SQL> execute dbms_repcatcreate_master_repgroup(scott_mg);
  
  在復制組scott_mg裡加入數據庫對象
  
  SQL>execute dbms_repcatcreate_master_repobject(sname=>scottoname=>dept type=>tableuse_existing_object=>truegname=>scott_mg);
  
  參數說明
  
  sname 實現數據庫復制的用戶名稱
  oname 實現數據庫復制的數據庫對象名稱
  type 實現數據庫復制的數據庫對象類別
  use_existing_object true表示用主復制節點已經存在的數據庫對象
  gname 主復制組名
  
  對數據庫對象產生復制支持
  SQL>execute dbms_repcatgenerate_replication_support(scottdepttable);
  
  確認復制的組和對象已經加入數據庫的數據字典
  SQL>select gname master status from dba_repgroup;
  SQL>select * from dba_repobject;
  
  創建主復制節點
  
  用repadmin身份登錄China數據庫創建主復制節點
  SQL>execute dbms_repcatadd_master_database
  (gname=>scott_mgmaster=>use_existing_objects=>true copy_rows=>false propagation_mode => asynchronous);
  
  參數說明
  
  gname 主復制組名
  master 加入主復制節點的另一個數據庫
  use_existing_object true表示用主復制節點已經存在的數據庫對象
  copy_rows false表示第一次開始復制時不用和主復制節點保持一致
  propagation_mode 異步地執行
  
  確認復制的任務隊列已經加入數據庫的數據字典
  SQL>select * from user_jobs;
  使同步組的狀態由停頓(quiesced )改為正常(normal)
  
  用repaa數據庫運行以下命令
  SQL> execute dbms_repcatresume_master_activity(scott_mgfa
From:http://tw.wingwit.com/Article/program/Oracle/201311/17132.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.