rman备份学习笔记
讲到rman就要讲到catalog,也就是恢复目录,这个东东我觉得没有太大的用,如果数据库没有打到open状态,恢复目录数据库根本连接不上。我个人建议可以不使用catalog数据库,当然为了全面的了解rman,还是要简单了解下catalog数据库是用来做什么的,catalog数据库是专门供rman使用,用来存储备份信息(不是存储备份文件)及备份脚本的地方。 如果我们不用catalog的时候,备份信息就存放在控制文件当中,这些备份信息是做恢复的时候需要用到的信息。 情景一:使用catalog数据库 1.创建catalog表空间 createtablespacerman_ts datafile rman_ts01.dbf size10m； 2.创建rman用户 create serrmanidentifiedbyrman defa lttablespacerman_ts temporarytablespacetemp q ota nlimitedonrman_ts 3.用户授权 grantrecovery_catalog_ownertorman grantreso rce,connecttorman 4.在目录数据库中创建恢复目录 rmancatalogrmanrman createcatalogtablespacerman_ts 这个时候我们就可以正常使用catalog数据库了,可以做下测试 [oracle@ora10~]$rmantargetcatalogrmanrman recoverymanager:release.0-prod ctiononth mar2815:05:0 copyright(c)1982,2007,oracle.allrightsreserved. connectedtotargetdatabase:qdyx(db) connectedtorecoverycatalogdatabase 情景二:不使用恢复目录 rmantarget 做个全备份 r n{ allocatechanneln1typedisk； allocatechanneln2typedisk； back pascompressedback psetdatabase format"disk01back pora10_%d_%s_%p"； releasechanneln1； releasechanneln2； } 做增量备份(差异增量) r n{ allocatechannelc1typedisk； back pincrementallevel0 format"disk01back prmanbakinc0_% _%t" database； releasechannelc1； } 备份数据文件 back pdatafile8； 备份表空间 back ptablespace sers； 备份归档日志 back parchivelogalldeleteallinp t； 备份数据库同时备份归档日志,并删除归档日志 back pascompressedback psetdatabasepl sarchivelogdeleteallinp t format"disk01back pora10_%d_%s_%p"； 注意:这里可以使用r n{}生成一段代码,定制一些参数就行备份,也可以直接使用默认参数备份。在备份时如果不指定备份的路径,则默认保存在flash_recovery_area目录下。 重点讲下恢复 1.恢复口令文件 口令文件丢失,会导致sys用户不能远程连接数据库。仅需要重建口令文件即可 orapwdfile=orapwqdyxpassword=xxxxx 2.恢复spfile rmanstart pnomo nt； rmanrestorespfilefroma toback p； rmanalterdatabaseopen； 记得开启控制文件的自动备份,这样在每次做备份时控制文件与初始化参数文件都会被自动备份。 3.恢复控制文件 rmanstart pnomo nt； rmanrestorecontrolfilefroma toback p； rmanalterdatabasemo nt； rmanrecoverdatabase； rmanalterdatabaseopenresetlogs； 4.恢复重做日志 sqlstart pmo nt； sqlrecoverdatabase ntilcancel； sqlalterdatabaseopenresetlogs； 注意:凡是resetlogs启动数据库后,之前的备份都将失效,需要重新做数据库全备。 5.恢复数据文件 rmansql"alterdatabasedatafile8offline"； rmanrestoredatafile8； rmanrecoverdatafile8； rmansql"alterdatabasedatafile8online"； 6.恢复表空间 rmansql"altertablespacepinooffline"； rmanrestoretablespacepino； rmanrecovertablespacepino； rmansql"altertablespacepinoonline"； 7.完全恢复 假定控制文件,数据文件,重做日志文件全部丢失,数据库崩溃； rmantarget rmanstart pnomo nt； rmanrestorecontrolfilefroma toback p； rmanalterdatabasemo nt； rmanrestoredatabase； sqlaltersystemset"_allow_resetlogs_corr ption"=tr escope=spfile； sqlsh tdownimmediate sqlstart pmo nt； sqlalterdatabaseopenresetlogs； 注意:这里有几个要注意的地方,当redolog丢失,数据库默认是不能进行recover的,可以通过在初始化参数中添加一个隐含参数强制打开数据库,跳过某些不一致检查。记得做一个数据库全备份。 一些常用的rman管理命令 1.查看备份集摘要信息 listback ps mmary； 2.查看备份集具体信息 listback p； 3.查看拷贝 listcopy； 4.查看某个数据文件备份 listback pofdatafile8； 5.查看某个表空间备份 listback poftablespacepino； 6.查看归档日志 listarchivelogall； 7.查看备份的归档日志 listback pofarchivelogall； 8.查看无效的备份集与归档日志 listexpiredback p； listexpiredarchivelogall； 9.删除无效的备份集与归档日志 deleteexpiredback p； deleteexpiredarchivelogall； 10.查看丢弃的备份集 reportobsolete； 11.删除丢弃的备份集 deleteobsolete； 注意:这里的丢充备份集是指按照备份保留策略已经超过备份窗口或者保留冗余数的备份集。 12.检查一致性 crosscheckarchivelogall； crosscheckback p； 注意:crosscheck的作用主要是用来检查备份是否还存在于存储介质上,如果存在则将控制文件中标记为a(avaible有效),如果不存在控制文件中标记为x(expired失效)。 13.查看全部数据文件 reportschema 14.查看默认配置参数 showall； rmantargetcatalogrmanrman 15.查看脚本 listscriptnames； 16.打印脚本内容 printscriptf llback 17.执行脚本 r n{exec tescriptf llback；} 通过脚本做rman增量备份(差异增量),备份计划如下: 星期日:0级增量 星期一:2级增量 星期二:2级增量 星期三:1级增量 星期四:2级增量 星期五:2级增量 星期六:2级增量 差异增量与累积增量的区别: 差异增量是备份自上次备份以来比自己级别低或者相同级别变化的数据块 累积增量是备份自上次备份以来比自己级别低变化的数据块 这样就比较好理解了,比如上面的备份计划就是一个差异备份,如果要恢复周四的数据,需要周日,周三再加上周四的备份就行了。累积增量备份相比差异增量多了一个c m lative的参数。 我们可以在homeoracle目录下存放三个脚本,分别是bakl0、bakl1、bakl2,然后通过编辑crontab-e来添加到定制任务。 bakl0内容如下: r n{ allocatechannelc1typedisk； back pincrementallevel0 format"disk01back prmanbaklev0_% _%t" database； releasechannelc1； } 其它的类似。 然后在crontab-e添加以下内容: 4523**0rmantargetmsglog=bakl0.logcmdfile=homeoraclebakl0 4523**1rmantargetmsglog=bakl2.logcmdfile=homeoraclebakl2 4523**2rmantargetmsglog=bakl2.logcmdfile=homeoraclebakl2 4523**3rmantargetmsglog=bakl1.logcmdfile=homeoraclebakl1 4523**4rmantargetmsglog=bakl2.logcmdfile=homeoraclebakl2 4523**5rmantargetmsglog=bakl2.logcmdfile=homeoraclebakl2 4523**6rmantargetmsglog=bakl2.logcmdfile=homeoraclebakl2 这样就可以实现一周的自动rman差异增量备份了,非常棒！