程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle的Archive Log模式下的恢復工作

Oracle的Archive Log模式下的恢復工作

編輯:關於Oracle數據庫
  學習並測試了一下Oracle數據庫在開啟Archive Log模式下的恢復.
  
  系統是Win2K Server+Oracle 8.1.7.
  
  參考了Chinaunix.net和ITPub.com網站相關資料.在此感謝給我的幫助.
  
  注意,養成一個好的習慣非常重要.在開始恢復之前,以及恢復完成後,都要做一個系統全備份.
  
  首先,要開啟Archive Log歸檔日志模式
  
  1. 關閉數據庫
  
  2. 修改initSID.ora文件.這個文件通常在$ORACLE_HOME/admin/$ORACLE_SID目錄下或是在$ORACLE_HOME/database目錄下.
  
  log_archive_start = true
  log_archive_dest_1 = "location=F:oraclearchive"
  log_archive_format = "ORA_%S.arc"
  
  注意通常Windows版和Unix/Linux版的一些參數寫法有差異,請參照各自版本的技術文檔.
  
  3. 啟動數據庫到mount狀態
  
  startup mount
  
  這樣加載了數據庫文件,但是不打開數據庫.
  
  4. 檢查當前的Archive Log歸檔日志模式
  
  archive log list
  
  顯示的信息是:
  
  Database log mode       No Archive Mode
  Automatic archival       Disabled
  
  這時用下面的命令開啟數據庫的Archive Log模式
  
  alter database archivelog
  
  再次用"archive log list"顯示信息,應該是:
  
  Database log mode       Archive Mode
  Automatic archival       Enabled
  
  再用命令alter database open來打開數據庫.
  
  上面的工作完了以後,然後,我們可以來進行測試了.
  
  在測試之前,我們來熟悉一下這個歸檔日志Archive Log是什麼樣的.
  
  通過Sqlplus或Svrmgrl以sysdba身份連接到數據庫,執行"alter system switch logfile;"在我們指定的F:oraclearchive目錄下就可以看到歸檔日志了.
  
  文件名是我們指定的形同"ORA_0379.arc",其中0379是Oracle自動取的序號.在我們做
  
  最後,我們要來測試歸檔模式下的備份恢復有什麼不一樣.
  
  在非歸檔模式下,我們一般每天做一次數據庫備份(冷備份和熱備份的差別僅在於備份時數據庫是關閉的還是開啟的).這樣,我們就擁有了每天一個的備份點,換句話說,我們可以在數據庫崩潰的情況下,通過備份介質,將數據庫恢復到某一個備份點上.
  
  但是顯而易見,這樣的備份和恢復是不完全的,我們對於兩個備份點之間的數據是無法恢復的.
  
  而在開啟了歸檔模式的情況下,情況不一樣了.所有系統的REDO_log重做日志中提交的操作,均會在重做日志重復利用前被保存為歸檔日志保存下來,也就是說,所有用戶對於數據庫的每一個操作都被記錄在案.這樣.在維持我們原先的數據庫備份計劃的情況下,除了每天一個備份點之外,我們還擁有了沒兩個備份點之間的所有歷史操作記錄.
  
  這樣,結合每天的數據庫備份和歸檔日志以及在線重做日志,我們可以將數據庫精確恢復到數據庫崩潰前的那一時刻, 不會有數據丟失的情況發生.
  
  當然,這樣的前提是,數據庫備份和歸檔日志不能同時損壞或丟失.
  
  我們假設的環境是
  
  >> 假設有3個硬盤, C, D, E,系統在C盤, 數據文件在D盤,歸檔日志在E盤.控制文件,在線重做日志都有3組並復用,放在C盤,D盤和E盤.
  
  >> 現在的情況是我們保留有所有的歸檔日志,保留有5天前的備份磁帶(很不巧,由於種種原因,近5天的備份都沒有成功,不過幸運的是,在此期間系統及軟件配置都沒有更改).
  
  >> 硬盤D突然損壞了,數據庫崩潰了,所有人都無法連接到數據庫.
  
  >> 在本例中,我們只考慮了數據文件損壞, 假設所有的控制文件,重做日志都正常.
  
  我們現在要開始恢復工作了.
  
  >> 在聯系了硬件供應商後,我們的新硬盤到了,安裝上後,通過5天前的備份磁帶,恢復D盤上所有的文件.
  
  >> 通過Svrmgrl或Sqlplus以system用戶登錄到Oracle,
  
  >> 打開數據庫到mount狀態,"startup mount",這時,Oracle會提示數據庫文件損壞,需要修復
  
  >> 根據提示的文件,輸入命令"recover datafile 'D:OracleData01.dbf';
  
  >> Oracle將自動尋找所需要的歸檔日志和當前的Redo_log來恢復數據文件,我們只需要在每一個提示信息後按回車鍵確定應用所顯示的歸檔日志文件.恢復完成後,Oracle將有提示信息.
  
  >> 恢復完成後,可以嘗試用命令"alter database open"來打開數據庫,如果還是有數據文件損壞,Oracle將再次提示需要修復.只需要重復上面兩步操作.
  
  >> 重復操作,直至所有的數據文件都恢復.用命令"alter database open"來打開數據庫.
  
  這樣,我們就基本完成了歸檔模式開啟的情況下的數據庫恢復工作,在這種模式下,數據庫可以恢復到任一時刻(可以在應用歸檔日志文件恢復時取消以中斷恢復過程).而且,即便因意外而導致我們的每日數據庫備份沒有成功執行時,仍然可以通過幾天前的冷/熱備份+連續的歸檔日志文件來完成我們的數據庫恢復工作.
  
  另注, 可以直接通過命令"recover database" 來完成整個恢復過程,不過這樣感覺缺乏成就感.除非對備份或是自己的水平很有信心,否則不建議使用.
  
  以上測試通過.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved