這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Online Redo Log損壞處理的實(shí)驗(yàn)分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了金城江免費(fèi)建站歡迎大家使用!
Oracle核心文件包括:控制文件、數(shù)據(jù)文件和在線重做日志(Online Redo Log)。Online Redo Log和Control File分別采用數(shù)據(jù)冗余的策略進(jìn)行多重路徑保護(hù)。無論是Control File還是Online Redo Log Group Member,都可以指定多個(gè)完全相同的文件對象,并且將其分布在不同的存儲(chǔ)介質(zhì)上。一旦發(fā)生介質(zhì)故障,如硬盤介質(zhì)故障,我們可以簡單的使用其他存儲(chǔ)位置的文件進(jìn)行替換。
所以,即使是在正式的生產(chǎn)環(huán)境下,如果設(shè)置好適當(dāng)?shù)目刂莆募蓡T組和Online Redo Log組,Control File和Online Redo Log損壞不可恢復(fù)的情況是不多見的。
但是,如果發(fā)生這樣的場景,我們應(yīng)該怎么進(jìn)行處理呢?
1、實(shí)驗(yàn)環(huán)境和影響因素討論
我們選擇Oracle 10g環(huán)境進(jìn)行實(shí)驗(yàn)。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
--數(shù)據(jù)庫處在歸檔模式下;
SQL> archive log list;
數(shù)據(jù)庫日志模式 存檔模式
自動(dòng)存檔 啟用
存檔終點(diǎn) USE_DB_RECOVERY_FILE_DEST
最早的聯(lián)機(jī)日志序列 237
下一個(gè)存檔日志序列 239
當(dāng)前日志序列 239
SQL> select group#, archived, status, first_change# from v$log;
GROUP# ARCHIVED STATUS FIRST_CHANGE#
---------- -------- ---------------- -------------
1 YES INACTIVE 3567149
2 YES INACTIVE 3572305
3 NO CURRENT 3572332
在試驗(yàn)中,我們會(huì)在關(guān)閉數(shù)據(jù)庫的時(shí)候刪除Online Redo Log組成員文件。注意,在Windows環(huán)境下,由于操作系統(tǒng)的限制,我們是沒有辦法刪除一個(gè)正在使用或者與實(shí)例相關(guān)的文件。
三個(gè)潛在因素可能會(huì)影響到最后結(jié)果,分別為:日志歸檔模式、關(guān)閉數(shù)據(jù)庫方式和刪除日志組狀態(tài)。
日志歸檔模式表示Oracle是否對已經(jīng)寫完的online redo log member進(jìn)行額外歸檔保存。保持一個(gè)連續(xù)的歸檔信息對Oracle的意義在于可以實(shí)現(xiàn)完全恢復(fù)complete recovery。在歸檔模式下,我們可以從一個(gè)過去的備份集開始,利用歸檔日志前推重演事務(wù),最后應(yīng)用到當(dāng)前日志組,使之恢復(fù)到一個(gè)完全的恢復(fù)點(diǎn)上。如果日志已經(jīng)歸檔,表示日志內(nèi)容都已經(jīng)寫入到了數(shù)據(jù)文件中,狀態(tài)必然是非Active狀態(tài)。我們的實(shí)驗(yàn)中,數(shù)據(jù)文件并不是丟失的對象,所以已經(jīng)寫入數(shù)據(jù)文件的日志丟失并不會(huì)造成致命的影響。
關(guān)閉數(shù)據(jù)庫方式在Oracle中有若干種,但是總的來說只有一致性關(guān)閉和非一致性關(guān)閉兩個(gè)大類。一致性關(guān)閉表示Oracle在關(guān)閉數(shù)據(jù)庫前,都要講未寫入的臟塊寫入到數(shù)據(jù)文件,控制文件和數(shù)據(jù)文件保持一致。一致性關(guān)閉條件下,Oracle在open階段是不需要進(jìn)行Instance Recovery過程的。非一致性關(guān)閉只有shutdown abort,同斷電處理。非一致性關(guān)閉下Oracle在open階段要進(jìn)行instance recovery,這個(gè)過程需要redo log的配合。
刪除日志狀態(tài)。被刪除的日志組是否是當(dāng)前日志組也是一個(gè)重要因素。如果是當(dāng)前日志組,就意味Oracle在啟動(dòng)狀態(tài)需要進(jìn)行讀寫該文件組。如果不是當(dāng)前日志組被刪除,也可能會(huì)有相同的問題,因?yàn)榉钱?dāng)前日志組可能處在Active狀態(tài)。
下面,我們分別進(jìn)行實(shí)驗(yàn)。
2、完全關(guān)閉情況下非當(dāng)前日志組刪除
當(dāng)前日志文件狀態(tài)如下:
SQL> select group#, type, member from v$logfile;
GROUP# TYPE MEMBER
---------- ------- --------------------------------------------------------------------------------
3 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03A.LOG
2 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02A.LOG
1 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01A.LOG
1 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01B.LOG
3 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03B.LOG
2 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02B.LOG
6 rows selected
當(dāng)前日志組號為3,關(guān)閉數(shù)據(jù)庫刪除日志2組文件。
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE例程已經(jīng)關(guān)閉。
E:\oracle\product\10.2.0\oradata\orcl>rename REDO02A.LOG REDO02A.LOG_bak
E:\oracle\product\10.2.0\oradata\orcl>rename REDO02B.LOG REDO02B.LOG_bak
E:\oracle\product\10.2.0\oradata\orcl>dir
驅(qū)動(dòng)器 E中的卷沒有標(biāo)簽。
卷的序列號是 7CD0-C497
E:\oracle\product\10.2.0\oradata\orcl的目錄
2012-09-22 13:20 <DIR> .
2012-09-22 13:20 <DIR> ..
2012-09-22 12:04 <DIR> CHANGETRACKING
2012-09-22 13:19 7,356,416 CONTROL01.CTL
2012-09-22 13:19 7,356,416 CONTROL02.CTL
2012-09-22 13:19 7,356,416 CONTROL03.CTL
2012-09-22 13:19 104,865,792 EXAMPLE01.DBF
2012-09-22 13:19 52,429,312 REDO01A.LOG
2012-09-22 13:19 52,429,312 REDO01B.LOG
2012-09-22 13:19 52,429,312 REDO02A.LOG_bak
2012-09-22 13:19 52,429,312 REDO02B.LOG_bak
2012-09-22 13:19 52,429,312 REDO03A.LOG
2012-09-22 13:19 52,429,312 REDO03B.LOG
2012-09-22 13:19 304,095,232 SYSAUX01.DBF
(篇幅原因,省略部分內(nèi)容……)
16個(gè)文件 3,178,867,712字節(jié)
3個(gè)目錄 204,274,311,168可用字節(jié)
重新啟動(dòng)數(shù)據(jù)庫,之后Oracle在mount到open階段報(bào)錯(cuò),因?yàn)椴荒苷业娇刂莆募卸x的日志文件。
SQL> startup
ORACLE例程已經(jīng)啟動(dòng)。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 155192244 bytes
Database Buffers 440401920 bytes
Redo Buffers 7135232 bytes
數(shù)據(jù)庫裝載完畢。
ORA-00313:無法打開日志組 2 (用于線程 1)的成員
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02A.LOG'
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02B.LOG'
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
一般情況下,如果是完全關(guān)閉場景,我們是可以保證Oracle將online redo log中所有的內(nèi)容寫入到了數(shù)據(jù)文件,并且保持一致。
對非當(dāng)前日志成員組,如果被誤刪除了,沒有過多的問題,只是需要重建就好了。
SQL> alter database clear logfile group 2;
數(shù)據(jù)庫已更改。
--完全開啟,沒有數(shù)據(jù)損失。
SQL> alter database open;
數(shù)據(jù)庫已更改。
E:\oracle\product\10.2.0\oradata\orcl的目錄
2012-09-22 13:23 <DIR> .
2012-09-22 13:23 <DIR> ..
2012-09-22 12:04 <DIR> CHANGETRACKING
2012-09-22 13:20 7,356,416 CONTROL01.CTL
2012-09-22 13:20 7,356,416 CONTROL02.CTL
2012-09-22 13:20 7,356,416 CONTROL03.CTL
2012-09-22 13:19 104,865,792 EXAMPLE01.DBF
2012-09-22 13:23 <DIR> ONLINELOG
2012-09-22 13:19 52,429,312 REDO01A.LOG
2012-09-22 13:19 52,429,312 REDO01B.LOG
2012-09-22 13:23 52,429,312 REDO02A.LOG
2012-09-22 13:19 52,429,312 REDO02A.LOG_bak
2012-09-22 13:23 52,429,312 REDO02B.LOG
2012-09-22 13:19 52,429,312 REDO02B.LOG_bak
2012-09-22 13:19 52,429,312 REDO03A.LOG
2012-09-22 13:19 52,429,312 REDO03B.LOG
(篇幅原因,部分省略……)
18個(gè)文件 3,283,726,336字節(jié)
4個(gè)目錄 204,164,952,064可用字節(jié)
Oracle在clear log后,重新創(chuàng)建了日志文件。
3、完全關(guān)閉情況下當(dāng)前日志組刪除
如果是完全關(guān)閉情況下當(dāng)前日志組刪除,我們應(yīng)該怎么處理?
SQL> select group#, archived, status, first_change# from v$log;
GROUP# ARCHIVED STATUS FIRST_CHANGE#
---------- -------- ---------------- -------------
1 YES INACTIVE 3567149
2 NO CURRENT 3576416
3 YES INACTIVE 3572332
SQL> select group#, type, member from v$logfile;
GROUP# TYPE MEMBER
---------- ------- --------------------------------------------------------------------------------
3 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03A.LOG
2 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02A.LOG
1 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01A.LOG
1 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01B.LOG
3 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03B.LOG
2 ONLINE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02B.LOG
6 rows selected
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE例程已經(jīng)關(guān)閉。
刪除日志組成員,重新啟動(dòng)。
E:\oracle\product\10.2.0\oradata\orcl>rename REDO02A.LOG REDO02A.LOG_bak
E:\oracle\product\10.2.0\oradata\orcl>rename REDO02B.LOG REDO02B.LOG_bak
SQL> startup
ORACLE例程已經(jīng)啟動(dòng)。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 159386548 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
數(shù)據(jù)庫裝載完畢。
ORA-00313:無法打開日志組 2 (用于線程 1)的成員
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02A.LOG'
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02B.LOG'
使用Clear方法進(jìn)行恢復(fù)嘗試。
SQL> alter database clear logfile group 2;
alter database clear logfile group 2
*
第 1行出現(xiàn)錯(cuò)誤:
ORA-00350:日志 2 (實(shí)例 orcl的日志,線程 1)需要?dú)w檔
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02A.LOG'
ORA-00312:聯(lián)機(jī)日志 2線程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02B.LOG'
當(dāng)前日志中內(nèi)容需要?dú)w檔,所以不能直接進(jìn)行clear log操作。筆者猜想:如果這里是非歸檔模式,是否就可以成功了?事實(shí)的確如此,下面為插入的實(shí)驗(yàn)過程。
--當(dāng)前日志組為1;
SQL> alter database clear logfile group 1;
Database altered.
SQL> alter database open;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
當(dāng)前數(shù)據(jù)文件是一致性的。
SQL> select ts#, checkpoint_change#, last_change# from v$datafile;
TS# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
0 3577306 3577306
1 3577306 3577306
2 3577306 3577306
4 3577306 3577306
6 3577306 3577306
可以用recover讓Oracle進(jìn)行虛擬的恢復(fù)動(dòng)作,恢復(fù)到最后的狀態(tài)。
SQL> recover database until cancel;
完成介質(zhì)恢復(fù)。
SQL> alter database open;
alter database open
*
第 1行出現(xiàn)錯(cuò)誤:
ORA-01589:要打開數(shù)據(jù)庫則必須使用 RESETLOGS或 NORESETLOGS選項(xiàng)
SQL> alter database open resetlogs;
數(shù)據(jù)庫已更改。
雖然是until cancel,但是卻沒有數(shù)據(jù)會(huì)損失。只是在open的時(shí)候,需要使用resetlog模式重新開啟一個(gè)新的朝代。
SQL> select open_mode, current_scn from v$database;
OPEN_MODE CURRENT_SCN
---------- -----------
READ WRITE 3577513
SQL> select group#, archived, status, first_change#,sequence# from v$log;
GROUP# ARCHIVED STATUS FIRST_CHANGE# SEQUENCE#
---------- -------- ---------------- ------------- ----------
1 NO CURRENT 3577308 2
2 YES INACTIVE 3577307 1
3 YES UNUSED 0 0
結(jié)論:對于一致性關(guān)閉條件下,如果online日志組出現(xiàn)問題,即使發(fā)生文件丟失,也不會(huì)有數(shù)據(jù)丟失的情況,因?yàn)閿?shù)據(jù)文件是一致的。
上述就是小編為大家分享的Online Redo Log損壞處理的實(shí)驗(yàn)分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱:OnlineRedoLog損壞處理的實(shí)驗(yàn)分析
文章轉(zhuǎn)載:http://chinadenli.net/article18/ihcpgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、ChatGPT、電子商務(wù)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)