一.誤刪除數(shù)據(jù)表解決方案
1.刪除表中數(shù)據(jù)兩種方法
a. delete * from My_Table;
b. truncate table My_Table;
2.刪除整個(gè)表
drop table My_Table;
如何恢復(fù)不小心 Drop 掉的表呢,其實(shí) Oracle中也有類似的 "回收站"
比如不小心刪除了表 My_Table
drop table My_Table;
這個(gè)時(shí)候再用SELECT語(yǔ)句查詢此表時(shí),將會(huì)提示表或視圖不存在.
但可以用如下語(yǔ)句查詢到這個(gè)表還在Oracle回收站中:
SELECT * FROM user_recyclebin WHERE original_name='My_Table';
那么現(xiàn)在就可以用如下語(yǔ)句進(jìn)行恢復(fù):
FLASHBACK TABLE My_Table TO BEFORE DROP;
二,誤刪表中數(shù)據(jù),通過(guò)閃回功能
select * from sys.smon_scn_time;
--scn 與時(shí)間的對(duì)應(yīng)關(guān)系
每隔5分鐘,系統(tǒng)產(chǎn)生一次系統(tǒng)時(shí)間標(biāo)記與scn的匹配并存入sys.smon_scn_time表。
select * from student as of scn 592258
就可以看到在這個(gè)檢查點(diǎn)的表的歷史情況。
然后我們恢復(fù)到這個(gè)檢查點(diǎn)
insert into student select * from student as of scn 592258 where id not in (select id from student)
select * from v$transaction ---沒(méi)有提交的事務(wù)。
select * from flashback_transaction_query; ---回滾事務(wù)。 他有一列是 undo_sql 得到他就可以回滾剛才提交的事務(wù)。
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');