由於工作需要,今天需要將業務資料庫裡所有的資料同步到另外一個處理伺服器上。在做方案的時候,想了很多方法,當然最快的辦法還是使用物理熱備的方式。
但是我個人認為如果對於中大型資料庫(我們的資料庫有300G左右)最佳的選擇還是使用SnapShot方式,即快照的方式。
Oracle資料庫的快照是一個表,它包含有對一個本地或遠端資料庫上一個或多個表或視圖的查詢的結果。也就是說快照根本的原理就是將本地或遠端資料庫上的一個查詢結果儲存在一個表中。
以下是我建立的Snapshot,目的是從業務資料庫上將資料Copy到處理資料庫上,是不同的兩個伺服器之間對資料copy。
第一步:在處理伺服器上的Oracle終端,建立database link,業務資料庫伺服器SID為TEST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using ’test’;
第二步:在業務資料庫上對應的表建立快照日誌
Create snapshot log on A_Table;
第三步:建立Snapshot 快照名稱為:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
說明:REFRESH是重新整理方法
重新整理方式有:COMPLETE和FAST兩種,而START WITH是說明開始執行的時間。
Next是下次執行的時間
而AS以後是構成快照的查詢方法。
相關的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手動重新整理快照 在命令介面執行:
EXEC DBMS_SNAPSHOT.REFRESH(’Test_SnapShot ’,’C’);
第一個參數是要重新整理的快照名
第二個參數是重新整理的方式,F----FAST, C---COMPLETE
查看快照最後重新整理的日期
SELECT NAME,LAST_REFRESH
FROM ALL_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。