第七章RMAN恢复过程与方法
1.非归档模式恢复
非归档模式数据库恢复与归档模式下恢复相似,不同的是非归档模式下恢复只能使用冷备份,并且不能进行介质恢复(因为无归档日志);
非归档模式下,使用增量备份恢复案例;场景,非归档模式数据库trgt,使用了catalog,在星期日做了一次一致性关闭后的0级增量备份,后在星期三和星期五一致性关闭后做了1级差异增量备份;数据库在星期六出现介质故障,一半数据文件和redo日志损坏;恢复方法如下:
STARTUP FORCE NOMOUNT;
RESTORE CONTROLFILE; #
restore control file from consistent backup
ALTER DATABASE MOUNT;
RESTORE DATABASE; # restore
datafiles from consistent backup
RECOVER DATABASE NOREDO; # specify NOREDO because online redo logs are
lost
ALTER DATABASE OPEN RESETLOGS;
2.异机恢复
利用RMAN备份,在新主机上还原与恢复数据库;
1)准备工作
a.记录数据库DBID
b.确保新主机上初始化参数文件可用
c.确保新主机上备份集可用
2)还原恢复过程
假设场景:
A.主机hosta、hostb都是linux系统,且相互连通
B.Target
db:trgta(hosta),catalog:catdb
C.要还原和恢复到hostb,同时hosta上的trgta运行
D.Hostb与hosta的目录结构不同,分别是/net/hosta/dev3/oracle/dbs,/net/hostb/oracle/oradata/test
E.Trgta使用spfile
F.ORACLE_SID为trgta,还原后保持不变
G.已经记录trgta的DBID
H.介质管理器两台主机都可以访问
I.数据文件的备份在磁带上
J.必要的归档日志也已经备份
K.控制文件和spfile已经自动备份到磁带上
下面是执行过程:
a.Dfaf
% rman TARGET / NOCATALOG
SET DBID 1340752057;
STARTUP NOMOUNT
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS='...';
RESTORE SPFILE TO PFILE '?/oradata/test/inittrgta.ora' FROM AUTOBACKUP;
SHUTDOWN ABORT;
}
修改参数文件中有关目录位置,然后
STARTUP FORCE NOMOUNT
PFILE='?/oradata/test/inittrgta.ora';
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS='...';
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
}
% sqlplus '/ AS SYSDBA'
Run the following query in SQL*Plus:
SQL> COLUMN NAME FORMAT a60
SQL> SPOOL LOG 'db_filenames.out'
SQL> SELECT FILE# AS
"File/Grp#", NAME FROM V$DATAFILE
UNION
SELECT GROUP#,MEMBER FROM V$LOGFILE;
SQL> SPOOL OFF
SQL EXIT
RUN
{
# allocate a channel to the tape device
ALLOCATE CHANNEL c1 DEVICE TYPE sbt
PARMS='...';
# rename the datafiles and online redo logs
SET NEWNAME FOR DATAFILE 1 TO
'?/oradata/test/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO
'?/oradata/test/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 3 TO
'?/oradata/test/cwmlite01.dbf';
SET NEWNAME FOR DATAFILE 4 TO
'?/oradata/test/drsys01.dbf';
SET NEWNAME FOR DATAFILE 5 TO
'?/oradata/test/example01.dbf';
SET NEWNAME FOR DATAFILE 6 TO
'?/oradata/test/indx01.dbf';
SET NEWNAME FOR DATAFILE 7 TO
'?/oradata/test/tools01.dbf';
SET NEWNAME FOR DATAFILE 8 TO
'?/oradata/test/users01.dbf';
SQL "ALTER DATABASE RENAME FILE
''/dev3/oracle/dbs/redo01.log''
TO ''?/oradata/test/redo01.log'' ";
SQL "ALTER DATABASE RENAME FILE
''/dev3/oracle/dbs/redo02.log''
TO ''?/oradata/test/redo02.log'' ";
# Do a SET UNTIL to prevent recovery of the
online logs
SET UNTIL SCN 123456;
# restore the database and switch the
datafile names
RESTORE DATABASE;
SWITCH DATAFILE ALL;
# recover the database
RECOVER DATABASE;
}
EXIT
% rman TARGET
/ NOCATALOG
RMAN>
@reco_test.rman
RMAN> ALTER
DATABASE OPEN RESETLOGS;
3.控制文件恢复
利用自动备份的控制文件恢复数据库,无catalog,步骤如下:
CONNECT TARGET
/
STARTUP
NOMOUNT;
SET DBID
676549873;
RUN
{
# Optionally, set upper limit for eligible
time stamps of control file
# backups
# SET UNTIL TIME '09/10/2000 13:45:00';
# Specify a nondefault autobackup format only
if required
# SET CONTROLFILE AUTOBACKUP FORMAT FOR
DEVICE TYPE DISK
# TO
'?/oradata/%F.bck';
ALLOCATE CHANNEL c1 DEVICE TYPE sbt
PARMS='...'; # allocate manually
RESTORE CONTROLFILE FROM AUTOBACKUP
MAXSEQ 100 # start at sequence 100 and count
down
MAXDAYS 180; # start at UNTIL TIME and search back
6 months
ALTER DATABASE MOUNT DATABASE;
}
# uses
automatic channels configured in restored control file
RESTORE
DATABASE UNTIL SEQUENCE 13243;
RECOVER
DATABASE UNTIL SEQUENCE 13243; # recovers to latest archived log
ALTER DATABASE
OPEN RESETLOGS;
4.灾难恢复
灾难恢复是指当目标数据文件、参数文件、控制文件、在线日志文件、目录数据库文件等遭受灾难性毁灭情况下的恢复;要想完成灾难恢复最小的要求是有数据文件备份、有备份后的归档日志备份、有至少一份自动备份的控制文件;
灾难恢复基本过程:一还原参数文件,这样可以启动实例;二启动实例后还原控制文件,这样就可以mount数据库;三mount状态下,还原数据文件;四恢复数据库;五resetlog打开数据库;
灾难恢复基本命令如下:
#登录
% rman TARGET SYS/oracle@trgt
#还原参数文件spfile
# Set the DBID for the target database
RMAN> SET DBID 676549873;
RMAN> STARTUP FORCE NOMOUNT; # rman starts instance with dummy parameter
file
RUN
{
ALLOCATE CHANNEL t1 DEVICE TYPE sbt;
RESTORE SPFILE FROM AUTOBACKUP;
}
#还原控制文件、数据文件
RMAN> STARTUP FORCE NOMOUNT; # Restart
instance with restored server parameter file
RMAN> RUN
{
ALLOCATE CHANNEL t1 DEVICE TYPE sbt;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;#相同路径还原(如果路径不同需要SET NEWNAME)
SET
UNTIL SEQUENCE 1124 THREAD 1;
RESTORE DATABASE;(如果路径不同SWITCH DATAFILE ALL)
RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS; #
Reset the online logs after recovery completes
5.RMAN块介质恢复
BLOCKRECOVER可以执行坏块介质恢复;
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 19;
指定特定备份进行块恢复
#指定备份集还原
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 19 FROM BACKUPSET;
#指定镜像拷贝还原
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 19 FROM DATAFILECOPY;
#指定特定标签TAG还原
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 199 FROM TAG = mondayam;
#指定特定时间段的备份还原
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 19 RESTORE UNTIL 'SYSDATE-7';
#指定特定SCN段的备份还原
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13
DATAFILE 2 BLOCK 19 RESTORE UNTIL SCN 100;
#指定特定日志序号的还原
RMAN>BLOCKRECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 19 RESTORE UNTIL
SEQUENCE 7024;
#批量坏块还原
SQL> SELECT * FROM
V$DATABASE_BLOCK_CORRUPTION;
RMAN> BLOCKRECOVER CORRUPTION LIST
RESTORE UNTIL TIME 'SYSDATE-10';
6.RMAN恢复案例
案例1:异机还原数据文件镜像
RMAN>LIST COPY;
#复制数据文件镜像到目标机器上
% cp -r /tmp/*dbf
/net/new_host/oracle/oradata/trgt
#解除编目
RMAN>CHANGE COPY OF DATAFILE
1,2,3,4,5,6,7,8 UNCATALOG;
#重新编目(新地址)
RMAN>CATALOG START WITH
'?/oradata/trgt/';
或:
RMAN>CATALOG DATAFILECOPY
'?/oradata/trgt/system01.dbf', '?/oradata/trgt/undotbs01.dbf',
'?/oradata/trgt/cwmlite01.dbf', '?/oradata/trgt/drsys01.dbf',
'?/oradata/trgt/example01.dbf', '?/oradata/trgt/indx01.dbf',
'?/oradata/trgt/tools01.dbf', '?/oradata/trgt/users01.dbf';
#最后按照灾难恢复执行