恢复管理维护任务
这部分主要介绍一下如何管理维护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 timescn: 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 theresult 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 copiesCROSSCHECK 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 tooCROSSCHECK 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 logsLIST COPY; # lists only image copiesLIST BACKUP; # lists everything
删除指定的备份存储库记录和备份文件
DELETE BACKUPPIECE ;DELETE CONTROLFILECOPY /tmp/controlctl;DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = ;
批量删除
DELETE BACKUP; # deletes all backups on disk and tapeDELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt; # delete only from tapeDELETE COPY OF CONTROLFILE LIKE /tmp/%; # LIKE specifies name of the copyDELETE NOPROMPT ARCHIVELOG ALLBACKED 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)? yesRMAN: 警告: 由于状态不匹配 所以不能删除 对象 (对于 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_TAPEchannel ORA_SBT_TAPE_: WARNING: Oracle Test Disk APIusing channel ORA_DISK_crosschecked backup piece: found to be AVAILABLEbackup piece handle=/oracle/dbs/cesv__ recid= stamp=crosschecked backup piece: found to be AVAILABLEbackup piece handle=/oracle/dbs/c recid= stamp=
crosschecked backup piece: found to be AVAILABLEbackup piece handle=cerb__ recid= stamp=crosschecked backup piece: found to be AVAILABLEbackup piece handle=cerba__ recid= stamp=crosschecked backup piece: found to be AVAILABLEbackup piece handle=cerce__ recid= stamp=crosschecked backup piece: found to be AVAILABLEbackup 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 PiecesBP 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)? ydeleted backup piecebackup piece handle=/oracle/dbs/cesv__ recid= stamp=deleted backup piecebackup piece handle=/oracle/dbs/c recid=
stamp=deleted backup piecebackup piece handle=cerb__ recid= stamp=deleted backup piecebackup piece handle=cerba__ recid= stamp=deleted backup piecebackup piece handle=cerce__ recid= stamp=deleted backup piecebackup 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 backupsRMAN> 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 areaRMAN> CATALOG START WITH +disk; # catalog all files from an ASM disk groupRMAN> CATALOG START WITH /fs/datafiles/; # catalog all files in directory
从存储库目录删除记录
CHANGE ARCHIVELOG UNCATALOGCHANGE CONTROLFILECOPY /tmp/controlctl UNCATALOG;CHANGE DATAFILECOPY /tmp/systemdbf UNCATALOG;