熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫的災難恢復

2013-11-12 23:40:02  來源: Oracle 

  隨著辦公自動化和電子商務的飛速發展企業對信息系統的依賴性越來越高數據庫作為信息系統的核心擔當著重要的角色尤其在一些對數據可靠性要求很高的行業如銀行證券電信等如果發生意外停機或數據丟失其損失會十分慘重為此數據庫管理員應針對具體的業務要求制定詳細的數據庫備份與災難恢復策略並通過模擬故障對每種可能的情況進行嚴格測試只有這樣才能保證數據的高可用性數據庫的備份是一個長期的過程而恢復只在發生事故後進行恢復可以看作是備份的逆過程恢復的程度的好壞很大程度上依賴於備份的情況此外數據庫管理員在恢復時采取的步驟正確與否也直接影響最終的恢復結果本文主要針對Oracle數據庫可能遇到的各種故障提供了相應的恢復的方法僅供大家參考
  
  要對Oracle數據庫備份與恢復有清晰的認識首先有必要對數據庫的幾種運行狀態有充分的了解Oracle數據庫的運行狀態主要分為他們依次為
  l Nomount(非安裝)Oracle只是讀取ini文件中的配置信息並初始化SGA區
  l Mount(安裝)Oracle除了需要讀取ini文件還要讀取控制文件並從中獲取有關數據庫的物理結構等信息
  l Open(打開)數據庫要檢查所有文件處於同一時間點對錯誤進行恢復對未完成事務回滾並最終可以允許用戶訪問
  
  數據庫的備份主要分為三種類型冷備份熱備份邏輯備份
  數據庫的備份不是本文討論的重點在這裡只作一個概要的介紹Oracle數據庫備份主要有
  l Cold Backup(冷備份) 主要指在關閉數據庫的狀態下進行的數據庫完全備份備份內容包括所有數據文件控制文件聯機日志文件ini文件
  l Hot Backup(熱備份) 指在數據庫處於運行狀態下對數據文件和控制文件進行備份要使用熱備份必須將數據庫運行在(Archive Log)歸檔方式下
  l Export(邏輯備份)這是最簡單的備份方法可按數據庫中某個表某個用戶或整個數據庫來導出並且支持全部累計增量三種方式使用這種方法數據庫必須處於打開狀態而且如果數據庫不是在restrict狀態將不能保證導出數據的一致性
  
  數據庫的恢復可分為兩大類完全恢復不完全恢復
  完全恢復指將數據庫恢復到發生故障的時間點不丟失任何數據不完全恢復指將數據庫恢復到發生故障前的某一個時間點此時間點以後的所有改動將會丟失如果沒有特殊需求我們建議應盡量使用完全恢復
  Oracle數據庫的恢復過程分兩步進行首先將把存放在重做日志文件中的所有重做運用到數據文件之後對重做中所有未提交的事務進行回滾這樣所有數據就恢復到發生災難那一時刻了數據庫的恢復只能在發生故障之前的數據文件上運用重做將其恢復到故障時刻而不能將數據文件反向回滾到之前的某一個時刻舉個例子我們有一個//的數據庫備份//使我們發現數據庫中數據發生混亂希望將數據庫恢復到//時的狀態我們只能先恢復//的數據庫備份然後在其上運用重做記錄使其前滾到//時的狀態而不能將//的數據庫向後回滾到//
  為了系統的設計數據庫的恢復方案我們先對可能遇到的錯誤進行分類Oracle數據庫錯誤主要分為大類
  l SQL語句失敗
  l 線程失敗
  l 實例失敗
  l 用戶操作失敗
  l 存儲設備失敗
  如果發生前三種失敗不需要我們人為干涉Oracle系統會自動進行恢復對於用戶操作型的失敗(如誤刪除數據)我們采取的補救措施主要有導入最新的邏輯備份或進行到某一時間點的不完全恢復從Oracle 之後的新版本中引入了基於表空間的時間點恢復(TSPITR)可以單獨將包含錯誤操作的表空間恢復到指定時間而不必對整個數據庫進行不完全恢復當錯誤操作發現比較及時而且數據量不大的情況下也可以考慮使用logminer生成反向SQL
  
  針對存儲設備的失敗的情況比較復雜也是本文討論的重點存儲設備的失敗必然會使放置在其上的文件變為不可用我們先將Oracle數據庫所涉及到的文件進行一個劃分主要可分為
  l Oracle的系統文件指Oracle的運行文件各種應用程序
  l 數據庫控制文件
  l 數據庫聯機重做日志文件
  l 數據文件
  l 歸檔日志文件
  避免第一種文件失敗主要依賴系統管理員進行操作系統級的備份當發生事故後只能依靠操作系統備份將其恢復
  控制文件中記錄著整個數據庫的結構每個數據文件的狀況系統SCN檢查點計數器等重要信息在創建數據庫時會讓用戶指定三個位置來存放控制文件他們之間互為鏡像當其中任何一個發生故障只需將其從ini文件中注釋掉故障數據文件就可重新將數據啟動當所有控制全部失效時可以在Nomount模式下執行create controlfile來重新生成控制文件但必須提供redo logdata file文件名和地址以及MAXLOGFILESMAXDATAFILESMAXINSTANCES等信息如果失敗之前運行過alter database backup controlfile to trace或alter database backup controlfile to xxx對控制文件作備份恢復時可使用生成的腳本來重建或用備份文件覆蓋如果使用了舊的控制文件在恢復時要使用recover xxx using backup controlfile選項來進行恢復並使用resetlogs選項來打開數據庫
  如果丟失的是聯機日志文件分兩種情況處理丟失的是非活動的日志文件丟失的是當前激活的日志文件
  如果是第一種情況而發生故障的日志文件組又具有多個成員可以先將數據庫shutdown然後用操作系統命令將損壞日志文件組中好的日志成員文件把損壞的成員文件覆蓋(在同一個日志成員組中的所有日志文件的各為鏡象的)如果其物理位置不可用可將其拷貝到新的驅動器上使用alter database rename file xxxx to xxxx改變文件位置之後啟動數據庫如果正常馬上進行一個冷備份如果損壞的日志組中只有一個日志成員先mount上數據庫將其轉換為noarchivelog模式執行alter database add logfile member xxx to group x給相關組增加一個成員再執行alter database drop logfile member bad_file將損壞的日志文件刪除由於數據庫的結構發生變動需要備份控制文件之後將數據庫改回archivelog模式做一個冷備份
  如果丟失的是當前激活的日志文件數據庫又沒有鏡像而且當前日志組中所有成員均變為不可用首先將數據庫shutdown abort從最近的一次全備份中恢復所有的數據文件將數據庫啟動到mount狀態如果原來的日志文件物理位置不可用使用alter database rename file xxx to xxx改變文件的存放位置然後使用recover database until cancel命令來恢復數據庫直到提示最後一個歸檔日志運用完之後輸入cancel之後用alter database open resetlogs打開數據庫如果沒有問題立即進行一個冷備份注意!所有包含在損壞的redo log中的信息將會丟失也就是說數據庫崩潰前已經提交的數據有可能會丟失這對於某些要求很高的應用將會損失慘重因此應盡量使每個日志組具有多個日志成員並且放置在不同的驅動器上一防止發生介質故障
  數據文件發生故障的情況也分為多種情況丟失包含在SYSTEM表空間的數據文件丟失沒有回滾段的非SYSTEM數據文件丟失有回滾段的非SYSTEM數據文件
  如果損壞的是系統表空間的數據文件唯一的辦法是從上一次備份中恢復受損的數據文件(如果原位置不可用使用alter database rename命令改變新文件的位置)之後在數據庫mount的狀態下執行recover database/datafile對數據庫進行回復才能將數據庫打開注意當SYSTEM表空間或其中的數據文件脫機數據庫是無法被打開的因此必須在mount狀態下將所有的恢復工作完成
  當丟失的數據文件不屬於系統表空間而且也不包含回滾段時有可選擇在數據庫的兩種狀態下進行恢復在數據庫open的狀態或者在數據庫mount的狀態如果用戶急於訪問數據庫中未受損部分的數據或對損壞的數據文件進行恢復需要很長時間可以先使受損的數據文件脫機將數據庫打開給用戶訪問再恢復受損的數據文件最後將其聯機步驟如下先在數據庫mount時將相關的數據文件或表空間進行脫機alter database datafile xxx offline然後將數據庫open這樣就能使數據庫未受損的部分先供用戶訪問之後再進行recover datafile/tablespace完成後用alter database datafile/tablespace xxx online使其恢復聯機就可被訪問了 當然用戶也可以選擇在數據庫mount狀態下用recover database/datafile將所有的恢復工作做完將所有數據文件一起打開供用戶訪問
  如果丟失的數據文件是最後一種情況即包含有回滾段的非系統表空間數據文件也可以選擇是在數據庫先open的狀態還是在mount狀態下恢復不過與上一種情況不同的是當包含回滾段的數據文件損壞時如果使其先offline將數據庫打開那麼所有數據庫崩潰前未提交的事務涉及到的表將無法訪問也就是說在回滾段恢復前其中涉及的對象都不允許被訪問而且當所有包含回滾段的數據文件都在offline狀態時數據庫無法進行任何DML操作因此在數據庫open狀態恢復包含回滾段的數據文件時可以先創建幾個臨時回滾段供數據使用create rollback segment temp tablespace system; alter rollback segment temp online;當數據文件恢復後再將他們刪除alter rollback segment temp offline; drop rollback segment temp;注意當用這種方法使恢復的數據文件online之後所有的原有回滾段將處於offline狀態必須手工使用alter rollback segment RBSxx online;使他們恢復聯機狀態這樣才能被數據庫正常使用如果在數據庫mount狀態下完成所有恢復則不需要上述步驟
  如果丟失數
From:http://tw.wingwit.com/Article/program/Oracle/201311/11196.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.