
參考資料:Using Oracle Flashback Technology
Oracle 11g的新特性閃回操作
- 閃回查詢
- 閃回查詢
- 閃回版本查詢
- 閃回事務查詢
- 閃回資料
- 閃回表
- 閃回洗掉
- 閃回資料
- 閃回歸檔
下面會分別介紹這些操作,在介紹這些操作之前先看下閃回特性是否開啟,
檢查閃回特性是否啟用
參考資料:
Configuring Your Database for Oracle Flashback Technology
打開或關閉oracle資料庫的閃回功能步驟
確認資料庫閃回特性已經啟用:v$database
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
如果閃回特性沒有啟用,則需要先啟用閃回,
打開閃回的步驟:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;
打開之后可再次檢查閃回特性是否打開,只要打開了閃回特性,就可以進行閃回操作,
閃回查詢
參考資料:Using Oracle Flashback Query (SELECT AS OF)
查詢某一個歷史時間點的資料,
查詢某個時間點表中的資料——某個時間點表中快照的資料,
SQL> create table t(x int , y int);
表已創建,
SQL> insert into t values(1,2);
已創建 1 行,
SQL> insert into t values(2,3);
已創建 1 行,
SQL>
SQL> commit;
提交完成,
SQL> select * from t;
X Y
---------- ----------
1 2
2 3
SQL> set time on
21:11:45 SQL> delete from t where x=1;
已洗掉 1 行,
21:12:11 SQL> commit;
提交完成,
21:12:18 SQL> select * from t;
X Y
---------- ----------
2 3
21:12:21 SQL> select * from t as of timestamp to_timestamp('2016-03-21 21:11:45'
,'yyyy-mm-dd hh24-mi-ss');
X Y
---------- ----------
1 2
2 3
可見洗掉的資料已經提交,但是還是可以閃回查詢到之前時間的資料,其中hh24表示可以用24小時制,否則只能小時不能超過12,至于為什么分鐘用mi而不用mm,那是因為規定的格式就是mi,換成mm會顯示和之前的月份mm沖突,換成其他的會顯示日期格式無法識別,
基于SCN的閃回查詢
如果有修改時候的SCN,那么就可以基于SCN進行閃回查詢
21:18:34 SQL> select * from t;
X Y
---------- ----------
2 3
21:20:36 SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2891887
21:20:53 SQL> insert into t values(3,4);
已創建 1 行,
21:21:13 SQL> commit;
提交完成,
21:21:16 SQL> select * from t;
X Y
---------- ----------
2 3
3 4
21:21:26 SQL> select * from t as of scn 2891887;
X Y
---------- ----------
2 3
可見基于SCN閃回查詢得到插入資料之前表中的資料
閃回版本查詢
閃回版本查詢也就是flashback versions query,
- See all versions of a row between two times
- See transactions that changed the row
一個時間段內的某一行的所有版本,以及改變該行的所有事務,
參考資料:
Using Oracle Flashback Version Query
閃回版本查詢與閃回事務查詢
閃回事務查詢
閃回事務查詢也即是flashback trasaction query
- See all changes made by a transaction
閃回一個事務對資料的所有改變,
參考資料:
Using Oracle Flashback Transaction Query
閃回版本查詢與閃回事務查詢
閃回表
將表閃回到歷史的某個時刻,
SQL> create table t(id int);
表已創建,
SQL> insert into t values(100);
已創建 1 行,
SQL> insert into t values(200);
已創建 1 行,
SQL> commit;
提交完成,
SQL> select rowid,id from t;
ROWID ID
------------------ ----------
AAASaxAABAAAV3xAAA 100
AAASaxAABAAAV3xAAB 200
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2960668
SQL> delete from t;
已洗掉2行,
SQL> commit;
提交完成,
SQL> select * from t;
未選定行
SQL> alter table t enable row movement;
表已更改,
SQL> select * from t;
未選定行
SQL> flashback table t to scn 2960668
2 ;
flashback table t to scn 2960668
*
第 1 行出現錯誤:
ORA-08185: 用戶 SYS 不支持閃回
SQL> show recyclebin
SQL>
解釋1:由于當前是sys用戶,會顯示:
ORA-08185: 用戶 SYS 不支持閃回
閃回技術只適用于普通用戶而不適用于sys用戶,system用戶也不適用,
解釋2:必須要啟用表的行移動功能,否則不能閃回表,
- alter table t enable row movement;
閃回洗掉
參考資料:Oracle閃回功能詳解
由于閃回技術不支持sys用戶,所以使用普通用戶測驗,
Oracle10g以后,當我們洗掉表時,默認Oracle只是在資料庫字典里面對被刪的表的進行了重命名,并沒有真正的把表洗掉,
回收站(recyclebin):用來維護表被洗掉前的名字與洗掉后系統生成的名字之間的對應關系的資料字典,表上的相關物件(索引、觸發器等)也會一并進入回收站,
查看回收站的狀態
只有dba(sys,system)才有權限執行查詢recyclebin的狀態,
SQL> show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
可以發現recyclebin是開啟狀態,如果發現是關閉狀態,可以通過下面命令開啟
alter system set recyclebin=on;
如果要關倍訓收站功能,使用下面的命令:
alter system set recyclebin=off;
禁用后洗掉的物件將直接洗掉,不會寫到Recyclebin中,
閃回洗掉實驗效果
由于sys用戶和system用戶不支持閃回技術,所以我們需要切換到普通用戶進行實驗,實驗效果如下:
SQL> create table t(id int);
表已創建,
SQL> insert into t values(1);
已創建 1 行,
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE 2016-03-22:17:18:33
SQL> drop table t;
表已洗掉,
SQL> commit;
提交完成,
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$lpoDEIX2SSGAQt9TL3gUTA==$0 TABLE 2016-03-22:17:22:24
T BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE 2016-03-22:17:18:33
SQL> select * from "BIN$lpoDEIX2SSGAQt9TL3gUTA==$0";
ID
----------
1
SQL> flashback table t to before drop;
閃回完成,
SQL> select * from t;
ID
----------
1
清慷訓收站操作
可以全部清慷訓收站,也可只清慷訓收站的部分檔案,
全部清慷訓收站
SQL> purge recyclebin;
部分清慷訓收站
##假定回收站中有一個檔案的ORIGINAL NAME是t1,永久洗掉他t1表
SQL> purge table t1;
回收站的空間管理
雖然Oracle并沒真正洗掉被回收的表,但是在Oracle看來這一塊空間已經是自由的(free),使用下面的演示可以查看效果:(在普通用戶下驗證即可)
SQL> create table t as select * from user_objects;
表已創建,
SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';
SUM(BLOCKS)
-----------
96
SQL> drop table t;
表已洗掉,
SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';
SUM(BLOCKS)
-----------
104
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$kMskKvD5SJqmwaC5WDQiAg==$0 TABLE 2016-03-22:18:31:43
SQL> select blocks from user_segments where segment_name='BIN$kMskKvD5SJqmwaC5WDQiAg==$0';
BLOCKS
----------
8
實驗效果表明洗掉表之后用戶自由空間增大了,并且大小剛好就是回收站中的對應的表的大小,可見這一塊空間在Oracle看來已經是free_space了,
閃回歸檔
參考資料:
Using Flashback Data Archive (Oracle Total Recall)
Oracle 11g 閃回資料歸檔
閃回歸檔:Flashback Data Archive,Oracle Total Recall,也即Oracle全面回憶功能,
閃回資料歸檔可以和我們一直熟悉的日志歸檔類比,日志歸檔記錄的是Redo的歷史狀態,用于保證恢復的連續性;而閃回歸檔記錄的是UNDO的歷史狀態,可以用于對資料進行閃回追溯查詢;后臺行程LGWR用于將Redo資訊寫出到日志檔案,ARCH行程負責進行日志歸檔;在Oracle 11g中,新增的后臺行程FBDA(Flashback Data Archiver Process)則用于對閃回資料進行歸檔寫出,
具體操作見參考資料,
閃回資料庫
參考資料:Oracle DB閃回(Flashback database)開啟筆記
資料庫的閃回
- 是Oracle不同于查詢閃回和歸檔閃回的另外一種閃回機制
- Oracle 10g引入
- 需要配置閃回區域
- 記錄資料塊的修改,稱為flashback logs(閃回日志)
- 通過后臺恢復寫入行程RVWR(Recovery Writer)來作業
- 就像一個向后轉的按鈕,讓資料庫向后回退,
- 可以用于人為失誤操作或者業務的需要,
閃回資料庫架構Flashback database architecture

開啟閃回資料庫功能之后,會在SGA中開辟記憶體Flashback buffer,會記錄buffer cache中的部分改變然后后臺恢復寫入行程RVWR將記錄寫入閃回日志Flashback logs中,FBDA行程(Flashback Data Archive )則會將Flashback logs進行歸檔,
這個程序和重做日志非常非常的類似,
記得幫我點贊哦!
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你需要的學習資料,還在等什么?快去關注下載吧!!!

念念不忘,必有回響,小伙伴們幫我點個贊吧,非常感謝,
我是職場亮哥,YY高級軟體工程師、四年作業經驗,拒絕咸魚爭當龍頭的斜杠程式員,
聽我說,進步多,程式人生一把梭
如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激,
職場亮哥文章串列:更多文章

本人所有文章、回答都與著作權保護平臺有合作,著作權歸職場亮哥所有,未經授權,轉載必究!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/50699.html
標籤:Oracle
上一篇:MySQL資料庫入門詳細筆記
