灾难恢复包括在整个目标数据库,恢复目录数据库,所有当前的控制文件,所有在线redo日志文件和所有参数文件丢失之后还原和恢复目标数据库。
1.灾难恢复的前提条件
使用RMAN执行灾难恢复之前必须满足某些前提条件。
必须拥有以下:
1)所有数据文件的备份
2)在你计划还原的最旧的备份的创建时间之后生成的所有归档redo日志
3)至少一个控制文件自动备份
4)数据库的DBID的记录
2.在灾难之后恢复数据库
假设数据库运行的Linux服务器已经损坏不能修复。幸运地你备份了数据库到Oracle Secure Backup和拥有的磁带是可用的。你可以通过这些备份恢复数据库。
灾难恢复的过程类似于在NOCATALOG模式下使用备份的控制文件恢复数据库的过程。如果还原数据库到一台新主机,那么检查“在新主机上还原数据库”章节中描述的考虑因素。
这个场景假设以下条件:
1)Oracle数据库已经安装在新主机上。
2)使用与旧主机相同的目录结构还原数据库到一台新Linux主机上。
3)你有一个磁带驱动器包含所有数据文件,到日志1124的归档redo日志,控制文件的自动备份和spfile的备份。
4)数据库没有使用恢复目录。
在新主机上恢复数据库:
1)确保已经满足灾难恢复的前提条件。
2)如果可能,还原或重建所有相关的网络文件比如tnsnames.ora和listener.ora和密码文件。
3)启动RMAN和连接到目标数据库。
在这个阶段,没有初始化参数文件存在。如果已经设置ORACLE_SID和ORACLE_HOME,那么可以使用操作系统认证作为SYSDBA或SYSBACKUP连接。
4)使用SET DBID指定目标数据库的DBID。
SET DBID 676549873;
5)运行STARTUP NOMOUNT命令。
当spfile不存在,RMAN尝试使用虚设的spfile启动实例。
6)分配通道到介质管理器,从自动备份中还原spfile。
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
RESTORE SPFILE FROM AUTOBACKUP;
}
7)使用还原的spfile重启实例。
STARTUP FORCE NOMOUNT;
8)编写一个命令文件来执行还原和恢复操作,然后执行这个命令文件。命令文件必须做以下操作:
a.分配通道给介质管理器。
b.还原控制文件自动备份
c.挂载还原的控制文件
d.使用CATALOG命令登记没有记录在仓库中的任何备份
e.还原数据文件到它们的原始位置。如果卷名已经更改,在还原操作前运行SET NEWNAME,在还原操作之后执行切换使用数据文件的新位置更新控制文件,如下例所示。
f.恢复数据文件。RMAN到达指定的日志序列号后停止恢复。
RMAN> RUN
{
# Manually allocate a channel to the media manager
ALLOCATE CHANNEL t1 DEVICE TYPE sbt;
# Restore autobackup of the control file. This example assumes that you have
# accepted the default format for the autobackup name.
RESTORE CONTROLFILE FROM AUTOBACKUP;
# The set until command is used in case the database
# structure has changed in the most recent backups, and you want to
# recover to that point in time. In this way RMAN restores the database
# to the same structure that the database had at the specified time.
ALTER DATABASE MOUNT;
SET UNTIL SEQUENCE 1124 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE;
}
以下示例显示相同的场景除了为还原的数据文件指定新的文件名称以外:
RMAN> RUN
{
# If you must restore the files to new locations,
# use SET NEWNAME commands:
SET NEWNAME FOR DATAFILE 1 TO ‘/dev/vgd_1_0/rlvt5_500M_1’;
SET NEWNAME FOR DATAFILE 2 TO ‘/dev/vgd_1_0/rlvt5_500M_2’;
SET NEWNAME FOR DATAFILE 3 TO ‘/dev/vgd_1_0/rlvt5_500M_3’;
ALLOCATE CHANNEL t1 DEVICE TYPE sbt;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
SET UNTIL SEQUENCE 124 THREAD 1;
RESTORE DATABASE;
SWITCH DATAFILE ALL; # Update control file with new location of data files.
RECOVER DATABASE;
}
9)如果恢复成功,那么打开数据库和重置在线日志:
ALTER DATABASE OPEN RESETLOGS;
来源:《Oracle Database Backup and Recovery User’s Guide,19c》