oracleFlashback詳解_第1頁
oracleFlashback詳解_第2頁
oracleFlashback詳解_第3頁
oracleFlashback詳解_第4頁
oracleFlashback詳解_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、oracle flashback詳解 分類: rdbms 2011-01-25 17:05 430人閱讀 評論(0) 收藏 舉報 使用oracle數(shù)據(jù)庫時,難免會碰到一些問題.例:1.如何回滾已經(jīng)commit了的數(shù)據(jù) 2.如何查詢已經(jīng)被覆蓋掉的數(shù)據(jù)update,或者被delete了的數(shù)據(jù) 3.如何將數(shù)據(jù)恢復(fù)到某個時間點 我們就可以使用flashback相關(guān)語句解決相關(guān)問題了關(guān)于flashback回閃:從9i到10g到最新的11.2g,oracle對flashback功能進行了進一步的擴展,利用flashback我們可做到1.flashback query閃回查詢,并不實際修改表的數(shù)據(jù)2.fla

2、shback table閃回表格,可恢復(fù)表格的數(shù)據(jù) 3.flash database閃回數(shù)據(jù)庫,可恢復(fù)db的數(shù)據(jù):關(guān)于flashback query: 1.flash query通過undo數(shù)據(jù)表空間數(shù)據(jù),利用一致性的方法來查找用戶需要的數(shù)據(jù) 2.作用范圍:查找指定時間點被(delete,update)的數(shù)據(jù) 只是做查找操作,如果設(shè)計恢復(fù)那么就要使用flashback table了 3.相關(guān)參數(shù): 1.查詢出來的數(shù)據(jù)存活時間受 undo_retention(默認(rèn)為900秒)影響目標(biāo)值,該變量(秒)可以影響undo表空間產(chǎn)生的data存活時間,時間一到,即死亡(消失) 2.閃回時間受undo表空

3、間大小影響 關(guān)于undo表空間的操作,另一片文章會有講解 3.查詢的僅僅是快照,并不能修改當(dāng)前狀態(tài) 4.基本語法兩種方式,使用時間片或scn號 使用時間片的情況比較多 1.select* from 你要查詢表的名字 as of timestamp 查詢某一時間該表的數(shù)據(jù) 2.select* from 你要查詢表的名字 as of scn具體scn號 關(guān)于scn號,另一篇文章會講解 4.原理: 簡單的說就是將以前被修改,刪除了的數(shù)據(jù),通過開啟flashback 模式,回到我們需要回到的時間來查看數(shù)據(jù), 在undo_retention該變量設(shè)置的時間過后,該鏡像數(shù)據(jù)會自動被清除.相當(dāng)于查看的是一個

4、鏡像數(shù)據(jù).一種方式是利用scn號來查看鏡像數(shù)據(jù),另一種是通過查找時間片來查詢鏡像數(shù)據(jù) 案例1:-創(chuàng)建測試flashquery表格 主要由scn號和系統(tǒng)日期組成 create table testquery( id number, scn number, time varchar2(20), mydate varchar2(20) );-插入測試數(shù)據(jù)begin for i in 1.16 loop insert into testquery values(i,dbms_flashback.get_system_change_number(),to_char (sysdate,yyyy-mm-dd

5、 hh24:mi:ss),你好|i); -插入scn號和sysdate為方便后續(xù)查詢 commit; -如果不實時commit,那么會在循環(huán)完后,批量提交,時間點是一樣的 dbms_lock.sleep(2); -使用dbms_lock.sleep 方法和java的thread睡眠是一個意思 參數(shù)以秒為單位 end loop;end;-查詢未修改的數(shù)據(jù) result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:

6、51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 14330

7、35802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16-查詢最新的scn號類似于check point,該scn號在每次commit時,都會自動變化使用scn號來開啟flashback query模式 select dbms_flashback.get_system_change_number from dual;result:3307628-該scn號可以理解成為一個check point點.我們可以借助這個標(biāo)記來回退到該scn號查詢當(dāng)前的數(shù)據(jù)-修改第十條,和第

8、十一條的數(shù)據(jù):update testquery tq set tq.mydate=新年快樂 where scn=3303572;commit; update testquery tq set tq.mydate=萬事如意 where scn=3303574;commit;select * from testqueryresult:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 5330356220

9、11-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51新年快樂1133035742011-01-25 11:51:53萬事如意1233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51

10、:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16-使用scn號來進行閃回查詢 1.不開啟flashback模式,僅使用flashback query語句做查詢select * from testquery as of scn 3307628result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4

11、533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-

12、01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16 2.開啟flashback模式做查詢,整個db將會產(chǎn)生某個scn號所在時間點的鏡像數(shù)據(jù). 使用dbms包開啟flashback模式:exec dbms_flashback.enable_at_system_change_number(3307628); 現(xiàn)在查看表的數(shù)據(jù):select * from testquery as of scn 3307628;result:133035522011-01-25 11:51:33你好1

13、 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-2

14、5 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16注:此時整個db為鏡像數(shù)據(jù). 如果單獨再開啟個鏈接,那么看到的還是真實數(shù)據(jù)而不是鏡像數(shù)據(jù); 如果中途要退出flashback模式請使用:exec dbms_flashback.disable;退出flashback 模式:exec dbms_f

15、lashback.disable;select * from testqueryresult:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 93303

16、5702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51新年快樂1133035742011-01-25 11:51:53萬事如意1233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16 以上就是使用scn號來做閃回查詢了;-使用時間點來進行閃回查詢 select * from

17、 testquery as of timestamp to_timestamp(2011-01-25 13:25:55,yyyy-mm-dd hh24:mi:ss); 做此查詢要確保沒有對原有表結(jié)構(gòu)進行修改,如果有的話可能引發(fā)異常;select * from testquery;result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好

18、5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822

19、011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16關(guān)于scn號和這個timestamp的轉(zhuǎn)換這個可能會出問題(undo表空間過小,無法查詢到過早的數(shù)據(jù)) scntimestamp: select scn_to_timestamp(scn號) as ts from dual; timestampscnselect timestamp_to_scn(25-1月-11 01.05.29.046000 下午) from dual;:關(guān)于flashback table: 1.閃回表格,可將表格的數(shù)據(jù)閃回到某個時間點 2.需要開啟行移動模式 en

20、able row movement 3.原理:flashback table也是利用undo數(shù)據(jù)來恢復(fù)對象到指定時間點 4.使用范圍:恢復(fù)當(dāng)前表及其相關(guān)對象到某個時間點5.注意點: 1).閃回時間受參數(shù)undo_retention影響 2).閃回時間受undo表空間大小影響 3).和flashback query有差別,恢復(fù)表到以前的時間點 真實閃回,而不是鏡像 6.語法: 1).flashback table table_name to timestamp . 根據(jù)時間點閃回 2).flash table table_name to scn . 根據(jù)scn號回退,實際操作基本上不會用到3).flashback table table_name to timestamp . enable triggers. 創(chuàng)建表,開啟行移動模式,用的不多 4).flashback table testflashtable to timestamp systimestamp - interval 5 minute; 回退到幾分鐘之前,用的多例:將第一條數(shù)據(jù)更新,然后進行閃回表格,得到我們以前的數(shù)據(jù);創(chuàng)建新的表格測試:create tabl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論