场景:数据库服务器宕机,无法恢复
处理:使用备份资料进行异地恢复
1.此处环境为同平台、同版本(操作系统版本可以不同,但数据库版本需相同),源机器和目标机器具有相同的目录结构。
2.目标机器只需要安装oracle数据库软件,不创建数据库。
操作系统版本 : CentOS 6.5 x64
数据库版本 : Oracle 11.2.0.1 x64
3、启动数据库至nomount
1)复制pfile至$HOME/dbs/
cp /worktmp/wms/pfile_2022-10-18.ora $ORACLE_HOME/dbs/initorcl.ora
创建pfile内涉及的所有路径
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/app/oracle/fast_recovery_area
mkdir -p /u01/app/oracle/arch/
mkdir -p /u01/app/oracle/oradata/orcl
以pfile启动数据库至nomount
startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
以pfile创建spfile
create spfile from pfile;
关闭实例,再以spfile启动数据库至nomount
shutdown immediate;
startup nomount;
- 还原控制文件
RMAN> restore controlfile from '/worktmp/wms/c-1479196590-20221018-00';
- 启动数据库至mount
RMAN> sql 'alter database mount';
- 注册备份资料
RMAN>catalog start with '/u01/backup/';
- 还原数据库
RMAN> restore database;
- 检查备份资料
RMAN> list backup;
- 恢复数据库
RMAN> recover database
以OPEN RESETLOGS方式打开数据库
RMAN> sql 'alter database open resetlogs';
生成密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=Cqhkc_123 force=y
恢复listener.ora,重启数据库和监听。
**************************************
chown -R oracle:oinstall /u01
su oracle
mkdir -p /u01/app/oracle/oradata/YILIAO
mkdir -p /u01/app/oracle/admin/YILIAO/adump
mkdir -p /u01/app/oracle/arch
恢复spfile
rman target /
startup nomount
restore spfile from '/u01/backup/data/dbfull_20230901/control_c-4281347953-20230901-01';
恢复pfile 即initYILIAO.ora
sqlplus / as sysdba
create pfile from spfile;
startup nomount
恢复控制文件
rman target /
restore controlfile from '/u01/backup/data/dbfull_20230901/control_c-4281347953-20230901-01';
sql 'alter database mount';
向controlfile中注册rman信息。
catalog start with '/u01/backup/data/dbfull_20230901/';
不识别的文件选择NO
list backup; 查看备份
restore database;
数据量大的话可以多开几个通道:
run {
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
restore database;
switch datafile all;
recover database;
}
recover database;
RMAN-03002: failure of recover command at 10/10/2023 17:06:49
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 5204 and starting SCN of 17513607179
此错误的原因是恢复需要的日志记录在控制文件或恢复目录中找不到。解决方法分两种情况:
1.如果相关的日志存在且可用的话,就将此日志记录添加到控制文件或恢复目录中。
2.如果相关的日志已经被删除了或不可用了,那么就按照错误的提示scn将数据库恢复到此scn,本案例是17513607179。也就是说此时数据库只能进行不完全恢复了,在打开数据库时得使用resetlogs打开。
RMAN> recover database until scn 17513607179; 实际执行了这个运行正常,好像归档日志没恢复
或者:
recover database until sequence 5203
run{
set until sequence 5203;
recover database;
}
list backup of archivelog sequence=5204 查看
打开数据库,重新生成归档日志
alter database open resetlogs;
sql 'alter database open resetlogs';
恢复密码文件:
将拷贝过来的密码文件恢复至数据库对应目录下:
cp /u01/rman/orapworcl /u01/oracle/product/11.2.0.4/db_1/dbs/orapworcl
或者手动创建密码文件:
orapwdfile='/u01/oracle/product/11.2.0.4/db_1/dbs/orapworcl' password=oracle entries=30 force=y
注意:
nomount下进行恢复参数文件与控制文件
mount下恢复数据文件