利用flashback閃回表和資料
-
1.將oracle關閉
-
shutdown immediate;
-
-
2.啟動到mount狀態
-
startup mount;
-
-
3.檢查oracle是否開啟了archivelog模式,如果沒開,則可能會報錯
-
3.1 開啟歸檔
-
alter database archivelog;
-
3.2 開啟閃回特性
-
alter database flashback on;
-
注意:
-
如果開啟了歸檔,則可以順利開啟閃回特性,否則會報下列錯誤:
-
ERROR at line 1:
-
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
-
ORA-38707: Media recovery is not enabled.
-
-
4.啟動oracle到open狀態
-
alter database open;
-
-
5.檢視flashback的閃回時間
-
show parameter undo_retention ;
-
預設是900秒,也就是15分鐘。
-
-
以下為具體的操作:
-
flashback:即回閃,是從oracle9i就開始提出的一種操作恢復的功能,在oracle10g中進行了增強和修改,透過回閃,使用者可以完成許多不可能恢復的工作,目前oracle10g的回閃包括以下特性;
-
1〉Oracle falshback Database. 特性允許oracle透過Flashback database語句,將資料庫會滾到前一個時間點或者scn上,而不需要作時間點的恢復工作!
-
2〉oracle falshback table. 特性允許oracle透過flashback table語句,將表會滾到前一個時間點或者scn上。
-
3〉oracle falshback drop. 特性允許oracle把恢復drop掉的table或者索引。
-
4〉oracle falshback version query. 特性可以得到特定的表在某一個時間段內的任何修改記錄!
-
5〉oracle falshback transaction query 特性可以限制使用者在某一個事務級別上檢查資料庫的修改操作,適用於診斷問題、分析效能、審計事務。
-
一:oracle falshback table
-
oracle flashback table即回閃表
-
可以進行的操作:操作1>flashback table tablename to befor drop;
-
對於誤drop的table此可以使用本操作,還原drop的table!
-
此操作需要使用者有以下的許可權:
-
A:falshback any table的系統許可權或者是某一個表的flashback許可權。
-
B:有table的select、insert、delect、alter許可權。
-
C:有table的row Movement許可權
-
SQL> set serveroutput on
-
SQL> set time on
-
11:24:37 SQL> set feadback off;
-
11:24:59 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
A1 TABLE
-
A TABLE
-
----------------------
-
可以看到本使用者下有table A,現在drop它;
-
-----------------------
-
11:25:01 SQL> drop table a;
-
11:26:18 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
BIN$dFFlS6jJQLShRwRQ+kLJMg==$0 TABLE
-
A1 TABLE
-
----------------------
-
table已經刪除,可以看到table並不是真正意義上的刪除掉了,而是多了一個"BIN$dFFlS6jJQLShRwRQ+kLJMg==$0"的表,這個表是原來的A表,這是oracle的recyclebin,一個類似垃圾回收站的機制。當使用者刪除表以後把表放到recyclebin中,而不是刪除掉!
-
----------------------
-
現在使用命令恢復表A
-
11:26:29 SQL> flashback table a to before drop;
-
11:30:45 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
A1 TABLE
-
A TABLE
-
可以看到表A已經恢復!
-
可以進行的操作:操作2>flashback table tablename to scn/timestamp(a timestamp);
-
此操作可以利用scn(在後面介紹)或者timestamp將table恢復到某一個時間點!
-
-----給table row movement許可權
-
11:41:49 SQL> alter table a enable row movement;
-
----插入一條記錄
-
11:44:16 SQL> insert into a values('www',11);
-
11:45:15 SQL> commit;
-
----得到該記錄的scn:1576479
-
11:45:20 SQL> select a.*,ora_rowscn from a;
-
NAME AGE ORA_ROWSCN
-
---------- ---------- ----------
-
500 65 1576479
-
600 65 1576479
-
111 10 1576479
-
222 100 1576479
-
333 30 1576479
-
444 40 1576479
-
555 50 1576479
-
www 11 1576479
-
888 34 1573035
-
---刪除一條記錄
-
11:45:55 SQL> delete from a where name ='www';
-
11:46:19 SQL> commit;
-
---利用scn命令恢復刪掉的紀錄!
-
11:46:20 SQL> flashback table a to scn 1576479;
-
11:46:49 SQL> select * from a;
-
NAME AGE
-
---------- ----------
-
500 65
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
www 11
-
888 34
-
---利用timestamp命令恢復刪掉的紀錄!
-
11:46:54 SQL> flashback table a to timestamp to_timestamp('2007-04-27 11:45:20','yyyy-mm-dd hh24:mi:ss');
-
11:56:28 SQL> select * from a;
-
NAME AGE
-
---------- ----------
-
500 65
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
888 34
-
附:--關於scn的介紹:
-
SCN:system change numbers,oracle10g的每一個表都有ora_rowscn列!但是desc是看不到改列的。
-
可以透過select ora_rowscn from table 得到每一條結果集當前的SCN,timestamp_to_scn()將scn轉換到stmestamp;scn_to_timestamp()將timestamp轉換到scn。
-
二:flashback drop
-
利用flashback drop oracle10g可以對DDL操作進行恢復,oracla提供類似回收站的recyclebin來收集被刪除的物件,其實物件在刪除的時候oracle把物件寫到一個資料字典表中,當使用者不需要該物件的時候,可以利用purge命令來從回收站進行清除。
-
--察看使用者下所有表
-
SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
SYS_TEMP_FBT TABLE
-
A1 TABLE
-
A TABLE
-
Executed in 0.078 seconds
-
--drop 表A1
-
SQL> drop table a1;
-
Executed in 0.047 seconds
-
--再察看此時使用者所擁有的所有表;
-
SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
SYS_TEMP_FBT TABLE
-
A TABLE
-
BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 TABLE
-
Executed in 0.078 seconds
-
--如上可以看到A1表drop的同時,當前使用者下又產生了一個以BIN開頭的新表BIN$fPHKLxsBTBq6+bjBLPEJaw==$0,這就是原來的A1表
-
SQL> set timing off
-
SQL> set time on
-
14:25:40 SQL> select t.object_name,t.original_name from recyclebin t;
-
OBJECT_NAME ORIGINAL_NAME
-
------------------------------ --------------------------------
-
BIN$fPHKLxsBTBq6+bjBLPEJaw==$0 A1
-
---採用flashback table命令恢復剛才刪除的表A1
-
14:29:45 SQL> flashback table a1 to before drop;
-
14:29:49 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
SYS_TEMP_FBT TABLE
-
A1 TABLE
-
A TABLE
-
--當使用者確實不需要該物件時候,可以採用pruge來徹底刪除改物件
-
14:29:55 SQL> drop table a1;
-
14:31:13 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
SYS_TEMP_FBT TABLE
-
A TABLE
-
BIN$N+i42FTvSSemvMrH6frCQg==$0 TABLE
-
14:31:32 SQL> purge table "BIN$N+i42FTvSSemvMrH6frCQg==$0";
-
14:31:49 SQL> select * from tab;
-
TNAME TABTYPE CLUSTERID
-
------------------------------ ------- ----------
-
B TABLE
-
STEST TABLE
-
TA TABLE
-
GROUPINGTEST TABLE
-
COLTABLE TABLE
-
ROWTABLE TABLE
-
COLTABLE1 TABLE
-
ROWTABLE1 TABLE
-
SYS_TEMP_FBT TABLE
-
A TABLE
-
--用purge命令收站想清空回收站裡的別的表
-
14:31:56 SQL> purge recyclebin;
-
14:34:02 SQL> select object_name from recyclebin;
-
OBJECT_NAME
-
------------------------------
-
三:oracle falshback version query--閃回版本查詢
-
oracle10g falshback 能將所有做了提交的行進行記錄,就類似於審計的功能,透過falshback可以查詢什麼時候執行了什麼操作,非常方便,包括閃回版本的查詢和審計等。
-
1〉閃回版本的查詢
-
14:41:22 SQL> insert into a values('zhao',24);
-
14:42:01 SQL> commit;
-
--查詢當前版本
-
14:34:45 SQL> select a.*,ora_rowscn from a;
-
NAME AGE ORA_ROWSCN
-
---------- ---------- ----------
-
500 65 1577059
-
600 65 1577059
-
111 10 1577059
-
222 100 1577059
-
333 30 1577059
-
444 40 1577059
-
555 50 1577059
-
888 34 1573035
-
14:41:22 SQL> insert into a values('zhao',24);
-
14:42:01 SQL> commit;
-
14:42:03 SQL> select a.*,ora_rowscn from a;
-
NAME AGE ORA_ROWSCN
-
---------- ---------- ----------
-
500 65 1577059
-
600 65 1577059
-
111 10 1577059
-
222 100 1577059
-
333 30 1577059
-
444 40 1577059
-
555 50 1577059
-
888 34 1573035
-
zhao 24 1585133
-
--A:利用scn查詢以前版本的記錄
-
14:42:18 SQL> select * from a as of scn 1577059;
-
NAME AGE
-
---------- ----------
-
500 65
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
888 34
-
--B:利用timestamp查詢以前版本的記錄
-
14:42:51 SQL> select * from a as of timestamp scn_to_timestamp(1577059);
-
NAME AGE
-
---------- ----------
-
500 65
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
www 11
-
888 34
-
2〉審計的功能:
-
14:50:06 SQL> select a.*,versions_operation,versions_xid,versions_starttime from a
-
2 versions between timestamp minvalue and maxvalue;
-
NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME
-
---------- ---------- ------------------ ---------------- --------------------
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
888 34
-
zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午
-
--可以看出 在27-4月 -07 02.42.00 下午 插入(I)了一條記錄
-
14:50:53 SQL> a order byversions_starttime;
-
14:51:23 SQL> run;
-
NAME AGE VERSIONS_OPERATION VERSIONS_XID VERSIONS_STARTTIME
-
---------- ---------- ------------------ ---------------- ----------------------
-
500 65
-
600 65
-
111 10
-
222 100
-
333 30
-
444 40
-
555 50
-
888 34
-
zhao 24 I 0500110006030000 27-4月 -07 02.42.00 下午
-
四:oracle falshback transaction query回閃事務查詢
-
oracle10回閃事務功能提供對過去某段時間內所完成的事務的查詢和撤銷!
-
14:59:56 SQL> select undo_sql,table_name from flashback_transaction_query x where x.table_owner=upper('zxt') and x.xid ='0500110006030000';
-
UNDO_SQL TABLE_NAME
-
-------------------------------------------------------------------------------- --------------
-
delete from "ZXT"."A" where ROWID = 'AAANOsAAGAAAAMWAAA'; A
-
--其中UNDO_SQL 就是當時對錶A的DML操作;
-
五:oracle falshback Database:閃回資料庫
- oracle10g提供資料庫級別的閃回,可以使整個資料庫的資料恢復到某一個時間點或者SCN上!由於牽扯到資料庫的批次操作,這個方面的知識暫時無法研究了!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28878983/viewspace-2137633/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flashback query閃回資料
- Flashback Database 閃回資料庫Database資料庫
- [Flashback]Flashback Database閃回資料庫實驗Database資料庫
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- 【Flashback】啟用Flashback Database閃回資料庫功能Database資料庫
- 【Flashback】Flashback Database閃回資料庫功能實踐Database資料庫
- 【Flashback】使用Flashback Drop技術閃回被DROP表的指定版本資料
- FlashBack總結之閃回資料庫與閃回刪除資料庫
- 閃回資料歸檔-- Flashback Data ArchiveHive
- [Flashback]開啟資料庫閃回資料庫功能資料庫
- oracle 閃回 flashbackOracle
- 閃回資料庫(flashback database)知識分享資料庫Database
- 【DG】利用閃回資料庫(flashback)修復Failover後的DG環境資料庫AI
- Flashback閃回技術
- 【Flashback】使用檢視快速獲得Flashback Query閃回查詢資料
- 啟用Flashback Database閃回資料庫功能(閃回區滿解決辦法 )Database資料庫
- 基本閃回查詢和閃回表
- 閃回資料庫時間視窗(flashback database window)資料庫Database
- 【Flashback】11g的閃回資料歸檔初探
- 第5章 閃回資料庫Understanding the Flashback Database資料庫Database
- Orcale利用閃回功能恢復資料
- Flashback Query閃回查詢
- Oracle 閃回特性(FLASHBACK DATABASE)OracleDatabase
- 【FLASHBACK】關於閃回資料庫的一點說明資料庫
- [閃回特性之閃回版本查詢]Flashback Version Query
- 利用閃回拯救我們的資料(五)
- 利用閃回拯救我們的資料(三)
- 利用閃回拯救我們的資料(四)
- 閃回之 Flashback Query (dml表、過程、函式、包等)、Flashback version Query函式
- 【Flashback】Flashback Drop閃回刪除功能實踐
- 【Flashback】10G的新特性“閃回表”清除方法
- 【Mysql】mysql閃回flashback-5.7MySql
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- (f)--閃回恢復區---實踐2---閃回表(閃回DML部分資料會用到閃回查詢)
- 閃回(關於閃回資料庫)資料庫
- 閃回表、閃回查詢
- Oracle閃回技術--Flashback Version QueryOracle
- flashback閃回技術應用解析