1. 程式人生 > >oracle容災之truncate資料恢復

oracle容災之truncate資料恢復

在我的另外幾篇文章中,介紹了關於資料庫閃回的一些內容,對於drop和delete的資料閃回。對於truncate,可能有一些資料庫知識的應該會知道,在正常邏輯中,如果我們將表truncate掉了,是找不回來了,TRUNCATE TABLE 是一次性地從表中刪除所有的資料並不把單獨的刪除操作記錄記入日誌儲存,刪除行是不能恢復的。並且在刪除的過程中不會啟用與表有關的刪除觸發器。執行速度快。
那麼問題來了,如果我們生產過程中,一不小心,將業務表truncate掉了該怎麼辦呢?其實也是有辦法解決的,具體操作過程如下:

1,新建測試表t_test,插入幾條測試資料
在這裡插入圖片描述
2,執行我們truncate命令,清除t_test中的所有資料
在這裡插入圖片描述


3,truncate恢復需要一個儲存過程fy_recover_data(我個人覺得,能寫出這種儲存過程的,怕真的是科學家級別的了)
下載地址:https://download.csdn.net/download/xxbb0101/10275209

4,下載完成後,使用sys使用者登入db(注意一定要sys使用者登入,否則會出現執行報錯的情況),然後執行儲存過程

5,在command介面,登入sys使用者,執行命令:exec fy_recover_data.recover_truncated_table('userName','tableName');
注意該程式有兩個引數,前一個為被truncate表所在使用者的使用者名稱,後者為表名
在這裡插入圖片描述


4,用被普通使用者登入,查詢臨時表:select * from tablename$$;(臨時表名為表名+“$$”)
可見,被truncate掉的資料已經全部在我們的臨時表中了
在這裡插入圖片描述
5,最後將臨時表的資料全部插入的業務表即可,你看業務表資料,已經被全部恢復了
在這裡插入圖片描述
6,到此雖然我們資料恢復工作已經做完了,但是由於其恢復需要生成臨時表文件,所以我們要找到其對應的表空間檔案,做相關刪除操作,可以看到生成的臨時表空間為;FY_RST_DATA
在這裡插入圖片描述
7,根據資料字典DBA_DATA_FILES,查出該表空間對應的磁碟檔案
在這裡插入圖片描述
8,在磁碟上找到對應的檔案,rm即可
在這裡插入圖片描述

到此為止,整個truncate資料恢復操作就算全部完成了!希望對大家有所幫助