-----今天在乙個資料庫中將乙個表的資料使用了delete from 表名,然後就找各種恢復手段,親測下面幾種有效。這個能幫助我們在開發中經常進行自測時涉及到的資料操作,可能儲存了一大堆的資料,然後執行了delete命令,結果發現有需要之前的資料進行測試,下面就直接來吧!
-----1.通過scn恢復刪除且已提交的資料
(1)獲得當前資料庫的scn號
select current_scn from v$database; (切換到sys使用者或system使用者查詢)
-----我這得到了125367308
(2)查詢當前scn號之前的scn
select * from 表名 as of scn 125367308; (確定刪除的資料是否存在,如果存在,則恢復資料;如果不是,則繼續縮小scn號)
-----我這邊查詢125367308沒反應,於是就縮小scn值125367307,125367306,125367305,125367304,125367303。當到125367303的時候已經找了刪除之前的資料,其實最開始我是直接給的125367300的,也是找到了刪除之前的資料。
(3)恢復刪除且已提交的資料
flashback table 表名 to scn 125367303;
--------但是當我執行這一步的時候就報錯了,提示『因為未啟用行移動功能 不能閃回表』,這個時候不要著急,既然提示沒有啟用,那就給他啟用就是了 alter table 表名enable row movement; 然後再去執行第三步的資料恢復,至此,刪除的資料已經全部回來了。
-------通過時間恢復刪除且已提交的資料
(1)獲取系統當前的時間
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
-----我這邊得到了2018-06-05 15:25:04
(2)查詢刪除資料的時間點的資料
select * from 表名as of timestamp to_timestamp('2018-06-05 15:25:04','yyyy-mm-dd hh24:mi:ss');
-----將裡面的時間戳換成上面查詢到的時間,如果確定資料已經刪除掉的話,這個時間點肯定是查不出來刪除資料的,和上面的一樣,減小範圍,因為我是上一分鐘剛刪除掉的,所以我將時間點換成了2018-06-05 15:25:03,然後查詢到了刪除的資料
(3)恢復刪除且已提交的資料
flashback table 表名 to timestamp to_timestamp('2018-06-05 15:25:03','yyyy-mm-dd hh24:mi:ss');
------可能也會提示『因為未啟用行移動功能 不能閃回表』,和上面一樣,執行 alert table 表名 enable row movement; 然後再去執行 flashback 語句,至此資料恢復
orcal恢復delete誤刪除的資料
orcal的刪除有3種 delete truncate drop。delete可以手動提交和回滾,且可以使用where 而truncate drop執行即對錶資料進行了修改,且不能使用where。delete truncate只刪除表資料 而drop刪除表資料和表結構。所以刪除表中某些資料多用del...
恢復Oracle刪除的資料
select t.time dp,t.scn from sys.smon scn time t order by t.time dp desc 1 2014 7 1 11 05 47 225286134 2 2014 7 1 11 00 19 225285926 3 2014 7 1 10 57 4...
oracle恢復刪除的資料
分為兩種方法 scn和時間戳兩種方法恢復。一 通過scn恢復刪除且已提交的資料 1 獲得當前資料庫的scn號 select current scn from v database 切換到sys使用者或system使用者查詢 查詢到的scn號為 1499223 2 查詢當前scn號之前的scn sel...