『壹』 兩台oracle10g資料庫,如何才能進行數據同步
分布實現Oracle資料庫的實時數據復制的步驟是這樣的:
在具體的實現之前,首先要做好設計與規劃。這就需要細致分析具體的業務情況,設計出一套能夠滿足業務需要的方案。通常在設計過程中,需要確定出要建立的資料庫站點,各站點的類型,需要復制的數據對象,以及同步方式、沖突解決方案等內容。
在設計完成之後,就可具體來實現數據復制,數據復制的實現主要包括以下幾步:
(1)創建復制站點;
(2)創建組對象;
(3)配置沖突解決方案。
下面我們舉一個例子來說明各步具體需要完成的工作。在這個例子中我們採用多主控站點復制方式,設有兩個主控站點和兩個共享數據表。兩個主控站點分別為:處理站點(cl.world)和解釋站點(js.wo rld);兩個數據表為測區( survey)和測線( line)。
STEP1 創建復制站點:
(1)首先以SYSTEM身份登陸主站點資料庫cl.worldCONNECT system/[email protected];
(2)創建用戶—復制管理員,並為該用戶授權復制管理員負責復制站點的創建和管理,每個復制站點都必須創建復制管理員以下為引用的內容:
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 』repadmin』);
END;
(3)為本站點指定傳播者(傳播者負責將本地最新更新的數據傳播到其他站點上):
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 』repadmin』);
END;
(4)為本站點指定接收者(接收者負責接收其他站點上的傳播者傳送過來的數據):
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 』repadmin』,
privilege_type => 』receiver』,
list_of_gnames => NULL);
END;
(5)確定清除時間:
為了使傳送過來事務隊列不致過大,需要將成功載入的事務從事物隊列里清除掉,這里設定每小時清除一次:
CONNECT repadmin/[email protected]
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => 』SYSDATE + 1/24』,
delay_seconds => 0);
END;
在建立好站點cl.world後,以同樣的方法創建站點js. world。
(6)創建各主控站點之間的調度鏈接:
創建各主控站點之間的調度鏈接需要先在各主控站點間建立資料庫鏈接,之後為每個資料庫鏈接定義調度時間。
首先,在處理站點上建立與解釋站點的資料庫鏈接,這里需要先建立一個公用資料庫鏈接,供其他私有資料庫鏈接來使用。
以下為引用的內容:
CONNECT SYSTEM/[email protected]
CREATE PUBLIC DATABASE LINK js.world USING 』js.world』;
CONNECT repadmin/[email protected]
CREATE DATABASE LINK js.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
同樣,在解釋站點上建立與處理站點的資料庫鏈接。
以下為引用的內容:
CONNECT SYSTEM/[email protected]
CREATE PUBLIC DATABASE LINK cl.world USING 』cl.world』;
CONNECT repadmin/[email protected]
CREATE DATABASE LINK cl.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
調度鏈接確定本站點上的事務向其他站點發送的頻度,下面的代碼為10分鍾一次:
以下為引用的內容:
CONNECT repadmin/[email protected]
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 』js.world』,
interval => 』SYSDATE + (1/144)』,
next_date => SYSDATE,
parallelism => 1,
execution_seconds => 1500,
delay_seconds => 1200);
END;
在解釋站點上做相同的工作STEP2 創建主控組在復制環境中,Oracle用組來管理復制對象。通過將相關的復制對象放在一個組里,從而方便對大量數據對象的管理。
這里我們假設用戶模式integr ation 在處理站點和解釋站點都已存在,而且表測區(survey )和測線(line)也已經創建。
(1)創建主控組對象 以下為引用的內容:
CONNECT repadmin/[email protected]
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => 』inte_repg』);
END;
(2)向主控組中添加數據對象,將測區表survey加入到組inte_repg中以下為引用的內容:
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 』inte_repg』,
type => 』TABLE』,
oname => 』survey』,
sname => 』integration』,
use_existing_object => TRUE,
_rows => FALSE);
END;
以同樣的方法將測線表line加入到組inte_repg中。
(3)在主控組中添加其他參與復制的站點,資料庫之間的同步方式在此指定以下為引用的內容:
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => 』inte_repg』,
master => 』js.world』,
use_existing_objects => TRUE,
_rows => FALSE,
propagation_mode => 』ASYNCHRONOUS』);
END;
(4)如果可能出現沖突,則需要配置沖突解決方案。
(5)為每個對象生成復制支持,以下為引用的內容:
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 』integration』,
oname => 』survey』,
type => 』TABLE』,
min_communication => TRUE);
END;
測線表line也一樣。
(6)重新開始復制以下為引用的內容:
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 』inte_repg』);
END;
以同樣的方式設置解釋站點。設置成功後,數據復制過程就宣告完畢,庫中的數據就可進行復制。
『貳』 兩個一樣的oracle 資料庫怎麼實現數據定期同步
兩個一樣的oracle ,定期同步,說白了就是主備用資料庫數據同步的問題回;
如果資料庫答A和資料庫B是建立在兩台獨立的資料庫伺服器上,那麼採用dblink方式是一種可行的方式,
第一種方式:前提是資料庫A和資料庫B本地網是24小時互通的同時對數據同步實時性有比較高的要求,那麼可以建立DBLINK,在兩個庫都建觸發器,不管當前在哪個庫發生數據更新的時候實時同步數據到目標資料庫;
第二種方式:如果數據同步的實時性要求不高,則可以通過定製存儲過程的方式(給兩個庫的數據表加時間戳或者更新標志,)定時同步數據;
第三種方式:通過給兩個資料庫的數據表加更新標志欄位,以第一種方式為主以滿足實時性的要求,以第二種方式為輔彌補可能存在的觸發器執行更新未成功的情況。
以上的方案都是從數據層面所做的處理,對於數據實時同步還是會存在一定的風險,那麼雙機熱備應該說是最好的選擇了。
『叄』 如何同步oracle數據結構
一、第一套方案
1、用新的建庫腳本創建一套新的資料庫,結構和類型都是新的;
2、用數據導入工具,將原資料庫的數據導入到新的數控裡面;
二、第二套方案
1、用新的建庫腳本創建一套新的資料庫,結構和類型都是新的;
2、用資料庫結構同步工具,將老的資料庫結構更新同步到新建的資料庫上面;
兩套方案肯定都可行,主要在工作量和工作效率上面區別太大,導數據需要工具,可以用Sqlserver提供的DTS,有的結構變動大的需要對應欄位關系,太麻煩;
所以我想到用資料庫結構同步工具來進行,記得以前就用過這個功能,我們可以在網上輕松找到oracle資料庫客戶端操作工具PLSQL Developer,這個工具除了對資料庫進行日常的維護之外,還提供很多使用的功能,同步兩個資料庫的結構,就是其中一個,操作步驟如下:
1、打開PLSQL Developer進入新創建的資料庫;
打開菜單如下圖:
這時,會把不同之處用腳本列出來,只要點擊右邊的綠色對號,同步即可;
這樣,結構一下就都改好了,很方便。