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