強大的ORACLE10G開始有一個東西叫閃回:flashback技術。它支持還原一定時間內的數據。包括整個數據庫,表等。
在演示前確認以下幾點:
1、用戶有對dbms_flashback包有執行權限!----若沒有 grant execute on dbms_flashback to username
2、進行閃回查詢必須設置自動回滾段管理,在init.ora設置參數UNDO_MANAGEMENT=AUTO,參數UNDO_RETENTION=n,決定了能往前閃回的最大時間,值越大
需要越多Undo空間。
show parameter undo_retention;
alter sysstem set undo_retention = 7200; ----7200秒即2小時
3.開啓行移動
alter table tbscmp enable row movement;
接下來演示最常用的還原表數據的方法:
select * from tbscmp;
實驗開始:先刪除掉其中一條數據508094
delete tbscmp where code='508094';
--確認刪除
select * from tbcmp where code='508094';
---使用versions查詢出 versions_xid
select versions_xid,code,name from tbscmp versions between scn minvalue and maxvalue where code='508094';
--查出還原sql
select operation,undo_sql from flashback_transaction_query where xid=hextoraw('03001500A2110100')
---使用還原sql
insert into "SWSERP02"."TBSCMP"("TBSCMPID","CODE","NAME","FULLNAME","KIND","TBSAREAID","PARENTID","LAYERNO","LAYERINDEX","TBSCMPLEVELID"。。。。
--再次查詢確認已還原
select * from tbscmp where code='508094';
下面使用SCN號進行還原
--再刪除
delete tbscmp where code='508094';
---使用versions查詢出 versions_xid
select versions_xid,code,name from tbscmp versions between scn minvalue and maxvalue where code='508094';
--查詢此操作對應的閃回SCN
select operation,start_scn from flashback_transaction_query where xid=hextoraw('03001500A2110100');
--確認開啓行移動功能
alter table tbscmp enable row movement;
--使用SCN閃回
flashback table tbscmp to SCN 101943274;
--再次查詢確認已還原
select * from tbscmp where code='508094';
推薦使用UNDOSQL,因爲使用SCN會連在這期間的其他操作一起還原