Restore Oracle database to another server

时间:2022-01-23 16:33:07

1. Copy or remotely mount the backupset folder from the source server to the target server

2. On the target server, export ORACLE_SID as same as the source database and run "rman target /"

3. Restore spfile from backup:

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/dbhome_1/dbs/initorcl01.ora'

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started

Total System Global Area 158662656 bytes

Fixed Size 2211448 bytes
Variable Size 88080776 bytes
Database Buffers 62914560 bytes
Redo Buffers 5455872 bytes

RMAN> restore spfile from '/u01/app/remote/flash_recovery_area/ORCL01/backupset/2014_10_01/o1_mf_ncsn1_TAG20141001T011809_b2q3ojl8_.bkp';

Starting restore at 27-OCT-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/app/remote/flash_recovery_area/ORCL01/backupset/2014_10_01/o1_mf_ncsn1_TAG20141001T011809_b2q3ojl8_.bkp
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 27-OCT-14

4. Open another ssh session, export ORACLE_SID and run "sqlplus / as sysdba" and create pfile from spfile:

[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 27 10:34:57 2014

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile from spfile;

File created.

SQL> exit

5. Review the pfile just created and mkdir all the file dests:

[oracle@localhost dbs]$ cat initorcl01.ora
orcl01.__db_cache_size=188743680
orcl01.__java_pool_size=4194304
orcl01.__large_pool_size=4194304
orcl01.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl01.__pga_aggregate_target=272629760
orcl01.__sga_target=515899392
orcl01.__shared_io_pool_size=0
orcl01.__shared_pool_size=306184192
orcl01.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/orcl01/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl01/control01.ctl','/u01/app/oracle/flash_recovery_area/orcl01/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl01'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl01XDB)'
*.memory_target=787480576
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
[oracle@localhost dbs]$ mkdir -p /u01/app/oracle/admin/orcl01/adump

[oracle@localhost dbs]$ mkdir -p /u01/app/oracle/oradata/orcl01

[oracle@localhost dbs]$ mkdir -p /u01/app/oracle/flash_recovery_area/orcl01

6. In the RMAN session, restore the control files:

RMAN> restore controlfile from '/u01/app/remote/flash_recovery_area/ORCL01/backupset/2014_10_01/o1_mf_ncsn1_TAG20141001T011809_b2q3ojl8_.bkp';

7. Restart database in mount mode. You cannot directly alter database mount because the spfile has been restored:

RMAN> alter database mount;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 10/27/2014 10:35:35
ORA-01103: database name 'ORCL01' in control file is not 'DUMMY'

RMAN> shutdown immediate;

Oracle instance shut down

RMAN> startup mount;

8. Catalog the backupsets:

RMAN> catalog start with '/u01/app/remote/flash_recovery_area/ORCL01/backupset/2014_10_01';

9. In the sqlplus session, check v$datafile and v$logfile and mkdir the directories.

SQL> select file#,name from v$datafile;

FILE#
----------
NAME
--------------------------------------------------------------------------------
1
/u01/app/oracle/oradata/orcl01/system01.dbf

2
/u01/app/oracle/oradata/orcl01/sysaux01.dbf

3
/u01/app/oracle/oradata/orcl01/undotbs01.dbf

FILE#
----------
NAME
--------------------------------------------------------------------------------
4
/u01/app/oracle/oradata/orcl01/user01.dbf

5
/u01/app/oracle/oradata/orcl01/example01.dbf

6
/u01/app/oracle/oradata/orcl01/index01

6 rows selected.

SQL> select member from v$logfile;

MEMBER
----------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl01/redo03.log
/u01/app/oracle/oradata/orcl01/redo02.log
/u01/app/oracle/oradata/orcl01/redo01.log

In this case, /u01/app/oracle/oradata/orcl01 has been created at step 5.

10. In RMAN session, restore database, recover database and open database with resetlogs option

RMAN> restore database;

...

RMAN> recover database;

...

RMAN> alter database open resetlogs;

...

P.S.: if you want to restore datafiles to a different path, in step 10:

RMAN> run{
2> set newname for datafile 1 to '/u01/app/oracle/oradata/newpath/system01.dbf';

3> restore database;
4> switch datafile all;
5> recover database;
6> }