设为首页 收藏本站
查看: 462|回复: 0

[经验分享] Oracle RMAN物理备份技术之管理维护

[复制链接]

尚未签到

发表于 2016-8-6 09:46:13 | 显示全部楼层 |阅读模式
恢复管理维护任务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  

  这部分主要介绍一下如何管理维护RMAN存储库和快速恢复区:  

  1、没有恢复目录的情况下如何管理RMAN存储库  

  2、交叉验证备份(CROSSCHECKING BACKUP)  

  3、删除备份  

  4、利用RMAN删除数据库  

  5、多个通道的情况下交叉验证和删除操作  

  6、如何改变一个备份记录的状态  

  7、归档日志目录和手工拷贝  

  8、修改RMAN存储库目录  

  9、维护快速恢复区  

  没有恢复目录的情况下管理RMAN存储库  

  备份控制文件:  

  如果没有恢复目录,控制文件的备份更加重要。要通过多个镜像控制文件或者操作系统镜像来备份变化了的控制文件。另外最好要配置控制文件的自动备份。  

  CONTROLFILE AUTOBACKUP ON  

  注意:如果从自动备份或者其他备份恢复了控制文件,最近执行的CONFIGURE配置内容将会被覆盖,回到备份时刻的设置。  

  监控控制文件记录重写:  

  没有恢复目录的情况下,oracle的控制文件记录了所有的历史备份记录,为了保证控制文件不会无限制的增长,oracle提供了一个可以设置控制文件保留时间的阀值的初始化参数:CONTROL_FILE_RECORD_KEEP_TIME.  

  例如我们设置了CONTROL_FILE_RECORD_KEEP_TIME=14,任何超过14天的纪录都有可能被覆盖,如果没有超过14天的记录,oracle将扩展控制文件的大小,如果由于受到操作系统的限制(比如磁盘空间满)无法扩展控制文件的大小,oracle会强制覆盖最老的记录并且在alter.log中记录这一情况。如下所示:  

kccwnc: following controlfile record written over:  

RECID #72 Recno 72 Record timestamp  

07/28/00 22:15:21  

Thread=1 Seq#=3460  

Backup set key: stamp=372031415, count=17  

Low scn: 0x0000.3af33f36  

07/27/00 21:00:08  

Next scn: 0x0000.3af3871b  

07/27/00 23:23:54  

Resetlogs scn and time  

scn: 0x0000.00000001  

08/05/99 10:46:44  

Block count=102400 Blocksize=512  


  快速恢复区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.  


  也就是不能满足备份的保留冗余策略来保存备份了。  

  为了避免和降低这种情况的发生,我们可以采取以下措施:  

  使用32K大小的块创建控制文件,如果想设置控制文件32K大小的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 1338, 1339, 1340;  

CROSSCHECK BACKUPPIECE TAG = 'nightly_backup';  

CROSSCHECK CONTROLFILECOPY '/tmp/control01.ctl';  

CROSSCHECK DATAFILECOPY 113, 114, 115;  

CROSSCHECK PROXY 789;  


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

# 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/system01.dbf"  

COMPLETED AFTER 'SYSDATE-180';  

CROSSCHECK BACKUP OF ARCHIVELOG ALL SPFILE;  


  删除备份  

  删除指定的备份:  

  1、 先用LIST命令找到备份唯一标识。  

LIST BACKUP OF DATABASE ARCHIVELOG ALL; # lists backups of db files and logs  

LIST COPY; # lists only image copies  

LIST BACKUP; # lists everything  


  2、 删除指定的备份存储库记录和备份文件。  

DELETE BACKUPPIECE 101;  

DELETE CONTROLFILECOPY '/tmp/control01.ctl';  

DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;  


  批量删除:  

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 3 TIMES TO sbt; # backs up only if already backed up 3X to tape  


  删除无效备份:  

RMAN>CROSSCHECK BAKCUP;  

RMAN>DELETE EXPIRED BACKUP;  


  删除过期备份:  

RMAN>DELETE OBSOLETE;  


  如果没有指定其他参数RMAN默认按照保留冗余策略找到过期备份后执行删除,等效于:  

DELETE OBSOLETE REDUNDANCY = 1;  


  删除过期备份也可以指定按照时间冗余策略来删除,例如:  

DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;  


  强制删除备份  

  如果没有执行CROSSCHECK,而磁盘上备份文件确实被删除了,我们执行删除备份的时候会从RMAN收到错误提示,如下:  

RMAN> delete backup tag 'TAG20070130T161822';   

  

使用通道 ORA_DISK_1   

  

备份段列表   

BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称   

------- ------- --- --- ----------- ----------- ----------   

110 115 1 1 AVAILABLE DISK D:/ORACLE/PRODUCT/10.2.0/FLASH_R   

ECOVERY_AREA/ROME/BACKUPSET/2007_01_30/O1_MF_NNNDF_TAG20070130T161822_
2VXZTH2G_.BKP   

  

是否确定要删除以上对象 (输入 YES 或 NO)? yes   

  

RMAN-06207: 警告: 由于状态不匹配, 所以不能删除 1 对象 (对于 DISK 通道)。   

RMAN-06208: 请用 CROSSCHECK 命令修正状态   

RMAN-06210: 不匹配对象的列表   

RMAN-06211: ==========================   

RMAN-06212: 对象类型 文件名/句柄   

RMAN-06213: --------------- -------------------------------------------------   

RMAN-06214: Backup Piece D:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ROME/BA   

CKUPSET/2007_01_30/O1_MF_NNNDF_TAG20070130T161822_2VXZTH2G_.BKP   

  

我们可以用带有force参数的选项来强制删除备份:   

  

RMAN> delete force backup tag 'TAG20070130T161822';   

  

使用通道 ORA_DISK_1   

  

备份段列表   

BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称   

------- ------- --- --- ----------- ----------- ----------   

110 115 1 1 AVAILABLE DISK D:/ORACLE/PRODUCT/10.2.0/FLASH_R   

ECOVERY_AREA/ROME/BACKUPSET/2007_01_30/O1_MF_NNNDF_TAG20070130T161822_
2VXZTH2G_.BKP   

  

是否确定要删除以上对象 (输入 YES 或 NO)? yes   

已删除备份段   

备份段 handle=D:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ROME/BACKUPSET
/2007_0 1_30/O1_MF_NNNDF_TAG20070130T161822_2VXZTH2G_.BKP recid=110
stamp=613239503 1 对象已删除  


  多个通道执行交叉验证和删除备份  

  在执行CROSSCHECK和DELETE之前可以配置或者手工分配多个通道,RMAN将搜索和删除在不同类型的设备上执行的备份文件。适用以下情况:  

  1、 用一个命令交叉验证或者删除在不同设备上备份的文件(例如磁带和磁盘上都有备份文件)。  

  2、 交叉验证或者删除工作在RAC环境下备份到每个节点上的备份文件。  

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

  举个例子,我们的备份文件全部在磁盘上,磁带上没有备份文件,而我们给出了如下备份脚本,那么RMAN将会执行前边的两个磁盘CROSSCHECK而不会执行第三条磁带CROSSCHECK.  

RUN  

...{ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT 'SYS/oracle@
node1';  

AlLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT 'SYS/oracle@node2';  

ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt;  

CROSSCHECK BACKUP OF DATABASE;  

}  


  注意:如果RMAN标记为EXPIRED状态的备份文件被修复后,我们执行DELETE EXPIRED BACKUP;命令后将会收到如下提示:  

RMAN> delete expired backup;  

  

使用通道 ORA_DISK_1  

  

备份段列表  

BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称  

------- ------- --- --- ----------- ----------- ----------  

112 117 1 1 EXPIRED DISK D:/ORACLE/PRODUCT/10.2.0/
FLASH_RECOVERY_AREA/ROME/BACKUPSET/2007_02_05/O1_MF_NNNDF_TAG20070205T113315_
2WF9CYG5_.BKP  

  

是否确定要删除以上对象 (输入 YES 或 NO)? yes  

  

RMAN-06207: 警告: 由于状态不匹配, 所以不能删除 1 对象 (对于 DISK 通道)。  

RMAN-06208: 请用 CROSSCHECK 命令修正状态  

RMAN-06210: 不匹配对象的列表  

RMAN-06211: ==========================  

RMAN-06212: 对象类型 文件名/句柄  

RMAN-06213: --------------- ------------------------------------------------  

RMAN-06214: Backup Piece D:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ROME
/BACKUPSET/2007_02_05/O1_MF_NNNDF_TAG20070205T113315_2WF9CYG5_.BKP  


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

CONFIGURE DEVICE TYPE sbt PARALLELISM 1;  

CONFIGURE DEFAULT DEVICE TYPE to sbt;  

CROSSCHECK BACKUP OF DATABASE;  


示例输出文件如下:  

allocated channel: ORA_SBT_TAPE_1  

channel ORA_SBT_TAPE_1: sid=12 devtype=SBT_TAPE  

channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API  

using channel ORA_DISK_1  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=/oracle/dbs/16c5esv4_1_1 recid=36 stamp=408384484  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=/oracle/dbs/c-674966176-20000915-01 recid=37 stamp=
408384496  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=12c5erb2_1_1 recid=32 stamp=408382820  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=13c5erba_1_1 recid=33 stamp=408382829  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=14c5erce_1_1 recid=34 stamp=408382863  

crosschecked backup piece: found to be 'AVAILABLE'  

backup piece handle=c-674966176-20000915-00 recid=35 stamp=408382869  


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

ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt;  

CROSSCHECK BACKUP OF DATABASE;  


  RAC环境下交叉验证的例子:  

CONFIGURE DEVICE TYPE DISK PARALLELISM 2;  

CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT 'SYS/oracle@node_1';  

CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT 'SYS/oracle@node_2';  

CROSSCHECK BACKUP;  


  一个删除磁带和磁盘备份的例子:  

CONFIGURE DEVICE TYPE sbt PARALLELISM 1;  

CONFIGURE DEFAULT DEVICE TYPE TO sbt;  

DELETE BACKUPSET;  


  示例输出文件如下:  

using channel ORA_SBT_TAPE_1  

using channel ORA_DISK_1  

  

List of Backup Pieces  

BP Key BS Key Pc# Cp# Status Device Type Piece Name  

------- ------- --- --- ----------- ----------- ----------  

388 387 1 1 AVAILABLE SBT_TAPE 12c5erb2_1_1  

397 396 1 1 UNAVAILABLE SBT_TAPE 13c5erba_1_1  

424 423 1 1 AVAILABLE SBT_TAPE 14c5erce_1_1  

428 427 1 1 AVAILABLE SBT_TAPE c-674966176-20000915-00  

433 432 1 1 AVAILABLE DISK /oracle/dbs/16c5esv4_1_1  

437 436 1 1 AVAILABLE DISK /oracle/dbs/c-674966176-
20000915-01  

  

Do you really want to delete the above objects (enter YES or NO)? y  

deleted backup piece  

backup piece handle=/oracle/dbs/16c5esv4_1_1 recid=36 stamp=408384484  

deleted backup piece  

backup piece handle=/oracle/dbs/c-674966176-20000915-01 recid=37
stamp=408384496  

deleted backup piece  

backup piece handle=12c5erb2_1_1 recid=32 stamp=408382820  

deleted backup piece  

backup piece handle=13c5erba_1_1 recid=33 stamp=408382829  

deleted backup piece  

backup piece handle=14c5erce_1_1 recid=34 stamp=408382863  

deleted backup piece  

backup piece handle=c-674966176-20000915-00 recid=35 stamp=408382869  


  释放多个通道,如下命令可以释放所有通道:  

RELEASE CHANNEL;  


  使用RMAN删除数据库  

  RMAN连接到处于MOUNT状态的TARGET数据库,就可以删除TARGET数据库,而不需要连接恢复目录;如果RMAN同时连接到恢复目录,并且指定INCLUDE COPIES AND BACKUPS参数,RMAN将删除恢复目录中的备份记录。  

  生成备份文件目录:  

RMAN>catalog start with 'd:/oracle/product/10.2.0/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/control01.ctl' UNAVAILABLE;  

CHANGE COPY OF ARCHIVELOG SEQUENCE BETWEEN 1000 AND 1012 UNAVAILABLE;  

CHANGE BACKUPSET 12 UNAVAILABLE;  

CHANGE BACKUP OF SPFILE TAG "TAG20020208T154556" UNAVAILABLE;  

CHANGE DATAFILECOPY '/tmp/system01.dbf' AVAILABLE;  

CHANGE BACKUPSET 12 AVAILABLE;  

CHANGE BACKUP OF SPFILE TAG "TAG20020208T154556" AVAILABLE;  


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

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

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

CHANGE BACKUPSET 231 KEEP;  

CHANGE BACKUPSET 231 NOKEEP;  

CHANGE DATAFILECOPY '/tmp/system01.dbf' KEEP UNTIL 'SYSDATE+180';  


  维护存储库目录  

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

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

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

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

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

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

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

SQL> ALTER TABLESPACE users BEGIN BACKUP;  

% cp $ORACLE_HOME/oradata/trgt/users01.dbf /tmp/users01.dbf;  

SQL> ALTER TABLESPACE users END BACKUP;  

RMAN> CATALOG DATAFILECOPY '/tmp/users01.dbf';  

  

CATALOG BACKUPPIECE '/disk2/09dtq55d_1_2', '/disk2/0bdtqdou_1_1';  


  维护备份集到存储库目录:  

CATALOG BACKUPPIECE '/disk2/09dtq55d_1_2', '/disk2/0bdtqdou_1_1';  


  备份集文件加入到存储库目录后可以在如下系统视图查找:  

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 '/fs1/datafiles/'; # catalog all files in directory  


  从存储库目录删除记录:  

CHANGE ARCHIVELOG ... UNCATALOG.  

CHANGE CONTROLFILECOPY '/tmp/control01.ctl' UNCATALOG;  

CHANGE DATAFILECOPY '/tmp/system01.dbf' UNCATALOG;  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253591-1-1.html 上篇帖子: oracle 数据库 表空间 段 范围 关系汇总 下篇帖子: 在多个节点上部署Oracle NoSQL数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表