由於工作需要,今天需要將業務數據庫裡所有的數據同步到另外一個處理服務器上。在做方案的時候,想了很多方法,當然最快的辦法還是使用物理熱備的方式。
但是我個人認為如果對於中大型數據庫(我們的數據庫有300G左右)最佳的選擇還是使用SnapShot方式,即快照的方式。
Oracle數據庫的快照是一個表,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。也就是說快照根本的原理就是將本地或遠程數據庫上的一個查詢結果保存在一個表中。
以下是我建立的Snapshot,目的是從業務數據庫上將數據Copy到處理數據庫上,是不同的兩個服務器之間對數據copy。
第一步:在處理服務器上的Oracle終端,建立database link,業務數據庫服務器SID為TEST
createdatabaselinkTEST_DBLINK.US.ORACLE.COM
connecttoAMICOSidentifiedbyAMICOS
using'test';
第二步:在業務數據庫上對應的表建立快照日志
CreatesnapshotLogonA_Table;
第三步:建立Snapshot 快照名稱為:Test_SnapShot
CreatesnapshotTest_SnapShot
REFRESHCOMPLETESTARTWITHSYSDATENEXTSYSDATE+1/24
asselect*fromA_Table@TEST_DBLINK
說明:REFRESH是刷新方法
刷新方式有:COMPLETE和FAST兩種,而START WITH是說明開始執行的時間。
Next是下次執行的時間
而AS以後是構成快照的查詢方法。
相關的方法:
更改快照
ALTERSNAPSHOTTest_SnapShot
REFRESHCOMPLETESTARTWITHSYSDATENEXTSYSDATE+1/2;
手動刷新快照 在命令界面執行:
EXECDBMS_SNAPSHOT.REFRESH('Test_SnapShot','C');
第一個參數是要刷新的快照名
第二個參數是刷新的方式,F----FAST, C---COMPLETE
查看快照最後刷新的日期
SELECTNAME,LAST_REFRESH
FROMALL_SNAPSHOT_REFRESH_TIMES;
最後非常的方案:
1:為需要做Snapshot的表建立Snapshot日志
create snapshot log on t1 with rowid; 這裡使用ROWID建立日記的參數
2:采用Fast的方式建立快照,使用rowid做為參考參數
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
最好能按照rowid來建立快照。要不然就必須要為表建立Primary Key。