<strike id="j6ksu"></strike>
<th id="j6ksu"></th>
  1. <th id="j6ksu"></th>

    Oracle數據庫update或誤刪除提交后想恢復該怎么操作?

    培訓教學 潘老師 2周前 (11-09) 50 ℃ (0) 掃碼查看

    在進行Oracle數據庫操作時往往會因為自己的一時大意導致數據庫誤操作,比如沒寫where導致整表誤update或誤刪除,可能直接導致系統崩潰,那想要恢復之前的誤操作數據該如何去做?
    Oracle數據庫update或誤刪除提交后想恢復該怎么操作?
    寫這篇文章,主要是潘老師今天犯了一個影響說大不大但性質還是很嚴重的錯誤。

    測試人員找我修改下某個表的一些數據方便測試,可我這個粗心呀,寫完update語句,就直接執行了,剛執行完就拍大腿了,忘了寫where條件了!整個世界崩塌了,顯示20000多條數據受影響,沒錯,整個表數據全部都被誤更新了。

    由于使用的是Navicat也沒有commit和rollback按鈕,這些數據已經實實在在地躺在了數據庫,查詢一看清一色的相同字段值,似乎在赤裸裸地嘲諷著我!最關鍵的是,測試庫數據沒有備份!

    記錄下這該死的語句:

    # WHERE被我吃了~
    update T_PSP_PLAN set TIME_LIMIT='T4,T8,SP' ,CONTAINER_DES_CODE='755JES',CONTAINER_TIME_LIMIT='T4'
    

    說這次事件影響不大一是因為畢竟是測試庫,大不了數據重建,二是因為該表不是核心系統配置表,修改的字段也不是最核心的字段,但性質很惡劣就是反應了自己的粗心,態度不嚴謹,容易釀成重大事故。好在,保持鎮定,假裝冷靜,開始尋找其他的恢復數據庫方法,結果還真找到了,關鍵也確實實現了數據庫的恢復,現在記錄在下面:

    Oracle數據庫update或誤刪除提交后恢復方法

    第一步:
    執行查詢視圖v$sqlarea,找到你操作那條SQL的時間,sql如下:

    # sql_text 可以換成你的sql,可模糊查詢
    select r.FIRST_LOAD_TIME,r.* from v$sqlarea r where sql_text like '%你誤操作的sql語句%' order by r.FIRST_LOAD_TIME desc ;
    

    主要是找到你誤操作sql的操作時間,即查詢出來的第一個FIRST_LOAD_TIME字段值
    Oracle數據庫update或誤刪除提交后想恢復該怎么操作?

    第二步:
    執行下面兩條SQL,即可將數據恢復到執行update之前,某某時間之前的數據。

    alter table 誤操作表名 enable row movement;
    # sql誤執行時間(我這里向前推了1秒) 比如:2021-11-09 11:36:21
    flashback table 誤操作表名 to timestamp to_timestamp('sql誤執行時間', 'yyyy-mm-dd hh24:mi:ss');
    

    執行成功之后再去查詢表數據,驚喜地發現正的恢復了,至于這個時間點之后的數據丟了就丟了,畢竟測試庫,恢復的又比較及時,已經算是比較完美了!

    認識flashback

    一般Oracle數據恢復可以使用備份恢復或者使用日志rollback恢復,不過都比較耗時,而且甚至要停掉Oracle會影響業務正常運行,而提供的另一種恢復手段就是上面我們用的flashback,稱為“閃回”,是一種快速數據庫恢復機制。
    1)Flashback的簡單原理
    Oracle會將數據庫數據的每1個改動記錄在日志文件中, 所以理論上依靠日志文件, 是能將數據庫回滾到任何一個時間點的,而Flashback的機制有點類似與回收站, 會把數據庫改動前的鏡像放到undo表空間中.,如果用戶要rollback1個數據庫對象, 只需要找到undo表空間中對應的Undo數據即可。
    2) Flashback的優點
    很明顯, Flashback并不依賴于日志文件, 只需Undo表空間中undo數據即可發揮作用,所以Flashback可以滿足用戶邏輯錯誤的快速恢復。優點如下:

    • 1. 快速
    • 2. 在線恢復, 無需關閉數據庫
    • 3. 操作簡單,便捷

    3) Flashback的缺點
    Flashback缺點同樣明顯.
    1. 只適用于用戶邏輯錯誤, 所謂邏輯錯誤就是用戶對數據的誤操作, 例如誤刪除/更新一些數據行等等,而對于數據文件的損壞則無能為力(只能通過日志恢復).
    2. undo表空間的容量有限, 舊的undo數據有可能會被新的數據覆蓋, 所以Flashback一般只適用于短時間內的恢復, 對于一段相當時間前的誤操作, 很可能因為undo數據被覆蓋而恢復失敗。
    另外想要使用flashback還要保證數據庫開啟了Flashback功能,否則不能使用閃回,具體的就不再展開細說了。

    總結

    總結經驗有以下幾點:

    • 執行sql之前最好再確認一遍,保證100%無誤后再執行,千萬別手速過快
    • oracel數據庫操作工具建議使用plsql,可以有commit和rollback按鈕,有一次糾錯的機會。
    • 數據庫一定要做好定時備份
    • 遇事要冷靜鎮定,不能慌!

    好了,以上就是Oracle數據庫update或誤刪除提交后想恢復該怎么操作的全部內容,如果還有什么疑問可以留言評論。


    版權聲明:本站所有文章,如無特殊說明,均為本站原創。全部下載資源版權歸原作者所有。任何個人或組織,若未征得本站同意,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。若需轉載請注明文章來源。
    本文鏈接:Oracle數據庫update或誤刪除提交后想恢復該怎么操作?
    喜歡 (0)
    請潘老師喝杯Coffee吧!】
    分享 (0)
    用戶頭像
    發表我的評論
    取消評論
    表情 貼圖 簽到 代碼

    Hi,您需要填寫昵稱和郵箱!

    • 昵稱【必填】
    • 郵箱【必填】
    • 網址【可選】

    您也可以 微信登錄 來發表評論!

    韩国毛茸茸的丰满妇女