一不小心聽說了oracle 資料庫快照集,這個詞我當初一聽就楞了,不知道這個是什麼玩意,然後花了點時間研究了下,以下是我通過網路學習總結的
快照主要是用於分散式資料庫,我們有資料庫A,A中有個表a,我們在資料庫B中要使用資料庫A中a表的資料,這時候我們就可以在資料庫B中建立資料庫A的快照,這樣可以提高我們的效率。
我理解快照就是對錶的複製,定時的將a表複製到b表(包括資料)
注意:用快照建立的表是唯讀
建立快照的方法:
1、先需要在A資料庫中建立表a的快照日誌
只有先建立表a的快照日誌,才能在快照中執行快速重新整理
Create snapshot log on a;
2、在資料庫B下建立到資料庫A使用者的資料庫鏈link
a)只有建立了到A資料庫(使用者)的資料庫鏈後才能從A資料庫(使用者)下的表a中擷取資料
Create database link link_test
Connect to A資料庫使用者名稱(username)identified by A資料庫密碼(password) using ‘資料庫名(database)'
此圖為用pl/sql建立link的視圖
3、在資料庫B下建立a表的快照
Create snapshot t_a——>將來在資料B中對於a錶快照顯示的表名
REFRESH COMPLETE START WITH SYSDATE+1/24*60*60 NEXT SYSDATE+1/24*60
as select * from a@link_test
SYSDATE+1/24*60*60:表示設定oracle 自動在1秒鐘執行重新整理,NEXT SYSDATE+1/24*60
表示以後每個1分鐘自動重新整理一次
說明: REFRESH是重新整理方法
重新整理方式有:COMPLETE(完全重新整理)和FAST(快速重新整理)兩種,
而START WITH是說明開始執行的時間。
Next是下次執行的時間
而AS以後是構成快照的查詢方法。
重新整理方法:
快照的重新整理有兩種方式:快速重新整理和完全重新整理。快速重新整理需要快照的主表先有快照日誌存在;完全重新整理時oracle執行快照查詢,將結果放入快照。快速重新整理比完全重新整理快,因為快速重新整理將主要資料庫的資料經網路發送到快照的資料少,僅需傳送主表中修改過的資料,而完全重新整理要傳送快照查詢的全部結果。
4、修改快照
Alter snapshot t_a refresh fast
Start with sysdate+1/2880 next sysdate+1
此sql語句意思:設定oracle 自動在30秒(30/24*60*60)後進行第一次快速重新整理,以後,每隔1天快速重新整理一次
5、查看快照最後重新整理的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES
6、手動重新整理快照在命令介面執行:
EXEC DBMS_SNAPSHOT.REFRESH('t_a ','C');
第一個參數是要重新整理的快照名
第二個參數是重新整理的方式,F----FAST, C---COMPLETE
7、說明:
a) 建立快照日誌時oracle資料庫為我們建立了一個基於a的觸發器(我沒有找到)
tlog$_a和快照日誌表mlog$_a(這個已經找到);
網上朋友說在建立快照時建立了一些表,視圖之類的,但是我只找到了表,其他的沒有找到,希望得到大家的協助。
總結的如果有什麼問題請大家多多指出,共同進步。