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