在Oracle的數據庫中,若是不當心刪除數據,該如何恢復數據呢?數據庫
有兩種方法 :scn 方法和時間戳方法spa
1、恢復刪除數據的SQL語法(建議用時間戳).net
一、經過scn恢復刪除且已提交的數據3d
1)得到當前數據庫的scn號code
select current_scn from v$database; (切換到sys用戶或system用戶查詢) blog
查詢到的scn號爲:1499223flash
2)查詢當前scn號以前的scnit
select * from 表名 as of scn 1499220; (肯定刪除的數據是否存在,若是存在,則恢復數據;若是不是,則繼續縮小scn號)table
3)恢復刪除且已提交的數據class
flashback table 表名 to scn 1499220;
二、經過時間恢復刪除且已提交的數據
1)查詢當前系統時間
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2)查詢刪除數據的時間點的數據
select * from 表名 as of timestamp to_timestamp('2018-10-09 15:29:00','yyyy-mm-dd hh24:mi:ss'); (若是不是,則繼續縮小範圍)
3)恢復刪除且已提交的數據
--開啓行移動功能(解決執行如下語句報錯問題)
alter table 表名 enable row movement;
--恢復某個時間點的數據
flashback table 表名 to timestamp to_timestamp('2018-10-09 15:29:00','yyyy-mm-dd hh24:mi:ss');
--關閉行移動功能
alter table 表名 disable row movement;
2、恢復刪除數據的實例(方法)
一、查詢刪除數據前表數據
--查詢刪除前表的數據--- select * from Dxc_Goods;
二、執行刪除數據操做(132,133),並查看
--執行刪除操做:132,133-- delete from Dxc_GOODS where MID in(132,133); --提交(模擬誤刪操做) commit;
查看結果
三、恢復刪除並提交的數據 (指定刪除時間點,保證這個是執行刪除以前的時間)
--開啓行移動功能(解決執行如下語句報錯問題) alter table Dxc_Goods enable row movement; --恢復某個時間點的數據 flashback table Dxc_Goods to timestamp to_timestamp('2019-07-24 18:00:00','yyyy-mm-dd hh24:mi:ss'); --關閉行移動功能 alter table Dxc_Goods disable row movement;
執行後,查詢數據(132,133數據已恢復)
PS:
參考網址:https://blog.csdn.net/qq_36460189/article/details/82983732