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

Oracle備份與恢復案例一

2013-11-13 15:41:03  來源: Oracle 

   理解什麼是數據庫恢復
  
  當我們使用一個數據庫時總希望數據庫的內容是可靠的正確的但由於計算機系統的故障(硬件故障軟件故障網絡故障進程故障和系統故障)影響數據庫系統的操作影響數據庫中數據的正確性甚至破壞數據庫使數據庫中全部或部分數據丟失因此當發生上述故障後希望能重構這個完整的數據庫該處理稱為數據庫恢復恢復過程大致可以分為復原(Restore)與恢復(Recover)過程
  
  數據庫恢復可以分為以下兩類
  
  實例故障的一致性恢復
  
  當實例意外地(如掉電後台進程故障等)或預料地(發出SHUTDOUM ABORT語句)中止時出現實例故障此時需要實例恢復實例恢復將數據庫恢復到故障之前的事務一致狀態如果在在線後備發現實例故障則需介質恢復在其它情況Oracle在下次數據庫起動時(對新實例裝配和打開)自動地執行實例恢復如果需要從裝配狀態變為打開狀態自動地激發實例恢復由下列處理
  
  () 為了解恢復數據文件中沒有記錄的數據進行向前滾該數據記錄在在線日志
  
  包括對回滾段的內容恢復
  
  () 回滾未提交的事務按步重新生成回滾段所指定的操作
  
  () 釋放在故障時正在處理事務所持有的資源
  
  () 解決在故障時正經歷一階段提交的任何懸而未決的分布事務
  
  介質故障或文件錯誤的不一致恢復
  
  介質故障是當一個文件一個文件的部分或磁盤不能讀或不能寫時出現的故障文件錯誤一般指意外的錯誤導致文件被刪除或意外事故導致文件的不一致這種狀態下的數據庫都是不一致的需要DBA手工來進行數據庫的恢復這種恢復有兩種形式決定於數據庫運行的歸檔方式和備份方式
  
  () 完全介質恢復可恢復全部丟失的修改一般情況下需要有數據庫的備份且數據庫運行在歸檔狀態下並且有可用歸檔日志時才可能對於不同類型的錯誤有不同類型的完全恢復可使用其決定於毀壞文件和數據庫的可用性
  
  () 不完全介質恢復是在完全介質恢復不可能或不要求時進行的介質恢復重構受損的數據庫使其恢復介質故障前或用戶出錯之前的一個事務一致性狀態不完全介質恢復有不同類型的使用決定於需要不完全介質恢復的情況有下列類型基於撤消基於時間和基於修改的不完全恢復
  
  基於撤消(CANCEL)恢復在某種情況不完全介質恢復必須被控制DBA可撤消在指定點的操作基於撤消的恢復地在一個或多個日志組(在線的或歸檔的)已被介質故障所破壞不能用於恢復過程時使用所以介質恢復必須控制以致在使用最近的未損的日志組於數據文件後中止恢復操作
  
  基於時間(TIME)和基於修改(SCN)的恢復如果DBA希望恢復到過去的某個指定點是一種理想的不完全介質恢復一般發生在恢復到某個特定操作之前恢復到如意外刪除某個數據表之前
  
  第二章 數據庫恢復案例測試環境
  
   數據庫環境
  
  以下的所有案例都是通過測試經過環境為
  
  OSWindows Server
  
  DBOracle
  
  DBNAMETEST
  
  數據文件
  
  SQL> select file#statusenabledname from v$datafile;
  
  FILE# STATUS ENABLED   NAME
  
  
  
   SYSTEM READ WRITE D:\Oracle\ORADATA\TEST\SYSTEMDBF
  
   ONLINE READ WRITE D:\Oracle\ORADATA\TEST\RBSDBF
  
   ONLINE READ WRITE D:\Oracle\ORADATA\TEST\USERSDBF
  
   ONLINE READ WRITE D:\Oracle\ORADATA\TEST\TEMPDBF
  
   ONLINE READ WRITE D:\Oracle\ORADATA\TEST\TOOLSDBF
  
   ONLINE READ WRITE D:\Oracle\ORADATA\TEST\INDXDBF
  
  控制文件
  
  SQL> select * from v$controlfile;
  
  STATUS NAME
  
  
  
  D:\Oracle\ORADATA\TEST\CONTROLCTL
  
  D:\Oracle\ORADATA\TEST\CONTROLCTL
  
  D:\Oracle\ORADATA\TEST\CONTROLCTL
  
  聯機日志
  
  SQL> select * from v$logfile;
  
  GROUP# STATUS   MEMBER
  
  
  
     STALE   D:\Oracle\ORADATA\TEST\REDOLOG
  
          D:\Oracle\ORADATA\TEST\REDOLOG
  
     STALE   D:\Oracle\ORADATA\TEST\REDOLOG
  
   數據庫備份腳本
  
  冷備份腳本:
  
  rem   script:coldbaksql
  
  rem   creater:chenjiping
  
  rem   date:
  
  rem   desc:offline full backup database
  
  connect database
  
  connect internal/password;
  
  shutdown database
  
  shutdown immediate;
  
  Copy Data file
  
  !xcopy d:\Oracle\oradata\test\*dbf d:\database/H/R;
  
  Copy Control file
  
  !xcopy d:\Oracle\oradata\test\*ctl d:\database/H/R;
  
  Copy Log file
  
  !xcopy d:\Oracle\oradata\test\*log d:\database/H/R;
  
  startup database
  
  startup;
  
  說明
  
  以上腳本在數據庫關閉狀態下備份數據庫所有的數據文件聯機日志控制文件(在一個目
  
  錄下)如果成功備份所有文件是一致的;
  
  沒有備份參數文件參數文件可以另外備份沒有必要每次都備份只需要在改變設置後備份一次;
  
  如果以上命令沒有成功依次執行那麼備份將是無效的如連接數據庫不成功那麼肯定關閉數據庫也不成功那麼備份則無效;
  
  冷備份建議下人工干預下執行
  
  數據庫OS熱全備份腳本
  
  rem   script:hotbaksql
  
  rem   creater:chenjiping
  
  rem   date:
  
  rem   desc:backup all database datafile in archive
  
  connect database
  
  connect internal/password;
  
  archive
  
  alter system archive log current;
  
  start
  
  alter tablespace system begin backup;
  
  !xcopy d:\Oracle\oradata\test\systemdbf d:\databak/H/R;
  
  alter tablespace system end backup;
  
  alter tablespace rbs begin backup;
  
  !xcopy d:\Oracle\oradata\test\rbsdbf d:\databak/H/R;
  
  alter tablespace rbs end backup;
  
  alter tablespace users begin backup;
  
  !xcopy d:\Oracle\oradata\test\usersdbf d:\databak/H/R;
  
  alter tablespace users end backup;
  
  alter tablespace tools begin backup;
  
  !xcopy d:\Oracle\oradata\test\toolsdbf d:\databak/H/R;
  
  alter tablespace tools end backup;
  
  alter tablespace indx begin backup;
  
  !xcopy d:\Oracle\oradata\test\indxdbf d:\databak/H/R;
  
  alter tablespace indx end backup;
  
  end
  
  bak control file
  
  binary
  
  alter database backup controlfile to d:\databak\controlbinbak;
  
  ascii
  
  alter database backup controlfile to trace;
  
  alter system archive log current;
  
  說明
  
  熱備份必須在數據庫歸檔方式下才可以運行
  
  以上腳本可以在數據庫運行狀態下備份數據庫所有的數據文件(除了臨時數據文件)沒有必要備份聯機日志
  
  歸檔日志至少需要一次完整備份之後的所有日志
  
  如果以上命令沒有成功依次執行那麼備份也是無效的如連接數據庫不成功那麼備份則無效
  
  RMAN備份只講敘有恢復目錄的情況如果沒有恢復目錄情形大致相似以下是RMAN的熱備份全備份的腳本
  
  #  script:bakuprcv
  
  #  creater:chenjiping
  
  #  date:
  
  #  desc:backup all database datafile in archive with rman
  
  # connect database
  
  connect rcvcat rman/rman@back;
  
  connect target internal/virpure;
  
  # start backup database
  
  run{
  
  allocate channel c type disk;
  
  backup full tag dbfull format d:\backup\full%u_%s_%p database
  
  include current controlfile;
  
  sql alter system archive log current;
  
  release channel c;
  
  }
  
  # end

From:http://tw.wingwit.com/Article/program/Oracle/201311/17129.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.