首页 >>  正文

OracleRMAN物理备份技术之管理维护

来源:www.zuowenzhai.com    作者:编辑   日期:2024-06-15

   恢复管理维护任务

  这部分主要介绍一下如何管理维护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会强制覆盖最老的记录并且在alter log中记录这一情况 如下所示

  

  kccwnc: following controlfile record written over: RECID # Recno Record timestamp / / : : Thread= Seq#= Backup set key: stamp= count= Low scn: x af f / / : : Next scn: x af b / / : : 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将增加控制文件的大小并且在alter log中记录这一情况 如下所示

  

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

  如果无法扩展控制文件 则alter log中将出现以下信息

  

  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_FILES RC_DATAFILE_COPY RC_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/control ctl ; CROSSCHECK DATAFILECOPY ; CROSSCHECK PROXY ;

  交叉验证指定数据库文件的备份

  

  # these CROSSCHECK mands use configured channels which means that they # always check the disk device If you configured an *** t channel then RMAN # checks the *** t device too CROSSCHECK BACKUP OF DATAFILE ora_home/oradata/trgt/system dbf PLETED 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/control ctl ; DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = ;

  批量删除

  

  DELETE BACKUP; # deletes all backups on disk and tape DELETE BACKUP OF TABLESPACE users DEVICE TYPE *** t; # delete only from tape DELETE COPY OF CONTROLFILE LIKE /tmp/% ; # LIKE specifies name of the copy DELETE NOPROMPT ARCHIVELOG ALL BACKED UP TIMES TO *** t; # 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 TAG T ; 使用通道 ORA_DISK_ 备份段列表 BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称 AVAILABLE DISK D:\ORACLE\PRODUCT\ \FLASH_R ECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ 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_TAG T _ VXZTH G_ BKP 我们可以用带有force参数的选项来强制删除备份 RMAN> delete force backup tag TAG T ; 使用通道 ORA_DISK_ 备份段列表 BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称 AVAILABLE DISK D:\ORACLE\PRODUCT\ \FLASH_R ECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ BKP 是否确定要删除以上对象 (输入 YES 或 NO)? yes 已删除备份段 备份段 handle=D:\ORACLE\PRODUCT\ \FLASH_RECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ 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 *** t; 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_TAG T _ WF CYG _ 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_TAG T _ WF CYG _ BKP

  一个命令交叉验证磁盘和磁带备份的例子

  

  CONFIGURE DEVICE TYPE *** t PARALLELISM ; CONFIGURE DEFAULT DEVICE TYPE to *** t; 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/ c esv _ _ 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= c erb _ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle= c erba_ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle= c erce_ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=c recid= stamp=

  如果没有配置磁带备份设备 也可以手工执行分配通道

  

  ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE *** t; 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 *** t PARALLELISM ; CONFIGURE DEFAULT DEVICE TYPE TO *** t; 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 c erb _ _ UNAVAILABLE SBT_TAPE c erba_ _ AVAILABLE SBT_TAPE c erce_ _ AVAILABLE SBT_TAPE c AVAILABLE DISK /oracle/dbs/ c esv _ _ 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/ c esv _ _ recid= stamp= deleted backup piece backup piece handle=/oracle/dbs/c recid= stamp= deleted backup piece backup piece handle= c erb _ _ recid= stamp= deleted backup piece backup piece handle= c erba_ _ recid= stamp= deleted backup piece backup piece handle= c erce_ _ 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/control ctl UNAVAILABLE; CHANGE COPY OF ARCHIVELOG SEQUENCE BEEEN AND UNAVAILABLE; CHANGE BACKUPSET UNAVAILABLE; CHANGE BACKUP OF SPFILE TAG TAG T UNAVAILABLE; CHANGE DATAFILECOPY /tmp/system dbf AVAILABLE; CHANGE BACKUPSET AVAILABLE; CHANGE BACKUP OF SPFILE TAG TAG T AVAILABLE;

  修改备份记录状态使得保留冗余策略外的备份不被删除

  我们可以在执行备份的时候直接指定BACKUP……KEEP来把备份文件标记为长期备份 有一点需要注意 如果使用恢复目录来存储备份记录的话 我们应该执行BACKUP……KEEP FOREVER

  我们也可以用CHANGE命令来把一个备份标记为长期备份

  

  CHANGE BACKUPSET KEEP; CHANGE BACKUPSET NOKEEP; CHANGE DATAFILECOPY /tmp/system dbf KEEP UNTIL SYSDATE+ ;

   维护存储库目录

  如果我们的备份文件中一部分是其他RMAN程序产生的 而我们的RMAN存储库中没有这些备份的记录 我们可以用CATALOG命令来维护我们的备份记录

  以下情况需要维护存储库的备份记录

   我们利用其他命令(如系统命令等)产生了备份文件 想把这些文件加入RMAN存储库

   利用备份控制文件执行恢复并且在恢复过程中改变了归档日志的路径或者格式 存储库中没有恢复需要的归档日志文件 我们必须把这些日志加入到RAMN存储库

  如果我们执行数据文件拷贝备份 没有LEVEL 备份而我们又想直接可以执行LEVEL 的增量备份 我们可以通过增加RMAN存储库的目录来实现 虽然不建议这么做 但是的确可以

  数据库版本升级 开始使用RMAN 我们可以把以前的热备份文件等加入到RMAN存储库

  给几个例子 维护用户备份文件到存储库目录

  

  SQL> ALTER TABLESPACE users BEGIN BACKUP; % cp $ORACLE_HOME/oradata/trgt/users dbf /tmp/users dbf; SQL> ALTER TABLESPACE users END BACKUP; RMAN> CATALOG DATAFILECOPY /tmp/users dbf ; CATALOG BACKUPPIECE /disk / dtq d_ _ /disk / bdtqdou_ _ ;

  维护备份集到存储库目录

  

  CATALOG BACKUPPIECE /disk / dtq d_ _ /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/control ctl UNCATALOG; CHANGE DATAFILECOPY /tmp/system dbf UNCATALOG;

lishixinzhi/Article/program/Oracle/201311/18820





(编辑:慎古居)
联系方式:
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 作文摘要网