RMAN实现异机恢复

使用RMAN工具进行异机恢复,依靠catalog知识库进行控制文件、数据文件、参数文件等的恢复。

Posted by caosw on December 12, 2018

RMAN实现异机恢复


1、源端进行全备

分别需要备份数据库、控制文件以及参数文件

backup database format '/home/oracle/backup/db_%d_%T_%U';
backup format '/home/oracle/backup/con_%s_%p' current controlfile; 
backup spfile format '/home/oracle/backup/spfile_%U.bak'; 

备份完成后将备份传送至目标端

2、目标端创建必须的目录

由于只安装了数据库软件未创建实例所以需要创建对应文件夹

[oracle@orcl backup]$ mkdir -p /u01/datafile
[oracle@orcl backup]$ mkdir -p /u01/arch
[oracle@orcl backup]$ mkdir -p /u01/app/oracle/oradata/orcl
[oracle@orcl backup]$ mkdir -p /u01/app/oracle/fast_recovery_area/orcl
[oracle@orcl backup]$ mkdir -p /u01/app/oracle/admin/orcl/adump
[oracle@orcl backup]$ mkdir -p /u01/app/oracle/admin/orcl/dpdump
[oracle@orcl backup]$ mkdir -p /u01/app/oracle/admin/orcl/pfile 

3、目标端设置DBID并启动到nomount状态

注:在rman下即使没有参数文件,默认也会启动一个DUMMY实例,以便能够恢复参数文件

[oracle@orcl backup]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Jan 14 11:27:37 2019
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database (not started)

RMAN> set dbid 1520751339
executing command: SET DBID

RMAN> startup nomount

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started
Total System Global Area    1068937216 bytes
Fixed Size                     2260088 bytes
Variable Size                281019272 bytes
Database Buffers             780140544 bytes
Redo Buffers                   5517312 bytes

4、从备份中恢复spfile参数文件

RMAN> restore spfile from '/home/oracle/backup/spfile_26tnahim_1_1.bak';

Starting restore at 2019/01/14 11:32:20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /home/oracle/backup/spfile_26tnahim_1_1.bak
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 2019/01/14 11:32:21

5、修改spfile文件并重新启动到nomount状态

复制spfile文件为pfile文件

[oracle@orcl dbs]$ cp spfileorcl.ora initorcl.ora
[oracle@orcl dbs]$ vi initorcl.ora 
orcl.__sga_target=2466250752
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=671088640
orcl.__streams_pool_size=33554432
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_dest_1='location=/u01/arch'
*.open_cursors=300
*.pga_aggregate_target=819986432
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2459959296
*.undo_tablespace='UNDOTBS1'

通过pfile文件将数据库启动到nomount状态

SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
ORACLE instance started.

Total System Global Area 2455228416 bytes
Fixed Size                  2255712 bytes
Variable Size             805307552 bytes
Database Buffers         1627389952 bytes
Redo Buffers               20275200 bytes

SQL> create spfile from pfile;
File created.

6、恢复控制文件并启动到mount状态

恢复控制文件

RMAN> restore controlfile from '/home/oracle/backup/con_68_1';

Starting restore at 2019/01/14 11:43:37
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=134 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/orcl/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
Finished restore at 2019/01/14 11:43:38

启动到mount状态

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

7、查看备份集开始恢复数据文件

查看备份集

RMAN> list backup of database;

恢复数据文件

RMAN> restore database ;

Starting restore at 2019/01/14 11:48:26
Starting implicit crosscheck backup at 2019/01/14 11:48:26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=134 device type=DISK
Crosschecked 16 objects
Finished implicit crosscheck backup at 2019/01/14 11:48:27

Starting implicit crosscheck copy at 2019/01/14 11:48:27
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2019/01/14 11:48:27

searching for all files in the recovery area
cataloging files...
no files cataloged

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/datafile/test.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/datafile/EPOINTOA9.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/datafile/ZW.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/db_ORCL_20190114_22tnahet_1_1
channel ORA_DISK_1: piece handle=/home/oracle/backup/db_ORCL_20190114_22tnahet_1_1 tag=TAG20190114T144900
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:17
Finished restore at 2019/01/14 11:50:44

在进行recover database的过程中由于缺少日志执行尽心不完全恢复

RMAN> recover database ;

Starting recover at 2019/01/14 11:54:44
using channel ORA_DISK_1

starting media recovery

unable to find archived log
archived log thread=1 sequence=348
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/14/2019 11:54:45
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 348 and starting SCN of 3514345

只能基于时间点进行恢复

RMAN> recover database until scn 3514345;

Starting recover at 2019/01/14 11:56:50
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2019/01/14 11:56:51

以resetlogs方式打开数据库

RMAN> alter database open resetlogs;
database opened

8、验证数据库是否恢复完毕

SQL> select name,open_mode from v$database;
NAME      OPEN_MODE
--------- --------------------
ORCL      READ WRITE