1.查看表歷史時刻數據 select * from tab_test AS OF TIMESTAMP to_timestamp('20140917 10:00:00','yyyymmdd hh24:mi:ss'); 2、利用flashback table恢復表到過去某一時刻 alter table ...
1.查看表歷史時刻數據
select * from tab_test AS OF TIMESTAMP to_timestamp('20140917 10:00:00','yyyymmdd hh24:mi:ss');
2、利用flashback table恢復表到過去某一時刻
alter table tab_test enable row movement;
flashback table tab_test to timestamp ('20140917 10:00:00','yyyymmdd hh24:mi:ss');
alter table tab_test disable row movement;
3、查看過去某一段時間內對錶的操作,以確認需要恢復到的時間點
select SQL_TEXT,LAST_ACTIVE_TIME from v$sqlarea where LAST_ACTIVE_TIME >to_date('20140917 10:00:00','yyyymmdd hh24:mi:ss') and SQL_TEXT like '%tab_test%';
4、確認是否開啟閃回
select log_mode,flashback_on from v$database;
5.開戶閃回
Oracle閃回開啟及操作
1. 記錄當前時間或SCN
在資料庫變動前記錄時間或SCN
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') from dual;
SQL> select current_scn from v$database;
2.開啟閃回
開啟閃回需要資料庫在歸檔模型下,所以首先需要開啟歸檔。並且在mount狀態下。
首先查看是否開啟閃回:
SQL> select flashback_on from V$database;
FLASHBACK_ON
------------------
NO
如果已經開啟了閃回,無須執行下麵的操作。
SQL> alter system set db_recovery_file_dest_size=30G scope=both;
SQL> alter system set db_recovery_file_dest='D:\Oracle11g' scope=both;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database flashback on;
SQL> alter database open;
再進行確認:
SQL> select flashback_on from V$database;
FLASHBACK_ON
------------------
YES
3.閃回操作
3.1閃回資料庫
SQL >flashback database to time to_date(xxx);
SQL >flashback database to time TO_TIMESTAMP (xxx);
SQL >flashback database to scn xxx
SQL >flashback database to sequence xxx thread 1
SQL>flashback database to timestamp(sysdate-1/24)
3.2閃回表
先要開啟row movement
SQL>alter table emp enable row movement;
SQL >FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2013, 02:33:00)
SQL >FLASHBACK TABLE employee TO SCN 133456;
SQL >FLASHBACK TABLE t1 TO TIMESTAMP '2013-03-03 12:05:00' ENABLE TRIGGERS;
閃回表可以分為兩種情況,一種是閃回到指定時間或SCN,一種是drop閃回
閃回到指定時間或SCN:
SQL>flashback table emp to timestampto_timestamp
('2013-09-12 08:00:00','yyyy-mm-ddhh24:mi:ss');
SQL>flashback table emp to scn 11064241;
DROP閃回:
如果誤對錶做了drop操作,可用下麵的方法閃回
SQL>flashback table s_emp1 to before drop;
可以以下麵的方法閃回
SQL>flashback table flashbacktable to before drop rename to a;
SQL>flashback table "回收站實體名"to before drop;
--閃回表後表的索引也會回來,但是索引名還是在recyclebin中顯示的名字,所以使用 alterindex“ bin$xxx” rename to xxxx命令修改索引名稱。
SQL>alter index "BIN$s6TKiw4uafDgRAAVF3jtoA==$0"
rename to PK_PC_STIM_INJ_ENHANCE_MON
3.3查詢閃回(flashbackquery)
delete資料庫里的數據都刪除了以後,還commit,採用下麵的方法實現數據的還原
·查詢過去某指定時間點資料庫中的數據。
SQL>select* from emp as of timestamp to_timestamp('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
·刪除表後將數據添加到原表中
SQL>insertinto emp select * from emp
as of timestamp to_timestamp
('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
3.4 刪除閃回(flashbackdrop)
閃回被dropped的基表,
·顯示回收站信息
SQL>show recyclebin
--select* from user_recyclebin
·徹底刪除基表
SQL>drop table s_emp1 purge ;
----徹底刪除一個表用PURGE,這樣的刪除的表不能閃回。
·清除回收站
SQL>purge recyclebin;
·查資料庫選項產品:
SQL>select * from V$option;
· truncate刪除後不保留存儲空間,而Delete刪除後,保留存儲空間,如果要刪掉這些存儲空間,以釋放空間,可以執行以下命令:
SQL>alterttable emp deallocate unused;
·如果還要保留一部分,可以用:
SQL>alterttable emp deallocate unused 200k;
4.關於數據閃回的幾點說明
*系統表空間數據不得閃回
*實體在資料庫保存時間不可保證,保留時間取決於系統運行狀況,可能是幾秒鐘,也可能是幾個月。
*基表閃回時,建立在表上的約束不可保證