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

OracleRMAN物理備份技術之管理維護

2013-11-13 22:20:26  來源: Oracle 

  恢復管理維護任務

  這部分主要介紹一下如何管理維護RMAN存儲庫和快速恢復區

  沒有恢復目錄的情況下如何管理RMAN存儲庫

  交叉驗證備份(CROSSCHECKING BACKUP)

  刪除備份

  利用RMAN刪除數據庫

  多個通道的情況下交叉驗證和刪除操作

  如何改變一個備份記錄的狀態

  歸檔日志目錄和手工拷貝

  修改RMAN存儲庫目錄

  維護快速恢復區

  沒有恢復目錄的情況下管理RMAN存儲庫

  備份控制文件

  如果沒有恢復目錄控制文件的備份更加重要要通過多個鏡像控制文件或者操作系統鏡像來備份變化了的控制文件另外最好要配置控制文件的自動備份

  CONTROLFILE AUTOBACKUP ON

  注意如果從自動備份或者其他備份恢復了控制文件最近執行的CONFIGURE配置內容將會被覆蓋回到備份時刻的設置

  監控控制文件記錄重寫

  沒有恢復目錄的情況下oracle的控制文件記錄了所有的歷史備份記錄為了保證控制文件不會無限制的增長oracle提供了一個可以設置控制文件保留時間的閥值的初始化參數CONTROL_FILE_RECORD_KEEP_TIME

  例如我們設置了CONTROL_FILE_RECORD_KEEP_TIME=任何超過天的紀錄都有可能被覆蓋如果沒有超過天的記錄oracle將擴展控制文件的大小如果由於受到操作系統的限制(比如磁盤空間滿)無法擴展控制文件的大小oracle會強制覆蓋最老的記錄並且在alterlog中記錄這一情況如下所示

  

  kccwnc: following controlfile record written over: RECID # Recno Record timestamp // :: Thread= Seq#= Backup set key: stamp= count= Low scn: xaff // :: Next scn: xafb // :: Resetlogs scn and time scn: x // :: Block count= Blocksize=

  快速恢復區Flash Recovery Area和控制文件記錄保存時間參CONTROL_FILE_RECORD_KEEP_TIME之間的相互作用

  如果我們在使用快速恢復區保留RMAN備份的話控制文件將記錄恢復區中文件的創建記錄因為一般來講文件創建的記錄要比執行備份的信息要晚如果有備份文件超過了CONTROL_FILE_RECORD_KEEP_TIME參數所規定的時間ORACLE試圖刪除這些這些文件否則ORACLE將增加控制文件的大小並且在alterlog中記錄這一情況如下所示

  

  kccwnc: tring to expand controlfile section nnnn for Oracle Managed Files

  如果無法擴展控制文件則alterlog中將出現以下信息

  

  WARNING: Oracle Managed File filename is unknown to controlfile This is the result of limitation in control file size that could not keep all recovery
area files

  也就是不能滿足備份的保留冗余策略來保存備份了

  為了避免和降低這種情況的發生我們可以采取以下措施

  使用K大小的塊創建控制文件如果想設置控制文件K大小的BLOCK我們必須首先把SYSTEM表空間設置成為大於或者等於控制文件使用的BLOCK SIZE修改了控制文件BLOCK_SIZE後必須重建控制文件

  使用BACKUP RECOVERY AREA命令備份快速恢復區使得快速恢復區的文件成為可以刪除的文件 或者減小備份保留時間或者減小備份保留冗余度維護控制文件中的RMAN備份存儲庫

  交叉驗證備份CROSESSCHECK BACKUPS

  驗證備份存儲庫中的備份記錄和磁盤(或者磁帶)上的備份文件是否一致如果用磁盤保存備份CROSSCHECK檢查文件頭是否有效如果用磁帶保存備份CROSSCHECK檢查文件是否存在備份文件的三種可能的狀態為AVAILABLE UNAVAILABLE and EXPIRED我們可以用LIST命令查看或者直接查詢V$BACKUP_FILESRC_DATAFILE_COPYRC_ARCHIVED_LOG等視圖

  給出幾個CORSSCHECK示例命令

  

  CROSSCHECK BACKUP; # checks backup sets proxy copies and image copies CROSSCHECK COPY OF DATABASE; CROSSCHECK BACKUPSET ; CROSSCHECK BACKUPPIECE TAG = nightly_backup; CROSSCHECK CONTROLFILECOPY /tmp/controlctl; CROSSCHECK DATAFILECOPY ; CROSSCHECK PROXY ;

  交叉驗證指定數據庫文件的備份

  

  # these CROSSCHECK commands use configured channels which means that they # always check the disk device If you configured an sbt channel then RMAN # checks the sbt device too CROSSCHECK BACKUP OF DATAFILE ora_home/oradata/trgt/systemdbf COMPLETED AFTER SYSDATE; CROSSCHECK BACKUP OF ARCHIVELOG ALL SPFILE;

  刪除備份

  刪除指定的備份

   先用LIST命令找到備份唯一標識

  

  LIST BACKUP OF DATABASE ARCHIVELOG ALL; # lists backups of db files and logs LIST COPY; # lists only image copies LIST BACKUP; # lists everything

   刪除指定的備份存儲庫記錄和備份文件

  

  DELETE BACKUPPIECE ; DELETE CONTROLFILECOPY /tmp/controlctl; DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = ;

  批量刪除

  

  DELETE BACKUP; # deletes all backups on disk and tape DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt; # delete only from tape DELETE COPY OF CONTROLFILE LIKE /tmp/%; # LIKE specifies name of the copy DELETE NOPROMPT ARCHIVELOG ALL BACKED UP TIMES TO sbt; # backs up only if already backed up X to tape

  刪除無效備份

  

  RMAN>CROSSCHECK BAKCUP; RMAN>DELETE EXPIRED BACKUP;

  刪除過期備份

  

  RMAN>DELETE OBSOLETE;

  如果沒有指定其他參數RMAN默認按照保留冗余策略找到過期備份後執行刪除等效於

  

  DELETE OBSOLETE REDUNDANCY = ;

  刪除過期備份也可以指定按照時間冗余策略來刪除例如

  

  DELETE OBSOLETE RECOVERY WINDOW OF DAYS;

  強制刪除備份

  如果沒有執行CROSSCHECK而磁盤上備份文件確實被刪除了我們執行刪除備份的時候會從RMAN收到錯誤提示如下

  

  RMAN> delete backup tag TAGT; 使用通道 ORA_DISK_ 備份段列表 BP 關鍵字 BS 關鍵字 Pc# Cp# 狀態 設備類型段名稱 AVAILABLE DISK D:\ORACLE\PRODUCT\\FLASH_R ECOVERY_AREA\ROME\BACKUPSET\__\O_MF_NNNDF_TAGT_
VXZTHG_BKP 是否確定要刪除以上對象 (輸入 YES 或 NO)? yes RMAN: 警告: 由於狀態不匹配 所以不能刪除 對象 (對於 DISK 通道) RMAN: 請用 CROSSCHECK 命令修正狀態 RMAN: 不匹配對象的列表 RMAN: ========================== RMAN: 對象類型 文件名/句柄 RMAN: RMAN: Backup Piece D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BA CKUPSET\__\O_MF_NNNDF_TAGT_VXZTHG_BKP 我們可以用帶有force參數的選項來強制刪除備份 RMAN> delete force backup tag TAGT; 使用通道 ORA_DISK_ 備份段列表 BP 關鍵字 BS 關鍵字 Pc# Cp# 狀態 設備類型段名稱 AVAILABLE DISK D:\ORACLE\PRODUCT\\FLASH_R ECOVERY_AREA\ROME\BACKUPSET\__\O_MF_NNNDF_TAGT_
VXZTHG_BKP 是否確定要刪除以上對象 (輸入 YES 或 NO)? yes 已刪除備份段 備份段 handle=D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME\BACKUPSET
\_ _\O_MF_NNNDF_TAGT_VXZTHG_BKP recid=
stamp= 對象已刪除

  多個通道執行交叉驗證和刪除備份

  在執行CROSSCHECK和DELETE之前可以配置或者手工分配多個通道RMAN將搜索和刪除在不同類型的設備上執行的備份文件適用以下情況

   用一個命令交叉驗證或者刪除在不同設備上備份的文件(例如磁帶和磁盤上都有備份文件)

   交叉驗證或者刪除工作在RAC環境下備份到每個節點上的備份文件

  RMAN如何在多通道下執行CROSSCHECK和DELETE

  舉個例子我們的備份文件全部在磁盤上磁帶上沒有備份文件而我們給出了如下備份腳本那麼RMAN將會執行前邊的兩個磁盤CROSSCHECK而不會執行第三條磁帶CROSSCHECK

  

  RUN {ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT SYS/oracle@
node; AlLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT SYS/oracle@node; ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt; CROSSCHECK BACKUP OF DATABASE; }

  注意如果RMAN標記為EXPIRED狀態的備份文件被修復後我們執行DELETE EXPIRED BACKUP命令後將會收到如下提示

  

  RMAN> delete expired backup; 使用通道 ORA_DISK_ 備份段列表 BP 關鍵字 BS 關鍵字 Pc# Cp# 狀態 設備類型段名稱 EXPIRED DISK D:\ORACLE\PRODUCT\\
FLASH_RECOVERY_AREA\ROME\BACKUPSET\__\O_MF_NNNDF_TAGT_
WFCYG_BKP 是否確定要刪除以上對象 (輸入 YES 或 NO)? yes RMAN: 警告: 由於狀態不匹配 所以不能刪除 對象 (對於 DISK 通道) RMAN: 請用 CROSSCHECK 命令修正狀態 RMAN: 不匹配對象的列表 RMAN: ========================== RMAN: 對象類型 文件名/句柄 RMAN: RMAN: Backup Piece D:\ORACLE\PRODUCT\\FLASH_RECOVERY_AREA\ROME
\BACKUPSET\__\O_MF_NNNDF_TAGT_WFCYG_BKP

  一個命令交叉驗證磁盤和磁帶備份的例子

  

  CONFIGURE DEVICE TYPE sbt PARALLELISM ; CONFIGURE DEFAULT DEVICE TYPE to sbt; CROSSCHECK BACKUP OF DATABASE;

  示例輸出文件如下

  

  allocated channel: ORA_SBT_TAPE_ channel ORA_SBT_TAPE_: sid= devtype=SBT_TAPE channel ORA_SBT_TAPE_: WARNING: Oracle Test Disk API using channel ORA_DISK_ crosschecked backup piece: found to be AVAILABLE backup piece handle=/oracle/dbs/cesv__ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=/oracle/dbs/c recid= stamp=
crosschecked backup piece: found to be AVAILABLE backup piece handle=cerb__ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=cerba__ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=cerce__ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=c recid= stamp=

  如果沒有配置磁帶備份設備也可以手工執行分配通道

  

  ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt; CROSSCHECK BACKUP OF DATABASE;

  RAC環境下交叉驗證的例子

  

  CONFIGURE DEVICE TYPE DISK PARALLELISM ; CONFIGURE CHANNEL DEVICE TYPE DISK CONNECT SYS/oracle@node_; CONFIGURE CHANNEL DEVICE TYPE DISK CONNECT SYS/oracle@node_; CROSSCHECK BACKUP;

  一個刪除磁帶和磁盤備份的例子

  

  CONFIGURE DEVICE TYPE sbt PARALLELISM ; CONFIGURE DEFAULT DEVICE TYPE TO sbt; DELETE BACKUPSET;

  示例輸出文件如下

  

  using channel ORA_SBT_TAPE_ using channel ORA_DISK_ List of Backup Pieces BP Key BS Key Pc# Cp# Status Device Type Piece Name AVAILABLE SBT_TAPE cerb__ UNAVAILABLE SBT_TAPE cerba__ AVAILABLE SBT_TAPE cerce__ AVAILABLE SBT_TAPE c AVAILABLE DISK /oracle/dbs/cesv__ AVAILABLE DISK /oracle/dbs/c
Do you really want to delete the above objects (enter YES or NO)? y deleted backup piece backup piece handle=/oracle/dbs/cesv__ recid= stamp= deleted backup piece backup piece handle=/oracle/dbs/c recid=
stamp= deleted backup piece backup piece handle=cerb__ recid= stamp= deleted backup piece backup piece handle=cerba__ recid= stamp= deleted backup piece backup piece handle=cerce__ recid= stamp= deleted backup piece backup piece handle=c recid= stamp=

  釋放多個通道如下命令可以釋放所有通道

  

  RELEASE CHANNEL;

  使用RMAN刪除數據庫

  RMAN連接到處於MOUNT狀態的TARGET數據庫就可以刪除TARGET數據庫而不需要連接恢復目錄如果RMAN同時連接到恢復目錄並且指定INCLUDE COPIES AND BACKUPS參數RMAN將刪除恢復目錄中的備份記錄

  生成備份文件目錄

  

  RMAN>catalog start with d:\oracle\product\\flash_recovery_area; RMAN> DELETE BACKUPSET; # deletes all backups RMAN> DELETE COPY; # delete all image copies (including archived logs) RMAN> DROP DATABASE; # delete all database files and unregister the database

  修改備份記錄的狀態

  

  CHANGE DATAFILECOPY /tmp/controlctl UNAVAILABLE; CHANGE COPY OF ARCHIVELOG SEQUENCE BETWEEN AND UNAVAILABLE; CHANGE BACKUPSET UNAVAILABLE; CHANGE BACKUP OF SPFILE TAG TAGT UNAVAILABLE; CHANGE DATAFILECOPY /tmp/systemdbf AVAILABLE; CHANGE BACKUPSET AVAILABLE; CHANGE BACKUP OF SPFILE TAG TAGT AVAILABLE;

  修改備份記錄狀態使得保留冗余策略外的備份不被刪除

  我們可以在執行備份的時候直接指定BACKUP……KEEP來把備份文件標記為長期備份有一點需要注意如果使用恢復目錄來存儲備份記錄的話我們應該執行BACKUP……KEEP FOREVER

  我們也可以用CHANGE命令來把一個備份標記為長期備份

  

  CHANGE BACKUPSET KEEP; CHANGE BACKUPSET NOKEEP; CHANGE DATAFILECOPY /tmp/systemdbf KEEP UNTIL SYSDATE+;

  維護存儲庫目錄

  如果我們的備份文件中一部分是其他RMAN程序產生的而我們的RMAN存儲庫中沒有這些備份的記錄我們可以用CATALOG命令來維護我們的備份記錄

  以下情況需要維護存儲庫的備份記錄

  我們利用其他命令(如系統命令等)產生了備份文件想把這些文件加入RMAN存儲庫

  利用備份控制文件執行恢復並且在恢復過程中改變了歸檔日志的路徑或者格式存儲庫中沒有恢復需要的歸檔日志文件我們必須把這些日志加入到RAMN存儲庫

  如果我們執行數據文件拷貝備份沒有LEVEL備份而我們又想直接可以執行LEVEL的增量備份我們可以通過增加RMAN存儲庫的目錄來實現雖然不建議這麼做但是的確可以

  數據庫版本升級開始使用RMAN我們可以把以前的熱備份文件等加入到RMAN存儲庫

  給幾個例子維護用戶備份文件到存儲庫目錄

  

  SQL> ALTER TABLESPACE users BEGIN BACKUP; % cp $ORACLE_HOME/oradata/trgt/usersdbf /tmp/usersdbf; SQL> ALTER TABLESPACE users END BACKUP; RMAN> CATALOG DATAFILECOPY /tmp/usersdbf; CATALOG BACKUPPIECE /disk/dtqd__ /disk/bdtqdou__;

  維護備份集到存儲庫目錄

  

  CATALOG BACKUPPIECE /disk/dtqd__ /disk/bdtqdou__;

  備份集文件加入到存儲庫目錄後可以在如下系統視圖查找

  

  V$BACKUP_PIECE V$BACKUP_SET V$BACKUP_DATAFILE V$BACKUP_REDOLOG and
V$BACKUP_SPFILE

  維護所有備份文件到存儲庫目錄

  

  RMAN> CATALOG RECOVERY AREA; # catalog all files in the recovery area RMAN> CATALOG START WITH +disk; # catalog all files from an ASM disk group RMAN> CATALOG START WITH /fs/datafiles/; # catalog all files in directory

  從存儲庫目錄刪除記錄

  

  CHANGE ARCHIVELOG UNCATALOG CHANGE CONTROLFILECOPY /tmp/controlctl UNCATALOG; CHANGE DATAFILECOPY /tmp/systemdbf UNCATALOG;


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