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:指定跳过表空间,如临时表空间,当然即使你不显式地指定跳过临时表空间,也不会对其进行恢复的,因为该表空间根本就没备份。
(3)打开数据库:
RMAN>alter database open;
上述操作是假设数据库在归档模式下进行的,如果是非归档模式的话,在执行RESTORE命令前,首先需要恢复之前备份的控制文件,并且在执行了 RESTORE 和RECOVER命令后,必须以OPEN RESETLOGS方式打开数据库。
3.2.恢复表空间和数据文件
执行表空间或数据文件级的恢复时,数据库既可以是MOUNT 状态,也可以是OPEN状态。从表空间和数据文件的自身特点来说,两者的恢复也非常类似,只不过数据文件相对来说粒度更细。下面分别对恢复表空间和恢复数据文件的步骤进行说明。
3.2.1 恢复表空间
在执行恢复之前,如果被操作的表空间未处于OFFLINE状态,必须首先通过 ALTERTABLESPACE .. OFFLINE语句将其置为脱机,操作步骤如下(假设这里的表空间名为rmantbs):
RMAN>SQL 'ALTER TABLESPACE rmantbs OFFLINE IMMEDIATE';
RMAN>RESTORE TABLESPACE rmantbs;
RMAN>RECOVER TABLESPACE rmantbs;
RMAN>SQL 'ALTER TABLESPACE rmantbs ONLINE';
3.2.2.恢复数据文件
恢复表空间实际就是恢复其所对应的数据文件(一个表空间可能对应多个数据文件),因此恢复数据文件的操作步骤与上极其相似。
同样在恢复操作之前,如果需要被恢复的数据文件未处于OFFLINE 状态,需要通过ALTER DATABASE DATAFILE ... OFFLINE 语句将其置为脱机。
操作步骤如下(假设要恢复的数据文件file_id为3):
RMAN>SQL 'ALTER DATABASE DATAFILE 3 OFFLINE';
RMAN> RESTORE DATAFILE 3;
RMAN> RECOVER DATAFILE 3;
RMAN>SQL 'ALTER DATABASE DATAFILE 3 ONLINE';
在执行 RESTORE/RECOVER操作指定数据文件时,既可以直接指定数据文件的详细路径,也可以以数据文件序号代替,上述操作就是指定数据文件的序号。
这是最简单的恢复,数据文件会被恢复到默认的位置。如果由于磁盘损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,必须在执行RESTORE命令之前,给数据文件指定新的路径,方式如下:
RMAN> RUN{
SET NEWNAME FOR DATAFILE 3 to '/oracle/oradata/newdb/sysaux01. dbf';
RESTORE DATAFILE 3;
SWITCH DATAFILE 3;
RECOVER DATAFILE 3;
}
同样,需要先将数据文件置为offline状态。
3.3.恢复归档日志文件
恢复归档文件也是使用RESTORE命令,如果只是为了在恢复数据文件后应用归档文件,那并不需要手动对归档文件进行恢复,RMAN 会在RECOVER的时候自动对适当的归档进行恢复。
3.4.恢复控制文件和spfile初始化参数文件
3.4.1.恢复控制文件
1. 从自动备份中恢复
由于没有了控制文件,目标数据库只能启动到NOMOUNT状态,不过在启动数据库之前,必须首先通过SET命令设置DBID:
RMAN> SET DBID=1024701925;
要获得目标数据库的DBID,使用RMAN登录目录数据库,最先输出的信息中就会显示出目标数据库的DBID;或者连接到目标端数据库之后,查询V$DATABASE视图也可以获得.
SQL> select dbid from v$database;
DBID
----------
1024701925
启动数据库到NOMOUNT状态:
RMAN> STARTUP NOMOUNT;
从自动备份中恢复控制文件,恢复至默认路径下:
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
执行上述语句后,备份集中的控制文件会被恢复到初始化参数CONTROL_FILES指定的路径下。
恢复至指定路径下:
RMAN> RESTORE CONTROLFILE to '/oracle/newdb/control01.ctl' FROM AUTOBACKUP;
执行上述语句后,控制文件被恢复到指定的路径下并以指定的名称命名,这条命令也可以在数据库OPEN时执行,只要被恢复的路径不是当前数据库控制文件所在路径就行。
2. 从备份集中恢复
从10g版本开始,RESTORE命令直接提供了FROM BACKUP子句,这样就可以直接从指定的备份片段中恢复控制文件(只要确保指定的备份集中包含控制文件),操作方式与前面的示例非常类似。
在启动数据库之前,必须首先通过SET命令设置DBID:
RMAN> SET DBID=1024701925;
启动数据库到NOMOUNT状态:
RMAN> STARTUP NOMOUNT;
执行RESTORE命令时指定控制文件所在备份片段的详细路径:
RMAN> RESTORE CONTROLFILE FROM '/oracle/backup/c-1415261003-20090413-00';
控制文件会被恢复到初始化参数CONTROL_FILES指定的路径下。
3.4.2.恢复初始化参数文件spfile
虽然可以通过BACKUP SPFILE命令手动备份服务器端的初始化参数文件,不过一般都不会主动执行,因为RMAN在备份控制文件时会自动备份SPFILE。
通过RMAN恢复初始化参数的过程与恢复控制文件极其类似。在启动数据库之前,必须首先通过SET命令设置DBID:
RMAN> SET DBID=1024701925;
启动数据库到NOMOUNT状态:
RMAN> STARTUP NOMOUNT;
执行恢复命令,将SPFILE恢复到默认路径下:
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
初始化参数文件默认保存在SORACLE_HOMEldatabase或$ORACLE_HOMEldb目录下,当然你也可以手动指定路径,既可以指定恢复到的路径,也可以同时指定备份文件的路径,例如:
RMAN> RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP;
或
RMAN>RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM '/data/orabackup/c-1415261003-20090413-00';
执行恢复操作时如果实例正在运行中,就不能覆盖当前的SPFILE,但可以通过TO子句将SPFILE恢复到其他路径下。
RMAN备份与恢复解决方案
本文2024-09-22 20:21:44发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-113143.html