一.誤刪除數據表解決方案
1.刪除表中數據兩種方法
a. delete * from My_Table;
b. truncate table My_Table;
2.刪除整個表
drop table My_Table;
如何恢復不小心 Drop 掉的表呢,其實 Oracle中也有類似的 "回收站"
比如不小心刪除了表 My_Table
drop table My_Table;
這個時候再用SELECT語句查詢此表時,將會提示表或視圖不存在.
但可以用如下語句查詢到這個表還在Oracle回收站中:
SELECT * FROM user_recyclebin WHERE original_name='My_Table';
那么現在就可以用如下語句進行恢復:
FLASHBACK TABLE My_Table TO BEFORE DROP;
二,誤刪表中數據,通過閃回功能
select * from sys.smon_scn_time;
--scn 與時間的對應關系
每隔5分鐘,系統產生一次系統時間標記與scn的匹配并存入sys.smon_scn_time表。
select * from student as of scn 592258
就可以看到在這個檢查點的表的歷史情況。
然后我們恢復到這個檢查點
insert into student select * from student as of scn 592258 where id not in (select id from student)
select * from v$transaction ---沒有提交的事務。
select * from flashback_transaction_query; ---回滾事務。 他有一列是 undo_sql 得到他就可以回滾剛才提交的事務。
select * from FLASHBACK_TRANSACTION_QUERY a
where a.start_timestamp between to_date('2008-12-7 14:40:56','yyyy-MM-dd HH24:mi:ss') and
to_date('2008-12-7 14:59:56','yyyy-MM-dd HH24:mi:ss');