oracle日誌挖掘

2022-09-19 18:42:14 字數 1716 閱讀 6056

oracle日誌挖掘是一種十分強大的資料恢復技術,只要你保障你的歸檔日誌和重做日誌是完整的,那麼就可以將你的資料恢復到任何時刻。簡單敘述一下日誌挖掘的基本原理,然後進行乙個簡單的小實驗。

日誌挖掘時基於redo日誌和歸檔日誌的基礎之上來進行日誌載入並進行恢復,挖掘,挖掘,挖的就是你的redo日誌和歸檔日誌,當資料庫執行過程中,你的所有資料更改操作會被記錄在redo日誌中,而oracle redo日誌記錄著undo日誌,所以可以使用記錄在redo日誌中undo日誌來對你所做的操作進行回退。我們只需要確定你所做的操作被記錄在哪個時間範圍內,然後通過時間或者scn號將這個時間範圍內的操作載入到 v$logmnr_contents這個檢視中,然後找到對應的undo記錄,執行undo記錄的sql語句,就可以將你的資料恢復至更改前的狀態。

可能說的有點難理解,我們來做乙個簡單的實驗。

首先確定資料庫執行在歸檔模式下,否則日誌一旦被覆蓋,那肯定是沒辦法恢復的,當然,可以通過其他方式,如閃回方式等,但是今天僅僅只針對日誌挖掘來進行描述。

1、archive log list --檢視系統是否執行在歸檔模式

我的庫是在歸檔模式,如果沒有歸檔,在mount下開啟歸檔。

2、alter database add supplemental log data; --啟動最小日誌,這一步是為了日誌更加詳細,完整。

3、更新一條資料,將new york 更改為test。

4、這個資料更新的時間範圍大約是在17點10分之20分。

6、到此,我們將17點10分到17點20分的redo日誌載入到v$logmnr_contents檢視中,檢視v$logmnr_contents檢視的undo記錄,。

註解:seg_name 是更改的表名,seg_owner是表所屬的使用者,sql_redo是redo日誌記錄的sql資訊,剛才是做了乙個update操作,所以使用like查詢有update欄位的字段。過濾條件可以自己定義,只要能確定是哪條資料就可以。查出來的sql_undo 就是你的回退sql 用這條sql就可以將資料恢復到更改前的狀態。

7、執行undo欄位中的sql。

至此,資料成功恢復,但是在生產環境中需要恢復的資料往往有很多,可能幾千甚至幾萬條,可以寫乙個迴圈來對資料進行插入,如下。

註解:利用for迴圈中的隱式游標儲存sql_undo欄位中的資料,然後一次執行需要sql進行資料恢復。

Oracle重做日誌和日誌挖掘

1 oracle官網 managing the redo log 重做日誌包含所有資料產生的歷史改變記錄。重做日誌檔案通常用於 當提交後,redo log buffer被刷入redo log files v log從控制檔案中顯示日誌檔案的資訊。可參考官網資料v log column datatyp...

Oracle logminer 日誌挖掘

3.新增需要分析的檔案 4.開始分析檔案 5.開始分析內容 6.結束日誌分析 logmnr 可以用來分析redo 日誌和歸檔檔案。將redo日誌或者歸檔檔案中的內容提取出來,供dba進行操作分析歷史操作,比如進行誤刪除操作的恢復。logmnr 分析日誌,需要建立乙個資料字典,這個資料字典可以儲存在外...

資料探勘 學習日誌

主要知道每乙個函式的返回值是什麼 set是乙個無序不重複的序列 tolist 列表裡面套列表 temp list df genre str.split tolist 疑惑 這個迴圈不太懂 genre list list set i for j in temp list for i in j 用雙重迴...