共計 5234 個字符,預計需要花費 14 分鐘才能閱讀完成。
這篇文章主要介紹 Redo 丟失怎么處理,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一. 說明:
1. 以下所說的當前日志指日志狀態為 CURRENT,ACTIVE, 非當前日志指日志狀態為 INACTIVE
2. 不用考慮歸檔和非歸檔模式,2 種模式下的 Redo 丟失情況一樣。
二. 丟失 Redo 的 4 種情況:
第一種情況:非當前日志,正常關閉。
第二種情況:非當前日志,非正常關閉。
第三種情況:當前日志,正常關閉。
第四種情況:當前日志,非正常關閉。
三. 處理方法:
第一、二種情況的處理方法一樣,直接把日志文件 clear 即可。
SQL alter database clear logfile group 3;
SQL alter database clear unarchived logfile group 3;// 如果 INACTIVE 狀態的在線 Redo 還未歸檔,增加關鍵字 unarchived 完成 clear 操作。(ACTIVE,INACTIVE 都有可能未完成歸檔,歸檔是否完成可以查看 v$log.archived 字段)。
例子:
SQL startup mount
ORACLE 例程已經啟動。
Total System Global Area 263639040 bytes
Fixed Size 1384012 bytes
Variable Size 167772596 bytes
Database Buffers 88080384 bytes
Redo Buffers 6402048 bytes
數據庫裝載完畢。
SQL select group#,thread#,status,archived from v$log;
GROUP# THREAD# STATUS ARCHIV
———- ———- ——————————– ——
1 1 CURRENT NO
3 1 ACTIVE NO
2 1 INACTIVE YES
SQL alter database clear logfile group 3;
alter database clear logfile group 3
*
第 1 行出現錯誤:
ORA-01624: 日志 3 是緊急恢復實例 orcl (線程 1) 所必需的
ORA-00312: 聯機日志 3 線程 1: E:\APP\ORADATA\ORCL\REDO03.LOG
SQL alter database clear logfile group 2;
數據庫已更改。
第三種情況的處理辦法:
SQL startup mount;
SQL recover database until cancel;
SQL alter database open resetlogs;
例子 1:
SQL shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL startup mount
ORACLE 例程已經啟動。
Total System Global Area 263639040 bytes
Fixed Size 1384012 bytes
Variable Size 167772596 bytes
Database Buffers 88080384 bytes
Redo Buffers 6402048 bytes
數據庫裝載完畢。
SQL alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01139: RESETLOGS 選項僅在不完全數據庫恢復后有效
SQL recover database until cancel;
完成介質恢復。
SQL alter database open resetlogs;
數據庫已更改。
例子 2(第三種情況的第二個處理方法):
SQL shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL startup mount
ORACLE 例程已經啟動。
Total System Global Area 263639040 bytes
Fixed Size 1384012 bytes
Variable Size 167772596 bytes
Database Buffers 88080384 bytes
Redo Buffers 6402048 bytes
數據庫裝載完畢。
SQL select group#,thread#,status,archived from v$log;
GROUP# THREAD# STATUS ARCHIV
———- ———- ——————————– ——
1 1 CURRENT NO
3 1 INACTIVE YES
2 1 INACTIVE YES
SQL alter database clear logfile group 2;
數據庫已更改。
SQL alter database clear logfile group 3;
數據庫已更改。
SQL alter database clear unarchived logfile group 1;
數據庫已更改。
這里 CURRENT 的 Redo 日志文件組能被 clear unarchived。
SQL alter database open;
數據庫已更改。
如果 Redo 日志文件丟失,clear 操作完成之后將在原有位置創建新的 Redo 日志文件。
第四種情況的處理方法:
1. 通過備份來還原、恢復數據。
2. 通過修改參數文件中的參數
_allow_resetlogs_corruption=TRUE
來強制啟動數據庫。 雖然能夠啟動數據庫到 open 狀態,但是啟動后的數據庫數據字典、數據有可能導致不一致的情況出現,故需要在 open 下把整個數據庫 export,然后刪除庫,重建,再將 export 的數據 import 到新的數據庫中。
四. 驗證數據庫是否正常關閉的方法
SQL select open_mode from v$database;
OPEN_MODE
——————–
READ WRITE
SQL select status from v$instance;
STATUS
————
OPEN
SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;
FILE# CHECKPOINT_CHANGE# FUZ
———- —————— —
1 1165820 YES
2 1165820 YES
3 1165820 YES
4 1165820 YES
FUZZY bit in datafile header means that there may have been writes into a datafile after the last checkpoint. E.g. there may be changes written to datafile with higher SCN than checkpoint_change# stored in datafile header (seen from v$datafile_header.checkpoint_change#).
FUZYY 表示模糊性,意思是,該數據文件處于模糊狀態,在最近一次 CHECKPOINT 后,該文件上的數據可能被修改過了,但沒來得及更新到該文件上(或者該文件不知道),需要讀取日志信息來判斷。
SQL select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
———- —————— ————
1 1165820
2 1165820
3 1165820
4 1165820
由于數據庫是打開的狀態,所以終止 SCN 是空,SCN 的內容可參考文章:http://space.itpub.net/23135684/viewspace-627343
SQL shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL startup mount
ORACLE 例程已經啟動。
Total System Global Area 313860096 bytes
Fixed Size 1384352 bytes
Variable Size 155189344 bytes
Database Buffers 150994944 bytes
Redo Buffers 6291456 bytes
數據庫裝載完畢。
SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;
FILE# CHECKPOINT_CHANGE# FUZ
———- —————— —
1 1166324 NO
2 1166324 NO
3 1166324 NO
4 1166324 NO
在正常管理數據庫的情況下,FUZZY 字段都應該是 NO,表示沒有模糊不清的 SCN 存儲在數據文件中。
SQL select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
———- —————— ————
1 1166324 1166324
2 1166324 1166324
3 1166324 1166324
4 1166324 1166324
正常關閉數據庫的終止 SCN 應該和啟動 SCN 相同。FUZZY 等于 NO,且數據庫的終止 SCN 等于啟動 SCN 等于數據文件 SCN,那么可以認為數據庫是正常關閉,且在打開數據庫之前不需要執行實例恢復或 Crash 恢復。
SQL alter database open;
數據庫已更改。
SQL shutdown abort
ORACLE 例程已經關閉。
SQL startup mount
ORACLE 例程已經啟動。
Total System Global Area 313860096 bytes
Fixed Size 1384352 bytes
Variable Size 155189344 bytes
Database Buffers 150994944 bytes
Redo Buffers 6291456 bytes
數據庫裝載完畢。
SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;
FILE# CHECKPOINT_CHANGE# FUZ
———- —————— —
1 1166327 YES
2 1166327 YES
3 1166327 YES
4 1166327 YES
非正常關閉數據庫實例,FUZZY 字段的值是 YES。
SQL select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
———- —————— ————
1 1166327
2 1166327
3 1166327
4 1166327
非正常關閉數據庫實例,終止 SCN 依然為空。那么,在數據庫被打開之前必須使用歸檔 Redo 日志完成實例恢復或 Crash 恢復。
以上是“Redo 丟失怎么處理”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!