ORACLE數據庫備份方法
2024-08-29 13:37:52
供稿:網友
 
             
  Oracle數據庫有兩類備份方法。第一類為物理備份,該方法實現數據庫的完整恢復,但數據庫必須運行在歸擋模式下(業務數據庫在非歸擋模式下運行),且需要極大的外部存儲設備,例如磁帶庫;第二類備份方式為邏輯備份,業務數據庫采用此種方式,                                                                                            此方法不需要數據庫運行在歸擋模式下,不但備份簡單,而且可以不需要外部存儲設備。
  數據庫邏輯備份方法
  ORACLE數據庫的邏輯備份分為三種模式:表備份、用戶備份和完全備份。
  表模式
  備份某個用戶模式下指定的對象(表)。業務數據庫通常采用這種備份方式。
  若備份到本地文件,使用如下命令:
  eXP icdmain/icd rows=y indexes=n comPRess=n buffer=65536
  feedback=100000 volsize=0
  file=exp_icdmain_csd_yyyymmdd.dmp 
  log=exp_icdmain_csd_yyyymmdd.log
  tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
  若直接備份到磁帶設備,使用如下命令:
  exp icdmain/icd rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=/dev/rmt0 
  log=exp_icdmain_csd_yyyymmdd.log
  tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
  注:在磁盤空間答應的情況下,應先備份到本地服務器,然后再拷貝到磁帶。出于速度方面的考慮,盡量不要直接備份到磁帶設備。
  用戶模式
  備份某個用戶模式下的所有對象。業務數據庫通常采用這種備份方式。
  若備份到本地文件,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=exp_icdmain_yyyymmdd.dmp
  log=exp_icdmain_yyyymmdd.log
  若直接備份到磁帶設備,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=/dev/rmt0
  log=exp_icdmain_yyyymmdd.log
  注:假如磁盤有空間,建議備份到磁盤,然后再拷貝到磁帶。假如數據庫數據量較小,可采用這種辦法備份。
  完全模式
  備份完整的數據庫。業務數據庫不采用這種備份方式。備份命令為:
  exp icdmain/icd rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0 full=y
  file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0) 
  log=exp_fulldb_yyyymmdd.log
  對于數據庫備份,建議采用增量備份,即只備份上一次備份以來更改的數據。增量備份命令:
  exp icdmain/icd rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0 full=y inctype=incremental
  file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0) 
  log=exp_fulldb_yyyymmdd.log
  注:關于增量備份必須滿足下列條件:
  1. 只對完整數據庫備份有效,且第一次需要full=y參數,以后需要inctype=incremental參數。
  2. 用戶必須有EXP_FULL_DATABASE的系統角色。
  3. 話務量較小時方可采用數據庫備份。
  4. 假如磁盤有空間,建議備份到磁盤,然后再備份到磁帶。
  業務數據庫備份方法及周期
  用EXP進行備份前,先在SYS用戶下運行CATEXP.SQL文件(假如以前已運行該文件,則不要執行這個腳本)。
  沒有非凡說明,不答應在客戶端執行備份命令。
  日結表數據備份
  每月備份一次。要備份的表為: 
  ALLSTAFFWORK_DAY_LOG
  ALLSTAFFWORK_DAYLOG   
  AUTOCALLLOG_DAYLOG
  LOCALZONE_DAYLOG
  SERVICEINFO_DAYLOG
  TELFEELOG_DAYLOG
  TSHANDLEREPLY_DAYLOG
  備份命令參照表模式下的備份命令。
                         
  業務相關表數據備份
  每周一、四備份。要備份的表為:
  Commoninformation
  ServiceInfo
  DealInfo
  AutoCallLog
  AutoFaxLog
  ServiceInfoAdd
  TelFeeLog
  備份命令參照表模式下的備份命令。
  從磁盤文件備份到磁帶
  假如首先備份到本地磁盤文件,則需要轉儲到磁帶設備上。
  1. 若需查看主機上配置的磁帶設備,使用如下命令:
  lsdev -Cc tape
  顯示的結果如下例所示:
  rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive
  rmt1 Defined   30-58-00-0,0 SCSI 4mm Tape Drive
  標明Available的設備是可用的磁帶設備。
  2. 若需查看磁帶存儲的內容,使用如下命令:
  tar -tvf /dev/rmt0
  顯示的結果如下例所示:
  -rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp
  假如顯示類似如下內容,則表示該磁帶存儲的備份數據是從數據庫直接備份到磁帶上,而非從本地磁盤轉儲到磁帶的備份文件,因此操作系統無法識別。
  tar: 0511-193 An error occurred while reading from the media.
  There is an input or output error.
  或
  tar: 0511-169 A Directory checksum error on media; -267331077 not equal to 25626.
  3. 對于新磁帶或無需保留現存數據的磁帶,使用如下命令:
  tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
  注:A. 該命令將無條件覆蓋磁帶上的現存數據。
     B. 文件名不答應包含路徑信息,如:/backup/exp_icdmain_yyyymmdd.dmp。
  4. 對于需要保留現存數據的磁帶,使用如下命令:
  tar -rvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
  注:該命令將文件exp_icdmain_yyyymmdd.dmp追加到磁帶的末端,不會覆蓋現存的數據。
  非凡強調:假如備份時是從數據庫直接備份到磁帶上,則不可再向該磁帶上追加復制任何其他文件,否則該備份數據失效。
  5. 若需將轉儲到磁帶上的備份文件復制到本地硬盤,使用如下命令:
  A. 將磁帶上的全部文件復制到本地硬盤的當前目錄
  tar -xvf /dev/rmt0
  B. 將磁帶上的指定文件復制到本地硬盤的當前目錄
  tar -xvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
  備份時間安排
  由于備份時對系統I/O有較大影響,所以,建議在晚上11點以后進行備份工作。
  業務數據庫Oracle版本的恢復
  恢復方案需根據備份方案確定。由于業務數據庫采用表備份和用戶備份相結合的方案,所以業務數據庫的恢復需根據實際情況采用表恢復和用戶恢復相結合的方案。
  恢復方案
  數據庫的邏輯恢復分為表恢復、用戶恢復、完全恢復三種模式。
  表模式
  此方式將根據按照表模式備份的數據進行恢復。
  A. 恢復備份數據的全部內容
  若從本地文件恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_csd_yyyymmdd.dmp
  log=imp_icdmain_csd_yyyymmdd.log
  若從磁帶設備恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
  log=imp_icdmain_csd_yyyymmdd.log
  B. 恢復備份數據中的指定表
  若從本地文件恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_csd_yyyymmdd.dmp
  log=imp_icdmain_csd_yyyymmdd.log
  tables=commoninformation,serviceinfo
  若從磁帶設備恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 
  file=/dev/rmt0
  log=imp_icdmain_csd_yyyymmdd.log
  tables=commoninformation,serviceinfo
  用戶模式
  此方式將根據按照用戶模式備份的數據進行恢復。
                         
  A. 恢復備份數據的全部內容
  若從本地文件恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_yyyymmdd.dmp
  log=imp_icdmain_yyyymmdd.log
  若從磁帶設備恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
  log=imp_icdmain_yyyymmdd.log
  B. 恢復備份數據中的指定表
  若從本地文件恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_yyyymmdd.dmp
  log=imp_icdmain_yyyymmdd.log
  tables=commoninformation,serviceinfo
  若從磁帶設備恢復,使用如下命令:
  imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n
  commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0
  log=imp_icdmain_yyyymmdd.log
  tables=commoninformation,serviceinfo
  完全模式
  假如備份方式為完全模式,采用下列恢復方法:
  若從本地文件恢復,使用如下命令:
  imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000