摘 要 在數(shù)據(jù)庫(kù)應(yīng)用領(lǐng)域中,Linux操作系統(tǒng)作為全世界范圍內(nèi)使用的操作系統(tǒng),大量企業(yè)都以該操作系統(tǒng)為基礎(chǔ)進(jìn)行數(shù)據(jù)庫(kù)的安裝平臺(tái)。對(duì)于數(shù)據(jù)庫(kù)的運(yùn)行,如果采用的模式為非歸檔模式,則在數(shù)據(jù)庫(kù)沒(méi)有進(jìn)行日志備份的情況下,對(duì)日志文件進(jìn)行重做,就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的運(yùn)行錯(cuò)誤。本文中,重點(diǎn)以O(shè)racle數(shù)據(jù)庫(kù)系統(tǒng)中的日志重做所導(dǎo)致的文件丟失,設(shè)計(jì)并驗(yàn)證了非歸檔模式下的數(shù)據(jù)庫(kù)重做日志恢復(fù)方法。實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的方法可以對(duì)重做日志進(jìn)行無(wú)備份恢復(fù)。
【關(guān)鍵詞】Oracle數(shù)據(jù)庫(kù) 非歸檔模式 日志恢復(fù) Linux操作系統(tǒng)
1 引言
作為當(dāng)前數(shù)據(jù)庫(kù)領(lǐng)域中已經(jīng)被廣泛應(yīng)用的大型關(guān)系型數(shù)據(jù)庫(kù),Oracle展現(xiàn)出了非常高的可用性,而在數(shù)據(jù)庫(kù)的運(yùn)行過(guò)程中,對(duì)數(shù)據(jù)庫(kù)中的日志文件進(jìn)行快速而準(zhǔn)確的恢復(fù),則對(duì)數(shù)據(jù)庫(kù)的高可用性就顯得非常重要。在本文中,基于Linux操作系統(tǒng),針對(duì)在非歸檔模式下進(jìn)行重做日志,所導(dǎo)致的文件丟失問(wèn)題進(jìn)行深入研究,設(shè)計(jì)了一種切實(shí)可行的恢復(fù)方法。已有的實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的方法可以有效實(shí)現(xiàn)非歸檔模式下的進(jìn)行日志重做的文件恢復(fù),從而有效提高數(shù)據(jù)庫(kù)的可用性。
2 重做日志概念簡(jiǎn)介
數(shù)據(jù)庫(kù)應(yīng)用中的重做日志文件,主要用于對(duì)數(shù)據(jù)庫(kù)中的表、索引進(jìn)行保存,或者對(duì)其他數(shù)據(jù)庫(kù)對(duì)象中的數(shù)據(jù)添加、刪除等進(jìn)行記錄。在Oracle數(shù)據(jù)系統(tǒng)中,采用循環(huán)的方法重做的日志文件,所以,在任何Oracle數(shù)據(jù)庫(kù)中,就至少會(huì)包含兩個(gè)重做日志文件。這樣,如果其中一個(gè)重做日志文件充滿重做日志條目時(shí),在系統(tǒng)需要進(jìn)行實(shí)例恢復(fù)的情況下,就可以將當(dāng)前的日志文件標(biāo)記為“激活”;如果不需要進(jìn)行實(shí)例恢復(fù)過(guò)程,則可以將其標(biāo)記為“凍結(jié)”;整個(gè)系統(tǒng)從文件的開始,就可以根據(jù)具體的序列來(lái)使用下一個(gè)日志文件,并將該日志文件標(biāo)記為“當(dāng)前狀態(tài)”。在現(xiàn)有的Oracle數(shù)據(jù)庫(kù)體系中,構(gòu)成其文件系統(tǒng)的內(nèi)容主要包括:數(shù)據(jù)文件、控制文件、重做日志文件以及歸檔日志文件等。
在具體的使用過(guò)程中,為了能夠使得整個(gè)系統(tǒng)可以正常運(yùn)行,就需要對(duì)整個(gè)系統(tǒng)中的數(shù)據(jù)庫(kù)日志文件進(jìn)行備份;這里,日志文件與其對(duì)應(yīng)的鏡像文件所記錄的日志信息相同,可以構(gòu)成系統(tǒng)中的日志文件組。而為了有效控制日志文件的安全性,則需要將相同組中的日志文件刻意存放到不同的磁盤中。在系統(tǒng)中的重做日志文件丟失的時(shí)間內(nèi),整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)可能難以正常使用,在此期間,如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)文件出現(xiàn)丟失的情況,則不會(huì)被及時(shí)恢復(fù),從而給系統(tǒng)用戶造成更大的損失。所以,只有有效提高系統(tǒng)中重做日志文件的安全性、冗余性,則對(duì)整個(gè)系統(tǒng)的穩(wěn)定非常重要。
3 數(shù)據(jù)庫(kù)系統(tǒng)日志恢復(fù)中存在的問(wèn)題
3.1 歸檔模式
Oracle數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行過(guò)程中,所能夠采用的模式主要胡歸檔模式和非歸檔模式。其中,數(shù)據(jù)庫(kù)的非歸檔模式,只能對(duì)數(shù)據(jù)庫(kù)中的實(shí)例失敗進(jìn)行保護(hù),不能針對(duì)數(shù)據(jù)庫(kù)中的存儲(chǔ)介質(zhì)失敗進(jìn)行保護(hù)。因此,為了能夠有效防范數(shù)據(jù)庫(kù)中物理文件的損壞所導(dǎo)致的數(shù)據(jù)丟失,需要將數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式下。在具體的使用與操作過(guò)程中,則有可能會(huì)由于DBA操作的錯(cuò)誤,則導(dǎo)致整個(gè)系統(tǒng)采用非歸檔模式來(lái)運(yùn)行,這樣,如果出現(xiàn)重做日志文件丟失的情況,就難以通過(guò)歸檔日志來(lái)恢復(fù)重做日志。
3.2 數(shù)據(jù)庫(kù)內(nèi)容的一致性檢查
在Oracle數(shù)據(jù)庫(kù)的啟動(dòng)過(guò)程中,當(dāng)啟動(dòng)過(guò)程執(zhí)行到對(duì)數(shù)據(jù)庫(kù)MOUNT狀態(tài)進(jìn)行裝載時(shí),則會(huì)對(duì)數(shù)據(jù)庫(kù)中的內(nèi)容一致性進(jìn)行檢查。而在重做日志丟失的情況下,就很難對(duì)數(shù)據(jù)的一致性進(jìn)行檢查;為了確保數(shù)據(jù)庫(kù)的恢復(fù)功能有效,就需要對(duì)系統(tǒng)的隱藏參數(shù)進(jìn)行修改,使數(shù)據(jù)庫(kù)在啟動(dòng)的過(guò)程中可以跳過(guò)一致性檢查過(guò)程。
3.3 系統(tǒng)用戶的身份驗(yàn)證
在Oracle的數(shù)據(jù)庫(kù)日志文件丟失的時(shí)間段內(nèi),數(shù)據(jù)庫(kù)不能正常啟動(dòng),也就難以對(duì)用戶的身份進(jìn)行驗(yàn)證。在這種情況下,對(duì)數(shù)據(jù)庫(kù)的操作,就需要基于系統(tǒng)的SYS用戶來(lái)實(shí)現(xiàn),并通過(guò)操作系統(tǒng)認(rèn)證的方式,來(lái)獲取SYS用戶的相應(yīng)權(quán)限。
4 數(shù)據(jù)庫(kù)中重做日志的恢復(fù)
4.1 恢復(fù)方法的說(shuō)明
在Linux操作系統(tǒng)環(huán)境中,對(duì)運(yùn)行在非歸檔模式出現(xiàn)故障的Oracle數(shù)據(jù)庫(kù)系統(tǒng),主要采用數(shù)據(jù)庫(kù)控制文件來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的恢復(fù)功能;同時(shí),還可以通過(guò)Linux操作系統(tǒng)中Oracle數(shù)據(jù)庫(kù)中相關(guān)隱藏參數(shù)值的修改,來(lái)跳過(guò)數(shù)據(jù)庫(kù)系統(tǒng)在啟動(dòng)過(guò)程中所進(jìn)行的一致性檢查,實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)的正常啟動(dòng),并在此基礎(chǔ)上通過(guò)resetlogs方法來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中重做日志文件 的恢復(fù)。
4.2 具體的實(shí)驗(yàn)過(guò)程
文中實(shí)驗(yàn)所采用的基礎(chǔ)環(huán)境為L(zhǎng)inux操作系統(tǒng)下的Oracle 11g R2數(shù)據(jù)庫(kù)系統(tǒng)。因此,由于Linux系統(tǒng)所采用的文件系統(tǒng)與常用的Windows系統(tǒng)的文件系統(tǒng)有差別,導(dǎo)致也其具體的恢復(fù)過(guò)程與Windows操作系統(tǒng)中的恢復(fù)過(guò)程存在差異。而為了能夠?qū)?shí)際中的重做日志恢復(fù)過(guò)程與效果進(jìn)行模擬,可以手動(dòng)刪除數(shù)據(jù)庫(kù)中的Yedo01.log、redo02.log、redo03.log等三個(gè)與日志相關(guān)的文件。在實(shí)際的操作中,最好能夠?qū)?shù)據(jù)文件進(jìn)行備份,防止在恢復(fù)失敗的情況下導(dǎo)致數(shù)據(jù)的丟失。在具體的實(shí)驗(yàn)過(guò)程中,還需要對(duì)常見的系統(tǒng)異常提示進(jìn)行及時(shí)處理。下面,對(duì)實(shí)驗(yàn)的具體操作進(jìn)行說(shuō)明如下:
(1)進(jìn)入系統(tǒng)命令終端,利用OSA方式從系統(tǒng)中獲得SYS用戶所對(duì)應(yīng)的權(quán)限,然后利用startup命令對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)程進(jìn)行啟動(dòng);
(2)考慮到當(dāng)前系統(tǒng)沒(méi)有重做日志文件,所以系統(tǒng)會(huì)提示用戶無(wú)法找到文件,在數(shù)據(jù)庫(kù)的啟動(dòng)過(guò)程中出現(xiàn)系統(tǒng)報(bào)錯(cuò)。在這種情況下,就需要通過(guò)命令查詢當(dāng)前數(shù)據(jù)庫(kù)的實(shí)例名、數(shù)據(jù)庫(kù)所采用的歸檔模式以及打開模式,確定當(dāng)前狀態(tài)所對(duì)應(yīng)的開戶模式,具體內(nèi)容如下:
SQL>select name log_mode from vMYM daLabase;
利用模式,所得到的查詢結(jié)果如下表中所示:
NAME LOG_MODE OPEN_MODE
ORCL NOARCHIVELOG MOUNTED
(3)在上面所得到的LOG_MODE其模式主要為NOARCHIVELOG模式。這樣,就充分說(shuō)明當(dāng)前數(shù)據(jù)庫(kù)處于非歸檔模式,同時(shí),就可以將當(dāng)前數(shù)據(jù)庫(kù)調(diào)整到MOUNT-ED模式。這樣,就可以借助于resetlogs方法,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的啟動(dòng),此過(guò)程中所輸入的命令具體為:
SQL>alder database open resetlogs;
(4)基于系統(tǒng)所給出的提示信息,如果系統(tǒng)數(shù)據(jù)庫(kù)中所選擇的方法為resetlogs方法,則應(yīng)該在完成對(duì)系統(tǒng)的恢復(fù)之前,需先對(duì)數(shù)據(jù)庫(kù)實(shí)施數(shù)據(jù)恢復(fù)。對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù)。在實(shí)際的實(shí)驗(yàn)過(guò)程中,考慮到數(shù)據(jù)庫(kù)環(huán)境中只有重做日志文件缺失,而其他控制文件則沒(méi)有丟失,則可以利用控制文件對(duì)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù);
(5)對(duì)于上面步驟中所產(chǎn)生的問(wèn)題,主要是由于在非歸檔模式下,系統(tǒng)會(huì)自動(dòng)進(jìn)行錯(cuò)誤提示,造成相關(guān)的歸檔日志的失效;不過(guò),在實(shí)際的具體應(yīng)用中,對(duì)數(shù)據(jù)庫(kù)的恢復(fù)過(guò)程主要通過(guò)控制文件來(lái)實(shí)現(xiàn),同時(shí),就可以再次采用resetlogs方法來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的日志恢復(fù)過(guò)程,系統(tǒng)在操作過(guò)程中所返回的異常則為:
ORA-01113:file 1 needs media recovery
ORA-0111:data file 1:'/usr/app/oracle oradata/orcl/system01.dbf'
(6)上面步驟中所產(chǎn)生的異常提示可以說(shuō)明,如果數(shù)據(jù)庫(kù)的恢復(fù)過(guò)程中采用了resetlogs的方法,則需要借助于恢復(fù)媒介才能實(shí)現(xiàn)。這里,考慮到數(shù)據(jù)庫(kù)中重做日志文件的缺失,則難以通過(guò)媒介來(lái)實(shí)現(xiàn)具體的恢復(fù)過(guò)程。所以,就有必要對(duì)數(shù)據(jù)庫(kù)中的隱藏參數(shù)進(jìn)行修改與調(diào)整,確保Oracle數(shù)據(jù)庫(kù)不會(huì)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)一致性進(jìn)行檢查。
(7)完成對(duì)上達(dá)參數(shù)的修改過(guò)程后,就可以通過(guò)數(shù)據(jù)庫(kù)強(qiáng)制重啟命令,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的重新啟動(dòng)。在啟動(dòng)過(guò)程中,所采用的命令為:
SQL>startup force mount
利用該重啟命令所返回的信息主要為:
……
Database mounted
(8)在數(shù)據(jù)庫(kù)裝載成功的基礎(chǔ)上,還可以采用resetlogs方法來(lái)完成數(shù)據(jù)庫(kù)恢復(fù)過(guò)程。隨后,系統(tǒng)會(huì)返回database altered信息,這就說(shuō)明數(shù)據(jù)庫(kù)的重做日志恢復(fù)過(guò)程完成。
(9)將系統(tǒng)中的_allow_resetlogs_corruption參數(shù)修改為系統(tǒng)所默認(rèn)的false,從而對(duì)數(shù)據(jù)啟動(dòng)的過(guò)程中,對(duì)數(shù)據(jù)的一致性進(jìn)行檢查。
(11)在對(duì)數(shù)據(jù)庫(kù)進(jìn)行重啟后,還需要對(duì)數(shù)據(jù)庫(kù)中的隱藏參數(shù)值進(jìn)行查詢修改;
(12)最后啟動(dòng)Oracle數(shù)據(jù)庫(kù)的歸檔模式,使數(shù)據(jù)庫(kù)的可用性得到有效提高。
獲得上面的返回信息后,就充分說(shuō)明當(dāng)前數(shù)據(jù)庫(kù)運(yùn)行在歸檔模式下,整個(gè)實(shí)驗(yàn)過(guò)程順利完成。
5 結(jié)論
實(shí)驗(yàn)結(jié)果表明,文中所設(shè)計(jì)和采用的Oracle數(shù)據(jù)庫(kù)重做日志恢復(fù)方法,可以對(duì)Linux操作系統(tǒng)下的非歸檔模式重做日志文件進(jìn)行恢復(fù),從而實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)系統(tǒng)中各類故障的恢復(fù),進(jìn)一步提高數(shù)據(jù)庫(kù)系統(tǒng)的可用性。
參考文獻(xiàn)
[1]王良瑩.Oracle數(shù)據(jù)庫(kù)故障恢復(fù)技術(shù)剖析[J].電腦編程技巧與維護(hù),2011,50(14):123-124,135.
[2]韋德強(qiáng).Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)策略[J].電腦知識(shí)與技術(shù),2010,6(19):5367-5370.
[3]賀亞茹.Oracle數(shù)據(jù)庫(kù)日志文件損壞時(shí)修復(fù)方法的實(shí)驗(yàn)研究[J].計(jì)算機(jī)應(yīng)用,2009,29(S2):393-395.
[4]周文瓊,王樂(lè)球.Oracle數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程研究與實(shí)踐[J].軟件導(dǎo)刊,2011,10(7):169-171.
[5]劉超,張明安.基于Oracle數(shù)據(jù)庫(kù)系統(tǒng)的備份與恢復(fù)技術(shù)研究[J].軟件,2014,35(03):125-128.
[6]葉瑞綿,王曉華,丁慧瑩.Oracle數(shù)據(jù)庫(kù)跨版本的升級(jí)實(shí)現(xiàn)[J].中國(guó)數(shù)字醫(yī)學(xué),2016(05).
[7]劉海霞.oracle數(shù)據(jù)庫(kù)外包服務(wù)訪問(wèn)控制的隱私保護(hù)研究[J].電子測(cè)試,2016(10).
[8]張標(biāo),金英.ORACLE性能調(diào)整[J].煤炭技術(shù),2007(02).
[9]宋霞.ORACLE疑難錯(cuò)誤解析[J].山東省農(nóng)業(yè)管理干部學(xué)院學(xué)報(bào),2007(06).
[10]李學(xué)忠.ORACLE數(shù)據(jù)庫(kù)的優(yōu)化使用[J]. 電子工藝技術(shù),2003(05).
作者簡(jiǎn)介
田彬(1981-),女,山西省靈石縣人。碩士研究生學(xué)歷。現(xiàn)為晉中師范高等??茖W(xué)校數(shù)理科學(xué)系講師。多年來(lái)一直從事計(jì)算機(jī)基礎(chǔ)、計(jì)算機(jī)應(yīng)用專業(yè)的教學(xué)、科研及應(yīng)用開發(fā)工作,精通Access、SQL server、ORACLE、Foxpro等多種數(shù)據(jù)庫(kù)語(yǔ)言。
作者單位
晉中師范高等??茖W(xué)校數(shù)理科學(xué)系 山西省晉中市 030600