《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > Oracle數(shù)據(jù)庫(kù)非歸檔模式重做日志恢復(fù)方法
Oracle數(shù)據(jù)庫(kù)非歸檔模式重做日志恢復(fù)方法
2016年微型機(jī)與應(yīng)用第10期
王超,,祝永志
(曲阜師范大學(xué) 信息科學(xué)與工程學(xué)院,,山東 日照 276800)
摘要: Linux系統(tǒng)是在企業(yè)中廣泛使用的操作系統(tǒng),,企業(yè)亦多基于該操作系統(tǒng)安裝數(shù)據(jù)庫(kù),。當(dāng)數(shù)據(jù)庫(kù)運(yùn)行在非歸檔模式中,且數(shù)據(jù)庫(kù)處于無(wú)日志備份的情況時(shí),,一旦重做日志文件丟失將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)不可用。針對(duì)Oracle數(shù)據(jù)庫(kù)重做日志文件丟失問(wèn)題,提出一種非歸檔模式下的重做日志恢復(fù)方法,。實(shí)驗(yàn)證明,該方法能有效實(shí)現(xiàn)重做日志的無(wú)備份恢復(fù),。
Abstract:
Key words :

  王超,,祝永志

  (曲阜師范大學(xué) 信息科學(xué)與工程學(xué)院,,山東 日照 276800)

  摘要Linux系統(tǒng)是在企業(yè)中廣泛使用的操作系統(tǒng),,企業(yè)亦多基于該操作系統(tǒng)安裝數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)庫(kù)運(yùn)行在非歸檔模式中,,且數(shù)據(jù)庫(kù)處于無(wú)日志備份的情況時(shí),,一旦重做日志文件丟失將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)不可用。針對(duì)Oracle數(shù)據(jù)庫(kù)重做日志文件丟失問(wèn)題,,提出一種非歸檔模式下的重做日志恢復(fù)方法,。實(shí)驗(yàn)證明,該方法能有效實(shí)現(xiàn)重做日志的無(wú)備份恢復(fù),。

  關(guān)鍵詞:Oracle數(shù)據(jù)庫(kù),;非歸檔模式,;日志恢復(fù);Linux

  0引言

  Oracle數(shù)據(jù)庫(kù)是廣泛應(yīng)用的大型關(guān)系型數(shù)據(jù)庫(kù),,數(shù)據(jù)庫(kù)的高可用性是一個(gè)重要的研究課題,,快速準(zhǔn)確地恢復(fù)數(shù)據(jù)庫(kù)日志文件對(duì)提高數(shù)據(jù)庫(kù)可用性有重要意義。本文以Linux操作系統(tǒng)為基礎(chǔ),,針對(duì)非歸檔模式下重做日志文件丟失問(wèn)題提出一種恢復(fù)方法,。實(shí)驗(yàn)表明,該方法能有效實(shí)現(xiàn)非歸檔模式下的重做日志文件恢復(fù),,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的可用性,。

1重做日志概述

  重做日志文件(Redo Log File)用于保存表、索引或其他Oracle對(duì)象中添加,、刪除或者改變數(shù)據(jù)的記錄,。由于Oracle用循環(huán)的方式重復(fù)使用重做日志文件,因此每個(gè)Oracle數(shù)據(jù)庫(kù)有且至少有兩個(gè)重做日志文件,。當(dāng)一個(gè)重做日志文件充滿重做日志條目時(shí),,如果系統(tǒng)需要實(shí)例恢復(fù),則當(dāng)前的日志文件標(biāo)記為ACTIVE,;如果不需要實(shí)例恢復(fù),,則標(biāo)記為INACTIVE;系統(tǒng)從文件開(kāi)始按序列使用下一個(gè)日志文件,,并將其標(biāo)記為CURRENT[1],。在Oracle數(shù)據(jù)庫(kù)體系結(jié)構(gòu)中,數(shù)據(jù)文件,、控制文件,、重做日志文件和歸檔日志文件等組成數(shù)據(jù)庫(kù)的文件系統(tǒng),如圖1所示,。

001.jpg

  在現(xiàn)實(shí)使用中,,為了保證數(shù)據(jù)庫(kù)穩(wěn)定運(yùn)行,通常需要對(duì)數(shù)據(jù)庫(kù)日志文件備份,,日志文件與其鏡像文件記錄相同的日志信息,,共同組成日志文件組。為了確保日志文件的安全,,在同一個(gè)組中的日志文件通常會(huì)被放在不同的磁盤中[2],。日志文件丟失可能是由數(shù)據(jù)庫(kù)管理員(Database Administrator,DBA)操作引起不當(dāng),,如誤刪日志文件,或由于磁盤存儲(chǔ)問(wèn)題導(dǎo)致數(shù)據(jù)庫(kù)日志文件丟失,。在重做日志文件丟失期間,可能會(huì)引起數(shù)據(jù)庫(kù)系統(tǒng)無(wú)法使用,此時(shí)一旦數(shù)據(jù)庫(kù)數(shù)據(jù)文件丟失,,將無(wú)法及時(shí)恢復(fù),,有可能會(huì)造成極大的損失。因此,,確保重做日志文件的安全性,、冗余性對(duì)確保數(shù)據(jù)庫(kù)系統(tǒng)穩(wěn)定是極為重要的。

2日志恢復(fù)存在的問(wèn)題

  2.1歸檔模式

  Oracle數(shù)據(jù)庫(kù)可以運(yùn)行在歸檔(Archivelog)模式和非歸檔(Noarchivelog)模式,。數(shù)據(jù)庫(kù)非歸檔模式只能用于保護(hù)數(shù)據(jù)庫(kù)實(shí)例失敗,,而不能用于保護(hù)存儲(chǔ)介質(zhì)失敗。為了防止數(shù)據(jù)庫(kù)物理文件損壞所導(dǎo)致的數(shù)據(jù)丟失,,數(shù)據(jù)庫(kù)通常運(yùn)行在歸檔模式下[3],。在實(shí)際的使用中,可能由于DBA的錯(cuò)誤操作使數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行在非歸檔模式下,,此時(shí)一旦重做日志文件丟失,,則無(wú)法通過(guò)歸檔日志恢復(fù)重做日志。在此前研究中,,數(shù)據(jù)庫(kù)日志的備份與恢復(fù)策略大多是基于歸檔模式[4],,在非歸檔模式下的數(shù)據(jù)庫(kù)恢復(fù)也大多是使用RMAN通過(guò)備份文件恢復(fù)[56]。

  2.2一致性檢查

  在Oracle數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程中,,當(dāng)啟系統(tǒng)動(dòng)到裝載數(shù)據(jù)庫(kù)MOUNT狀態(tài)時(shí)會(huì)進(jìn)行數(shù)據(jù)一致性檢查[7],,如圖2所示。在重做日志丟失的情況下,,無(wú)法完成數(shù)據(jù)一致性檢查,,為了使數(shù)據(jù)庫(kù)恢復(fù)可用,需要通過(guò)修改系統(tǒng)隱藏參數(shù),,使數(shù)據(jù)庫(kù)在啟動(dòng)時(shí)跳過(guò)一致性檢查,。

  

002.jpg

  2.3身份驗(yàn)證

  在Oracle數(shù)據(jù)庫(kù)日志文件丟失期間,數(shù)據(jù)庫(kù)無(wú)法正常啟動(dòng)并進(jìn)行基本的身份驗(yàn)證,。此時(shí),,對(duì)數(shù)據(jù)庫(kù)的操作需要通過(guò)SYS用戶進(jìn)行,,需通過(guò)操作系統(tǒng)認(rèn)證(Operating System Authentication,,OSA)的方式獲得SYS用戶權(quán)限。

3重做日志恢復(fù)

  3.1恢復(fù)方法概述

  在Linux環(huán)境中,,對(duì)非歸檔模式下故障的Oracle數(shù)據(jù)庫(kù)系統(tǒng)使用數(shù)據(jù)庫(kù)控制文件實(shí)現(xiàn)數(shù)據(jù)庫(kù)恢復(fù),,并通過(guò)修改Linux系統(tǒng)中Oracle數(shù)據(jù)庫(kù)的隱藏參數(shù)“_allow_resetlogs_corruption”值實(shí)現(xiàn)跳過(guò)啟動(dòng)一致性檢查,實(shí)現(xiàn)數(shù)據(jù)庫(kù)啟動(dòng),,在此基礎(chǔ)上使用resetlogs方法完成重做日志文件的恢復(fù),。基于以上方法,進(jìn)行以下實(shí)驗(yàn),。

  3.2實(shí)驗(yàn)過(guò)程

  實(shí)驗(yàn)基于Linux環(huán)境中Oracle 11g R2數(shù)據(jù)庫(kù)系統(tǒng),,由于Linux文件系統(tǒng)與Windows文件系統(tǒng)的差別,其恢復(fù)過(guò)程與在Windows環(huán)境中的恢復(fù)過(guò)程存在一定差異,。為了模擬實(shí)際使用中重做日志恢復(fù)效果,,這里手動(dòng)刪除redo01.log、redo02.log,、redo03.log 3個(gè)日志文件,。在實(shí)際操作中建議提前對(duì)數(shù)據(jù)文件備份,防止恢復(fù)失敗導(dǎo)致數(shù)據(jù)丟失,。在實(shí)驗(yàn)過(guò)程中也對(duì)一些常見(jiàn)的系統(tǒng)異常提示進(jìn)行相應(yīng)的處理,,具體實(shí)驗(yàn)操作如下。

  (1)進(jìn)入系統(tǒng)命令終端,,通過(guò)OSA方式獲得SYS用戶權(quán)限,,按照常規(guī)流程使用startup命令啟動(dòng)Oracle數(shù)據(jù)庫(kù)進(jìn)程:

  SQL>startup

  此時(shí)系統(tǒng)返回如下信息:

  Oracle instance started.

  ……

  Database mounted

  ORA-00313:open failed for members of log group 1 of thread 1

  ORA27037:unable to obtain file status

  Linux ERROR:2:No such file or directory

  Additional information:3

  (2)由于該數(shù)據(jù)庫(kù)文件系統(tǒng)缺少重做日志文件,系統(tǒng)提示無(wú)法找到文件,,數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程中系統(tǒng)報(bào)錯(cuò),。此時(shí),可以使用下面的命令查詢當(dāng)前數(shù)據(jù)庫(kù)的實(shí)例名,、數(shù)據(jù)庫(kù)歸檔模式和打開(kāi)模式,,確定當(dāng)前狀態(tài)所處開(kāi)啟模式:

  SQL>select name,log_mode from vMYMdatabase;

  返回查詢結(jié)果如下:

2.png

  (3)這里的LOG_MODE為NOARCHIVELOG模式,說(shuō)明數(shù)據(jù)庫(kù)處于非歸檔模式,,且當(dāng)前數(shù)據(jù)庫(kù)開(kāi)啟到MOUNTED狀態(tài),。此時(shí),使用resetlogs方法打開(kāi)數(shù)據(jù)庫(kù),,輸入以下命令:

  SQL>alter database open resetlogs;

  系統(tǒng)返回信息如下:

  ……

  ERROR at line 1:

  ORA01139:RESETLOGS option only valid after an complete database recovery

  (4)根據(jù)系統(tǒng)提示,,數(shù)據(jù)庫(kù)如果要使用resetlogs方法,則需要在一個(gè)系統(tǒng)恢復(fù)之后,,因此,,需先對(duì)數(shù)據(jù)庫(kù)實(shí)施數(shù)據(jù)恢復(fù)。在該實(shí)驗(yàn)的情況中,,由于實(shí)驗(yàn)環(huán)境中僅重做日志文件丟失,,而控制文件未丟失,此處可通過(guò)使用控制文件對(duì)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù),,使用如下命令:

  SQL>recovery database using backup controlfile;

  系統(tǒng)返回異常:

  ……

  ORA00308:cannot open archived log

  ORA27037:unable to obtain file status

  Linuxx86_64 Error:2:No such file or directory

  (5)該問(wèn)題的產(chǎn)生是由于系統(tǒng)處于非歸檔模式下,,系統(tǒng)提示錯(cuò)誤,歸檔日志無(wú)法使用,,但實(shí)際中數(shù)據(jù)庫(kù)恢復(fù)過(guò)程已經(jīng)通過(guò)控制文件完成,,此時(shí)再次使用resetlogs方法進(jìn)行數(shù)據(jù)庫(kù)日志恢復(fù),,系統(tǒng)返回異常:

  ORA01113:file 1 needs media recovery

  ORA01110:data file 1:’/usr/app/oracle/oradata/orcl/

  system01.dbf’

  (6)該異常提示表明:如果要使用resetlogs方法恢復(fù)則需要通過(guò)恢復(fù)媒介,這里由于重做日志文件丟失,,無(wú)法通過(guò)媒介來(lái)恢復(fù),。因此需要修改隱藏參數(shù),讓Oracle數(shù)據(jù)庫(kù)忽略數(shù)據(jù)一致性檢查,。使用以下命令:

  SQL>alter system set”_allow_resetlogs_corruption”

  =true scope=spfile;

  System altered.

  (7)在修改完此參數(shù)后,,使用強(qiáng)制數(shù)據(jù)庫(kù)重啟命令啟動(dòng)數(shù)據(jù)庫(kù):

  SQL>startup force mount

  系統(tǒng)返回如下信息:

  ……

  Database mounted.

  (8)數(shù)據(jù)庫(kù)裝載成功后,再次使用resetlogs方法執(zhí)行數(shù)據(jù)庫(kù)恢復(fù),。在一段時(shí)間之后,,系統(tǒng)返回信息“Database altered”。該信息表明數(shù)據(jù)庫(kù)重做日志恢復(fù)完成,,打開(kāi)文件所在目錄,,實(shí)例文件夾中顯示redo01.log、redo02.log,、redo03.log 3個(gè)日志文件,,重啟數(shù)據(jù)庫(kù)即完成恢復(fù)。

  (9)修改_allow _resetlogs_corruption參數(shù)為系統(tǒng)默認(rèn)的false,,則在啟動(dòng)時(shí)進(jìn)行數(shù)據(jù)一致性檢查:

  SQL>alter system reset”_allow_resetlogs_corruption” scope=spfile;

  (10)使用startup force命令重啟數(shù)據(jù)庫(kù)后,,查詢修改的隱藏參數(shù)值:

  SQL>selcet KSPPINM,KSPPSTVL from xMYMksppi a,

  xMYMksppcv b where a.indx=b.indx and ksppinm like ‘%resetlogs’;

  返回查詢結(jié)果如下:

1.png

  (11)啟用Oracle數(shù)據(jù)庫(kù)的歸檔模式,增強(qiáng)數(shù)據(jù)庫(kù)系統(tǒng)的可用性:

  SQL>alter database archivelog;

  使用命令查看歸檔日志列表:

  SQL>archive log list;

  Database log mode Archive Mode Automatic archival Enable

  得到以上返回信息說(shuō)明數(shù)據(jù)庫(kù)已經(jīng)運(yùn)行在歸檔模式下,,實(shí)驗(yàn)完成,。

4結(jié)論

  通過(guò)實(shí)驗(yàn)證明,本文提出的Oracle數(shù)據(jù)庫(kù)重做日志的恢復(fù)方法能夠有效實(shí)現(xiàn)在Linux系統(tǒng)下非歸檔模式重做日志文件的恢復(fù),,實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)系統(tǒng)的故障恢復(fù),,提高數(shù)據(jù)庫(kù)系統(tǒng)的可用性。

  參考文獻(xiàn)

 ?。?] BRYLA B,LONEY K.Oracle database 11g DBA handbook[M].New York:McGrawHill,2007.

 ?。?] 王偉平.Oracle 11g網(wǎng)絡(luò)大講堂[M].北京:清華大學(xué)出版社,2013.

 ?。?] 賀亞茹.Oracle數(shù)據(jù)庫(kù)日志文件損壞時(shí)修復(fù)方法的實(shí)驗(yàn)研究[J].計(jì)算機(jī)應(yīng)用,,2009,29(S2):393395.

 ?。?]韋德強(qiáng).Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)策略[J].電腦知識(shí)與技術(shù),,2010,6(19):53675370.

 ?。?] 王良瑩.Oracle數(shù)據(jù)庫(kù)故障恢復(fù)技術(shù)剖析[J].電腦編程技巧與維護(hù),,2011,50(14):123124, 135.

 ?。?] 劉超,,張明安.基于Oracle數(shù)據(jù)庫(kù)系統(tǒng)的備份與恢復(fù)技術(shù)研究[J].軟件,2014,,35(3):125128.

 ?。?] 周文瓊,王樂(lè)球.Oracle數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程研究與實(shí)踐[J].軟件導(dǎo)刊,2011,,10(7):169171.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。