恢復管理維護任務
這部分主要介紹一下如何管理維護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