一不小心聽說了oracle 數(shù)據(jù)庫快照,這個詞我當初一聽就楞了,不知道這個是什么玩意,然后花了點時間研究了下,以下是我通過網(wǎng)絡(luò)學(xué)習(xí)總結(jié)的
快照主要是用于分布式數(shù)據(jù)庫,我們有數(shù)據(jù)庫A,A中有個表a,我們在數(shù)據(jù)庫B中要使用數(shù)據(jù)庫A中a表的數(shù)據(jù),這時候我們就可以在數(shù)據(jù)庫B中創(chuàng)建數(shù)據(jù)庫A的快照,這樣可以提高我們的效率。
我理解快照就是對表的復(fù)制,定時的將a表復(fù)制到b表(包括數(shù)據(jù))
注意:用快照創(chuàng)建的表是只讀的
創(chuàng)建快照的方法:
1、先需要在A數(shù)據(jù)庫中建立表a的快照日志
只有先建立表a的快照日志,才能在快照中執(zhí)行快速刷新
Create snapshot log on a;
2、在數(shù)據(jù)庫B下建立到數(shù)據(jù)庫A用戶的數(shù)據(jù)庫鏈link
a)只有建立了到A數(shù)據(jù)庫(用戶)的數(shù)據(jù)庫鏈后才能從A數(shù)據(jù)庫(用戶)下的表a中獲取數(shù)據(jù)
Create database link link_test
Connect to A數(shù)據(jù)庫用戶名(username)identified by A數(shù)據(jù)庫密碼(password) using ‘數(shù)據(jù)庫名(database)'
此圖為用pl/sql建立link的視圖
3、在數(shù)據(jù)庫B下建立a表的快照
Create snapshot t_a——>將來在數(shù)據(jù)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:表示設(shè)定oracle 自動在1秒鐘執(zhí)行刷新,NEXT SYSDATE+1/24*60
表示以后每個1分鐘自動刷新一次
說明: REFRESH是刷新方法
刷新方式有:COMPLETE(完全刷新)和FAST(快速刷新)兩種,
而START WITH是說明開始執(zhí)行的時間。
Next是下次執(zhí)行的時間
而AS以后是構(gòu)成快照的查詢方法。
刷新方法:
快照的刷新有兩種方式:快速刷新和完全刷新??焖偎⑿滦枰煺盏闹鞅硐扔锌煺杖罩敬嬖?完全刷新時oracle執(zhí)行快照查詢,將結(jié)果放入快照??焖偎⑿卤韧耆⑿驴?,因為快速刷新將主數(shù)據(jù)庫的數(shù)據(jù)經(jīng)網(wǎng)絡(luò)發(fā)送到快照的數(shù)據(jù)少,僅需傳送主表中修改過的數(shù)據(jù),而完全刷新要傳送快照查詢的全部結(jié)果。
4、修改快照
Alter snapshot t_a refresh fast
Start with sysdate+1/2880 next sysdate+1
此sql語句意思:設(shè)定oracle 自動在30秒(30/24*60*60)后進行第一次快速刷新,以后,每隔1天快速刷新一次
5、查看快照最后刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES
6、手動刷新快照在命令界面執(zhí)行:
EXEC DBMS_SNAPSHOT.REFRESH('t_a ','C');
第一個參數(shù)是要刷新的快照名
第二個參數(shù)是刷新的方式,F(xiàn)----FAST, C---COMPLETE
7、說明:
a) 建立快照日志時oracle數(shù)據(jù)庫為我們建立了一個基于a的觸發(fā)器(我沒有找到)
tlog$_a和快照日志表mlog$_a(這個已經(jīng)找到);
網(wǎng)上朋友說在建立快照時建立了一些表,視圖之類的,但是我只找到了表,其他的沒有找到,希望得到大家的幫助。
總結(jié)的如果有什么問題請大家多多指出,共同進步。