当前位置:文档之家› 基于Rman的备份与恢复

基于Rman的备份与恢复

基于Rman的测试为了配合公司产品的功能测试,特完成此文档(公司产品相关测试部分已剔除)。

本文档主要是介绍rman工具的基本使用,此处只做全库的备份,以及不完全恢复,数据库模式为归档模式。

1Rman工具的简单介绍Rman全称Recover Manager是oracle提供的一款备份恢复数据库或数据库组件(表空间、数据文件、控制文件以及参数文件等)的工具。

并且rman还可以对数据库的归档日志进行管理。

2 数据库备份与恢复Rman提供两种备份模式,一种是将备份数据信息写入到本地的控制文件中,另一种是恢复目录方式:这种方式是将备份数据库信息写入到本地控制文件和catalog(恢复目录)中,oracle推荐使用第二种方式。

Catalog一般创建在另外的一个数据库中,这样备份的数据库崩溃后不影响其恢复。

使用第一种方式,如果数据库崩溃,而且没有控制文件的备份,这种情况下就没有办法进行恢复操作。

这里使用恢复目录方式进行操作。

1)Catalog的创建恢复目录所在数据库为rmandb,创建的恢复目录为tsp_rman,连接用户为rman/rmana)创建恢复目录Create tablespace tsp_rmandatafile ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\SCHINATEST\rman01.DBF’ size 120m;b)创建用户Create user rman identified by rman;c)授权Grant connect, resource, recovery_catalog_owner to rman;2)连接到Rman使用以下命令进行rman工具的连接:连接时需要sysdba系统权限Rman sys/oracle@schinatest catalog rman/rman@rmandb说明:Schinatest是准备备份的目标数据库,rmandb是恢复目录数据库3)查看目标数据库的归档模式以dba用户登录oracle,查看目标数据库的归档模式:此处是归档模式SQL> archive log list;图 3.1 查看归档模式因为一般情况下,真正使用场景中的数据库都为归档模式,而且非归档模式下使用rman有一些限制,所以此处只做归档模式下的测试。

如果数据库是非归档模式,需改成归档模式。

4)注册目标数据库只有在恢复目录中注册的数据库才能进行备份与恢复操作,注册很简单,连接到rman工具后,使用register database命令进行注册即可5)配置Rman的使用参数使用show all命令显示rman的全部配置参数:图 5.1 参数显示这里只介绍测试中可能会用到的几个常用的配置参数CONFIGURE DEFAULT DEVICE TYPE TO DISK; 存放备份集的设备,默认是disk,可配置成磁带等其它存储设备CONFIGURE CHANN EL DEVICE TYPE DISK FORMAT '/…/oracle...%d_DB_%u_%s_%p';是配置备份文件的备份路径和备份格式CONFIGURE CONTROLFILE AUTOBACKUP OFF; 备份时是否对控制文件进行同时备份,默认否CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; 设置备份集的冗余数CONFIGURE DEVICE TYPE DISK PARALLELISM 4;指定默认的并行程度CONFIGURE BACKUP OPTIMIZATION ON;在配置中设置备份的优化6)备份数据库Rman支持单条命令的使用,同时也支持run程序块以及脚本的运行,例:单个执行RMAN>backup database;运行一个命令块RMAN> run {2> copy datafile 10 to3> '/oracle/prod/backup/prod_10.dbf';4> }脚本的使用不再举例备份数据库,使用以下命令进行备份:backup database plus archivelog;说明:此处是进行全库的备份。

Plus archivelog是指连同归档日志一起备份。

这种备份方式是防止因为归档日志不慎被删除,而导致数据库恢复失败的情况。

建议备份数据库时连同归档日志一起进行备份。

备份完成后,在目录D:\oracle\product\10.2.0\db_1\database(默认,可配置)会生成相应的备份集文件。

此处介绍几个常用的命令:List backupset; 显示该恢复目录下的所有备份集文件信息List backup summary; 以简要格式显示所有备份集信息Report obsolete; 显示过期的备份集图 6.1 显示过期的备份集文件Crosscheck backup; 检查备份集是否正确,不正确标记为expired(过期)。

过期的备份集可以进行删除。

图 6.2 检查过期的备份集Delete expired backup; 删除过期的备份集Delete backuppiece 101; 删除指定的备份集Delete backup completed before 'sysdate-30'; 删除一个月前的备份集(批量删除)此处介绍了几个平常经常使用的几个命令,其它命令包括delete命令的具体命令的使用方法请查看相关文档7)恢复数据库为了配合公司产品的使用,这里只做针对数据库的不完全恢复不完全恢复:将数据库恢复到备份时的那个状态完全恢复:将数据库恢复到备份时的状态,并读取重做日志和归档日志中的内容,最终将数据库恢复到数据库当前的状态一般场景下的恢复方式都是不完全恢复不完全恢复可以根据数据库的scn号,时间以及sequence号进行操作。

如:基于scn号的不完全恢复:run{set until scn 876221;restore database;recover database;};基于时间的不完全恢复:run{allocate channel t1 device type disk;set until time "to_date('2012-06-24 10:18:07','yyyy-mm-dd hh24:mi:ss')";restore database;recover database;}3 测试1)备份备份数据库时可指定备份路径和备份集格式,也可增加tag关键字,为备份集取一个别名.为了显示简洁,这里只使用最基本的备份命令.图 3.2.1 进行全库备份2)恢复图 3.4.1 显示备份集找到上一次备份集的scn号,此处做基于scn号的恢复。

可以看到上一次备份集的scn 号是2927303图 3.4.2 确定scn号基于scn号的不完全恢复,如下图:图 3.4.3 执行恢复脚本图中可以看到恢复时发生错误。

原因在于:做全库恢复时,目标数据库必须置于mount 状态。

如果恢复数据文件时,可以在数据库打开的情况下进行恢复,但恢复前必须将要恢复的数据文件置为offline状态。

关闭数据库,并置于Mount状态(rman窗口支持数据库级的命令操作,但为了显示的清楚,这里单独开一个sqlplus窗口进行数据库级的操作)图 3.4.4 startup mount重新连接rman,进行数据库恢复图 3.4.5 恢复成功3)更改数据库状态因为数据库处于mount状态无法访问,所以需要打开数据库。

因为进行的是不完全恢复,所以打开数据库时需要以resetlogs方式进行。

以该方式打开数据库会强制清空或重做日志文件,以前的归档日志无法再使用。

建议以resetlogs方式打开数据库后要进行一个全备份。

图 3.5.1 打开数据库4 Rman恢复说明因为此次恢复完毕之后数据库使用了resetlogs方式打开,所以再如果想恢复到以前的某个数据库状态,此时在rman中操作是会报错的。

因为每一次以resetlogs打开数据库之后,数据库会打开一个新的incarnation,resetlogs之后也就标志着此incarnation状态下的日志文件也不可再用,所以如果想恢复到之前的某个状态,数据库的incarnation也必须重置到以前的某个状态。

关于此处的原理,从网上找了一张图可以简要说明一下(图4.1):最初用户做了全备份,然后在10:17分删除emp表,又在10:18分删除scott用户。

首先将数据库恢复到恢复点1,恢复没有问题,此时数据库状态是3.恢复完之后再次打开数据库后,数据库状态变为4,这时想把数据库恢复到恢复点2,即想恢复删除掉的emp表,此时会发生错误。

因为此时数据库状态为4时,在此状态下已经没有日志文件可参考,所以无法恢复。

如果想恢复到10:17分的状态,需要把数据库状态置为3. 然后才可以恢复到10:17分的状态。

RMAN> reset database to incarnation 3; -- 将数据库状态置为3图 4.1 示例图查看此时数据库的incarnation列表:图 4.2 显示incarnation状态如果想恢复到以前的某个点,在确保归档日志存在的情况下,根据日期将db的状态重置到相对应的状态下,才能继续完成恢复的操作。

相关主题