《三思笔记》--读书笔记
通过rman执行数据库恢复可以分成三个部分解读:
(1),将数据库置于正确的状态:mount/open。一般整库恢复的话需要在mount状态操作,表空间或数据文件级的恢复也可以在open状态下操作。
(2),执行完全或不完全恢复。完全恢复就是应用所有数据库生成的重做日志,不完全恢复自然就是只应用部分重做日志,执行不完全恢复主要是通过执行restore/recover命令时,附加until子句来限制恢复到的时间点。
(3),打开数据库。如果恢复时执行的是不完全恢复,打开时必须指定resetlogs。
一、对数据库进行完全介质恢复
如果当前数据库只剩下控制文件和spfile,其他数据文件因为某些原因导致全部丢失,不过幸运的是之前创建过整库的备份,并且执行备份操作之后,所有的归档文件和重做日志文件都还在,这种情况下就可以将数据库恢复到崩溃前那一刻,这种恢复方式叫做完全介质恢复。
三个步骤:
(1),启动数据库到加载状态
startup mount;
(2),执行恢复操作(恢复分为2步,有先有后)
restore database;
recover database delete archivelogs skip tablespace temp;
执行recover命令时后面的delete archivelogs表示rman将在完成恢复后自动删除那些在恢复过程中产生的归档日志文件,他只删除那些由他产生的归档文件,至于执行restore/recover之前的归档不会动。
skip tablespace temp指定跳过表空间,如临时表空间
(3),打开数据库
alter database open;
上述操作是数据库在归档模式下进行的,如果是非归档模式的话,执行restore命令前,首先需要恢复之前备份的控制文件,并且在执行了restore和recover命令后,必须以open resetlogs方式打开数据库
rman备份的时候并不会备份临时表空间的数据文件,rman在执行整库恢复时,会自动创建临时表空间的数据文件
二、恢复表空间和数据文件
恢复表空间
在恢复之前,如果表空间未处于offline状态,需要使用alter tablespace ... offline置于脱机
sql 'alter tablespace cindy offline immediate ';
restore tablespace cindy;
recover tablespace cindy;
sql 'alter tablespace cindy online ';
如果有多个表空间,相互之间用逗号隔开,不过将表空间置为offline/online的时候,脚本不能合并
恢复数据文件
操作步骤同恢复表空间的命令,只是置于offline的命令不一样
alter database datafile cindy offline
如果由于磁盘损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,必须在执行restore命令之前,给数据文件指定新的路径,方式如下
run{
set newname for datafile 3 to 'f:\oracle\cindy.dbf';
restore datafile 3;
swich datafile 3;
recover datafile 3;
}
(三)恢复归档日志文件
恢复归档文件也是使用restore命令,如果只是为了在恢复数据文件后应用归档文件,那并不需要手动对归档文件进行恢复,rman会在recover的时候自动对适当的归档进行恢复
,可以精确指定恢复哪些备份的归档文件,例如,恢复归档序列号为20到30之间的归档文件
restore archivelog sequence between 20 and 30;
默认情况下,rman将归档文件恢复到初始化参数log_archive_dest_1的路径下
可以手动设置其他路径,同一个run块中允许同时出现多个set archivelog命令
run{
set archivelog destination to 'F:\ORACLE\BACKUP\ARCLOG1';
restore archivelog sequence between 35 and 40;
set archivelog destination to 'F:\ORACLE\BACKUP\ARCLOG2';
restore archivelog sequence between 41 and 50;
set archivelog destination to 'F:\ORACLE\BACKUP\ARCLOG3';
restore archivelog sequence between 51 and 60;
}
恢复控制文件和spfile初始化参数文件
1,从自动备份中恢复
由于没了控制文件,目标数据库只能启动到nomount状态,不过在启动数据库之前,必须首先通过set命令设置dbid
set dbid = 4252637343;
启动数据库到nomount状态
startup nomount;
从自动备份中恢复控制文件
恢复到默认路径下
restore controlfile from autobackup;
恢复到指定路径下
restore controlfile to 'f:\oracle\control01.ctl' from autobackup;
这条命令也可以在数据库open时执行,只要被恢复的路径不是当前数据库控制文件所在路径就行
2,从备份集中恢复
从10g开始,restore直接提供了from backup子句,这样就可以直接从指定备份片段中恢复控制文件(只要确保指定的备份集中包含控制文件),操作方式与之前的示例非常类似
在启动数据库之前需要先设置DBID
set dbid = 4252637343;
启动数据库到nomount状态
startup nomount;
指定restore命令时指定控制文件所在备份片段的详细路径
restore controlfile from 'f:\oracle\backup\c-4252637343-20090413-00';
这里也可以指定恢复的路径
恢复服务器端初始化参数文件
这个恢复和控制文件的恢复类似
在启动数据库之前需要先设置DBID
set dbid = 4252637343;
启动数据库到nomount状态
startup nomount;(sqlplus中无法启动到nomount,但是rman中可以)
restore spfile from autobackup;
或者指定路径
restore spfile to '/tmp/spfiletemp.ora' from autobackup;
或者从指定备份文件路径恢复
restore spfile to '/tmp/spfiletemp.ora' from ‘/u02/data/backup/c-4252637343-20090413-00'; ;