RMAN备份与恢复解决方案

1.RMAN备份
1.1.连接本地数据库
Windows环境连接
C:\>set ORACLE_SID=easdb
C:\>rman target /
Linux/unix环境连接
$ export ORACLE_SID=easdb
$ rman target /

windows与linux/unix环境除了连接时命令有所不同,进入RMAN后的命令都一致,因此后文不再分别讨论windows和linux/unix环境下的RMAN备份方法。
1.2.连接远程数据库
如果要连接的目标数据库是一个远程数据库,那么必须在建立连接时指定一个有效的网络服务名(Net Service Name),本地的tnsname.ora文件中必须已经建立了该网络服务名的正确配置,示例如下:

1.3.整库备份
RMAN> backup database;
执行这个命令后,将对目标数据库中的所有数据文件进行备份。该备份集生成了两个备份片段,一个存储数据文件,另一个存储控制文件和spfile(服务端初始化参数文件),默认存储到Oracle软件的安装目录中。
如果希望指定备份集的存储位置,通过format参数自定义备份片段的路径和命令规则,比如:
RMAN>backup database format '/oracle/backup/bak_%U';
如果想查看创建的全库备份,通过list命令来查看:
RMAN>list backup of database;
返回的内容指出备份集对应的备份片段保存位置。
1.4.备份表空间
只要实例启动并处于加载状态,无论数据库是否打开,都可以在RMAN中对表空间进行备份。例如,备份USERS表空间:

1.5.备份数据文件
从数据字典dba_data_files中可以查询到数据文件的名称(详细路径)与file_id:

下面通过backup datafile命令备份users表空间的数据文件:

也可以直接指定数据文件的file_id进行备份,如backup datafile 4;
如果要查看指定数据文件的备份,可以用如下命令:
RMAN> list backup of datafile n;
n=指定的数据文件序号,如果需要备份的数据文件有多个,n=多个序号,中间以逗号分隔即可。
1.6.备份控制文件
手动执行备份命令,例如:
RMAN>backup current controlfile;
或者指定include current controlfile子句

不仅限于database,执行backup命令备份任何文件时都可以指定include current controlfile子句。
除了手动备份控制文件的方法外,通过configure命令将controlfile autobackup设置为on,则rman做任何备份操作,都会自动对控制文件做备份。
RMAN>configure controlfile autobackup on;

1.7.归档文件的备份
利用backup archivelog命令备份
RMAN>backup archivelog all;
完成备份后,可以通过下列命令查看已备份的归档日志片段:
RMAN>list backup of archivelog all;
1.8.初始化参数文件的备份
通常在备份控制文件时,RMAN也会自动服务器端的初始化参数文件,并置于控制文件相同的备份片段中,因此极少需要单独对spfile进行备份。
单独备份的命令如下:
RMAN>backup spfile;
1.9.对备份集进行备份
备份备份集使用backup backupset命令,该命令直接复制当前的备份集,生成一个与原备份一样的新备份集。
备份所有备份集:
RMAN>backup backupset all;
备份指定的备份集:
RMAN>backup backupset n;
n=备份集ID,可以同时指定多个,相互间以逗号分隔即可。
2.备份策略
2.1.增量备份
如果数据运行于非归档模式下,那么只能在数据库干净关闭(以normal、immediate、transactional方式关闭)的情况下才能进行一致性的增量备份,如果数据库运行于归档模式下,那既可以在数据库关闭状态进行,也可以在数据库打开状态进行备份。
建立增量备份,实质就是指定参数incremental level=n,在执行backup命令时加上即可,增量备份可以创建两个级别,用整z型数字0…n表示(n最大不超过4)。所有增量备份都必须先创建0级备份,0级备份相当于数据库的完整备份。
建立增量级别0的全库备份:
RMAN>backup incremental level=0 database;
为数据文件user01.dbf建立增量级别1的备份:
RMAN>backup incremental level=1 datafile 4;
为表空间USERS建立增量级别1的备份:
RMAN>backup incremental level=1 tablespace users;
2.2.基于时间的备份保留策略
希望数据库最早能恢复到几天前
RMAN>configure retention policy to recovery window of n days;
n=大于0的正整数。
比如恢复时间段设为7,那么RMAN所保留的备份就是可以保证你将数据库恢复到一周内任何时刻下的那些文件。

2.3.基于冗余数量的备份保留策略
基于冗余数量实质上是某个数据文件以各种形式(包括备份集和镜像复制)存在的备份的数量。如果某个数据文件的冗余备份数量超出了指定数量,RMAN将废弃最旧的备份。
同样,基于数量的备份保留策略也是通过CONFIGURE命令设置,例如:
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY n;
也可以通过下列命令设置成不采用任何备份保留策略:
RMAN> CONFIGURE RETENTION POLICY TO NONE;
2.4.设置备份集属性
2.4.1.设置备份片段文件名
默认情况下执行BACKUP命令进行备份时不需要为备份片段指定名称,RMAN会自动为每个备份片段生成一个唯一的名称。之所于默认情况下也能确保生成的文件名唯一,是因为RMAN默认通道分配时指定了一个参数值为%F的 FORMAT参数。
FORMAT参数可以在执行备份命令时指定:
RMAN>backup tablespace users format ‘/oracle/backup/cn_%U’;
2.4.2.设置备份片段/备份集大小
RMAN 在分配通道时有一个参数MAXPIECESIZE,就是专门用来指定备份片段大小的,例如,备份SYSTEM表空间,指定单个备份片段最大不能超过10MB:
RMAN>run{
allocate channel c1 device type disk maxpiecesize=10m format 'bak_%U';
backup tablespace system;
}

使用LIST BACKUP OF TABLESPACE命令查看
RMAN>list backup of tablespace system;

不仅能够指定备份片段的大小,甚至连备份集的大小也可以指定,单个备份集的最大值可以在执行备份命令(或分配通道)时通过MAXSETSIZE参数指定,比如:
RMAN> BACKUP DATABASE MAXSETSIZE=100m;
MAXSETSIZE参数指定的是单个备份集的最大值,与备份片段无关,不过默认情况下,一个备份集对应一个备份片段,因此也相当于指定了备份片段的大小,但是直接指定MAXSETSIZE参数限定备份集大小并非在所有情况下都适用,如果要备份的数据文件中,任意一个数据文件超出了指定参数值,则备份就会失败(前面示例命令执行肯定失败,因为默认情况下SYSTEM表空间数据文件就接近300MB)。因此,对于在实际应用中需要限制生成文件大小的情况,更多还是会通过 MAXPIECESIZE参数限制备份片段,而不会直接限制备份集。
3.RMAN恢复
首先需要明确一点,RMAN中的恢复对应两个操作:数据库修复(Restore)和数据库恢复(Recover) 。
数据库修复(Restore):是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。RMAN在进行修复操作时,会利用恢复目录(没有建立恢复目录的话就使用目标数据库的控制文件)来获取备份信息,并从中选择最合适的备份进行修复操作。选择备份时有两个原则:①选择距离恢复目录时刻最近;②优先选择镜像复制,其次才是备份集。数据库修复在RMAN中对应RESTORE命令;
数据库恢复(Recover):是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分 REDO,将数据库恢复到指定的时间点。这里的恢复不是广义的恢复,而是特指恢复的操作命令,在 RMAN中对应RECOVER命令。
3.1.完全介质恢复
如果当前数据库只剩下控制文件和SPFILE,其他数据文件因为某些原因导致全部丢失,不过幸运的是之前创建过整库的备份,并且执行备份操作之后,所有的归档文件和重做日志文件都还在,这种情况下你就可以将数据库恢复到崩溃前那一刻的状态,而这种恢复方式,就叫做完全介质恢复。
执行完全介质恢复有以下三个步骤:
(1)启动数据库到加载状态:
RMAN> STARTUP MOUNT;
(2)执行恢复操作(恢复分两步,有先有后的):
RMAN>restore database;
RMAN>recover database delete archivelogs skip tablespace temp;
执行RECOVER命令时,附加的DELETE ARCHIVELOGS 和 SKIP TABLESPACE两个参数是可选参数,其作用如下:
DELETE ARCHIVELOGS:表示 RMAN将在完成恢复后自动删除那些在恢复过程中产生的归档日志文件,放心,它只删除那些由它产生的归档文件,至于执行RESTORE/RECOVER之前的归档它是不会动的。
SKIP TABLESPACE:指定跳过表空间,如临时表空间,当然即使你不显式地指定跳过临时表空间,也不会对其进行恢复的,因为该表空间根本就
RMAN备份与恢复解决方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



