近期由于公司需求把生产环境数据导入测试环境进行业务测试,而生产数据库管理员使用rman 进行全备份。所以在测试环境我也得使用rman进行恢复.操作步骤如下所示:
1、首先手动创建一个参数文件,只要能启动实例就行,然后恢复备份的参数文件:
1)启动数据库到nomount状态
RMAN> startup nomount;
RMAN> startup nomount;
Oracle instance started
Total System Global Area 1610612736 bytes
Fixed Size 2068296 bytes
Variable Size 385876152 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14708736 bytes
Variable Size 385876152 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14708736 bytes
2)启动rman并恢复参数文件,但报错
RMAN> restore spfile from '/home/orarch_ecdsdb2/20121218/spfile.bk';
RMAN> restore spfile from '/home/orarch_ecdsdb2/20121218/spfile.bk';
Starting restore at 07-JAN-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=541 devtype=DISK
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=541 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 11:17:48
RMAN-06564: must use the TO clause when the instance is started with SPFILE
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 11:17:48
RMAN-06564: must use the TO clause when the instance is started with SPFILE
3)修改了命令继续执行发现报错如下:
RMAN> restore spfile to '/home/oracle/ora10/dbs/spfileecdsdb.ora' from '/home/orarch_ecdsdb2/20121218/spfile.bk';
Starting restore at 07-JAN-13
using channel ORA_DISK_1
using channel ORA_DISK_1
channel ORA_DISK_1: autobackup found: /home/orarch_ecdsdb2/20121218/spfile.bk
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 12:20:38
ORA-32011: cannot restore SPFILE to location already being used by the instance
此错误时因为我数据库已经启动到了nomout状态用spfileecdsdb.ora文件所以生成不了,于是我就先生成spfileecds.ora'
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 12:20:38
ORA-32011: cannot restore SPFILE to location already being used by the instance
此错误时因为我数据库已经启动到了nomout状态用spfileecdsdb.ora文件所以生成不了,于是我就先生成spfileecds.ora'
4)生成spfileecds.ora
RMAN> restore spfile to '/home/oracle/ora10/dbs/spfileecds.ora' from '/home/orarch_ecdsdb2/20121218/spfile.bk';
RMAN> restore spfile to '/home/oracle/ora10/dbs/spfileecds.ora' from '/home/orarch_ecdsdb2/20121218/spfile.bk';
Starting restore at 07-JAN-13
using channel ORA_DISK_1
using channel ORA_DISK_1
channel ORA_DISK_1: autobackup found: /home/orarch_ecdsdb2/20121218/spfile.bk
channel ORA_DISK_1: SPFILE restore from autobackup complete
Finished restore at 07-JAN-13
channel ORA_DISK_1: SPFILE restore from autobackup complete
Finished restore at 07-JAN-13
RMAN>
5)利用此文件再生成pfile_ecdsdb.ora文件
$ export ORACLE_SID=ecdsdb(可根据需求自己进行设置)
$ sqlplus / as sysdba
$ export ORACLE_SID=ecdsdb(可根据需求自己进行设置)
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jan 7 12:23:15 2013
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate;
ORA-01507: database not mounted
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> CREATE PFILE='/home/oracle/ora10/dbs/pfile_ecdsdb.ora' from spfile='/home/oracle/ora10/dbs/spfileecds.ora'
2 ;
2 ;
File created.
SQL>
6)按实际情况修改pfile_ecdsdb.ora文件,其中要注意control_files、audit_file_dest、background_dump_dest、core_dump_dest等四个文件的路径于你需要恢复的数据库路径一样,并且数据库实例名称要改为利用export ORACLE_SID=ecdsdb设置的ecdsdb
7)利用pfile_ecdsdb.ora生成spfileecds.ora文件
SQL> create spfile From Pfile='/home/oracle/ora10/dbs/pfile_ecdsdb.ora'
2 ;
SQL> create spfile From Pfile='/home/oracle/ora10/dbs/pfile_ecdsdb.ora'
2 ;
File created.
2、恢复控制文件
1)启动数据库到nomount状态
SQL> startup nomount
ORACLE instance started.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2069320 bytes
Variable Size 486542520 bytes
Database Buffers 1644167168 bytes
Redo Buffers 14704640 bytes
Fixed Size 2069320 bytes
Variable Size 486542520 bytes
Database Buffers 1644167168 bytes
Redo Buffers 14704640 bytes
2)恢复控制文件
MAN> RESTORE CONTROLFILE FROM '/home/orarch_ecdsdb2/20121218/ctl.bk';
MAN> RESTORE CONTROLFILE FROM '/home/orarch_ecdsdb2/20121218/ctl.bk';
Starting restore at 07-JAN-13
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 13:01:13
ORA-03135: connection lost contact
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 13:01:13
ORA-03135: connection lost contact
RMAN> quit
报如上错误信息说明是连接已经断了,所以要重新登录rman
报如上错误信息说明是连接已经断了,所以要重新登录rman
Recovery Manager complete.
3)再一次执行恢复命令
$ rman target /
$ rman target /
Recovery Manager: Release 10.2.0.5.0 - Production on Mon Jan 7 13:03:56 2013
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: ecdsdb (not mounted)
RMAN> RESTORE CONTROLFILE FROM '/home/orarch_ecdsdb2/20121218/ctl.bk';
Starting restore at 07-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=2190 devtype=DISK
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=2190 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
output filename=/home/oracle/oradata/ecdsdb/rcontrol01
output filename=/home/oracle/oradata/ecdsdb/rcontrol02
output filename=/home/oracle/oradata/ecdsdb/rcontrol03
Finished restore at 07-JAN-13
channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
output filename=/home/oracle/oradata/ecdsdb/rcontrol01
output filename=/home/oracle/oradata/ecdsdb/rcontrol02
output filename=/home/oracle/oradata/ecdsdb/rcontrol03
Finished restore at 07-JAN-13
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
database mounted
released channel: ORA_DISK_1
RMAN> catalog start with '/dsms2012/';
released channel: ORA_DISK_1
searching for all files that match the pattern /dsms2012/
searching for all files that match the pattern /dsms2012/
List of Files Unknown to the Database
=====================================
File Name: /dsms2012/arch_ECDSDB_30530_1.bk
File Name: /dsms2012/arch_ECDSDB_30531_1.bk
File Name: /dsms2012/ctl.bk
File Name: /dsms2012/pri_ECDSDB_30526_1.bk
File Name: /dsms2012/pri_ECDSDB_30527_1.bk
File Name: /dsms2012/pri_ECDSDB_30528_1.bk
File Name: /dsms2012/pri_ECDSDB_30529_1.bk
File Name: /dsms2012/spfile.bk
=====================================
File Name: /dsms2012/arch_ECDSDB_30530_1.bk
File Name: /dsms2012/arch_ECDSDB_30531_1.bk
File Name: /dsms2012/ctl.bk
File Name: /dsms2012/pri_ECDSDB_30526_1.bk
File Name: /dsms2012/pri_ECDSDB_30527_1.bk
File Name: /dsms2012/pri_ECDSDB_30528_1.bk
File Name: /dsms2012/pri_ECDSDB_30529_1.bk
File Name: /dsms2012/spfile.bk
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /dsms2012/arch_ECDSDB_30530_1.bk
File Name: /dsms2012/arch_ECDSDB_30531_1.bk
File Name: /dsms2012/ctl.bk
File Name: /dsms2012/pri_ECDSDB_30526_1.bk
File Name: /dsms2012/pri_ECDSDB_30527_1.bk
File Name: /dsms2012/pri_ECDSDB_30528_1.bk
File Name: /dsms2012/pri_ECDSDB_30529_1.bk
File Name: /dsms2012/spfile.bk
=======================
File Name: /dsms2012/arch_ECDSDB_30530_1.bk
File Name: /dsms2012/arch_ECDSDB_30531_1.bk
File Name: /dsms2012/ctl.bk
File Name: /dsms2012/pri_ECDSDB_30526_1.bk
File Name: /dsms2012/pri_ECDSDB_30527_1.bk
File Name: /dsms2012/pri_ECDSDB_30528_1.bk
File Name: /dsms2012/pri_ECDSDB_30529_1.bk
File Name: /dsms2012/spfile.bk
3、修复数据库
1)执行恢复命令
RMAN> RESTORE DATABASE;
1)执行恢复命令
RMAN> RESTORE DATABASE;
Starting restore at 07-JAN-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=2190 devtype=DISK
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=2190 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home/db/oracle/oradata/ecdsdb/rsystem_01_4g
restoring datafile 00002 to /home/db/oracle/oradata/ecdsdb/rundotbs1_01_10g
restoring datafile 00004 to /home/db/oracle/oradata/ecdsdb/ruser_01_512m
restoring datafile 00006 to /home/db/oracle/oradata/ecdsdb/rtbs_data1_01_16g
restoring datafile 00008 to /home/db/oracle/oradata/ecdsdb/rtbs_part_01_16g
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
ORA-19870: error reading backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
ORA-19504: failed to create file "/home/db/oracle/oradata/ecdsdb/rtbs_data1_01_16g"
ORA-27040: file create error, unable to create file
HPUX-ia64 Error: 2: No such file or directory
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00003 to /home/db/oracle/oradata/ecdsdb/rsysaux_01_4g
restoring datafile 00005 to /home/db/oracle/oradata/ecdsdb/rundotbs2_01_10g
restoring datafile 00007 to /home/db/oracle/oradata/ecdsdb/rtbs_data2_01_24g
restoring datafile 00009 to /home/db/oracle/oradata/ecdsdb/rtbs_idx1_01_16g
restoring datafile 00010 to /home/db/oracle/oradata/ecdsdb/rpatrol_data_01_256m
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30526_1.bk
ORA-19870: error reading backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30526_1.bk
ORA-19504: failed to create file "/home/db/oracle/oradata/ecdsdb/rtbs_data2_01_24g"
ORA-27040: file create error, unable to create file
HPUX-ia64 Error: 2: No such file or directory
failover to previous backup
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home/db/oracle/oradata/ecdsdb/rsystem_01_4g
restoring datafile 00002 to /home/db/oracle/oradata/ecdsdb/rundotbs1_01_10g
restoring datafile 00004 to /home/db/oracle/oradata/ecdsdb/ruser_01_512m
restoring datafile 00006 to /home/db/oracle/oradata/ecdsdb/rtbs_data1_01_16g
restoring datafile 00008 to /home/db/oracle/oradata/ecdsdb/rtbs_part_01_16g
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
ORA-19870: error reading backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
ORA-19504: failed to create file "/home/db/oracle/oradata/ecdsdb/rtbs_data1_01_16g"
ORA-27040: file create error, unable to create file
HPUX-ia64 Error: 2: No such file or directory
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00003 to /home/db/oracle/oradata/ecdsdb/rsysaux_01_4g
restoring datafile 00005 to /home/db/oracle/oradata/ecdsdb/rundotbs2_01_10g
restoring datafile 00007 to /home/db/oracle/oradata/ecdsdb/rtbs_data2_01_24g
restoring datafile 00009 to /home/db/oracle/oradata/ecdsdb/rtbs_idx1_01_16g
restoring datafile 00010 to /home/db/oracle/oradata/ecdsdb/rpatrol_data_01_256m
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30526_1.bk
ORA-19870: error reading backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30526_1.bk
ORA-19504: failed to create file "/home/db/oracle/oradata/ecdsdb/rtbs_data2_01_24g"
ORA-27040: file create error, unable to create file
HPUX-ia64 Error: 2: No such file or directory
failover to previous backup
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 13:07:37
RMAN-06026: some targets not found - aborting restore
RMAN-06100: no channel to restore a backup or copy of datafile 10
RMAN-06100: no channel to restore a backup or copy of datafile 9
RMAN-06100: no channel to restore a backup or copy of datafile 8
RMAN-06100: no channel to restore a backup or copy of datafile 7
RMAN-06100: no channel to restore a backup or copy of datafile 6
RMAN-06100: no channel to restore a backup or copy of datafile 5
RMAN-06100: no channel to restore a backup or copy of datafile 4
RMAN-06100: no channel to restore a backup or copy of datafile 3
RMAN-06100: no channel to restore a backup or copy of datafile 2
RMAN-06100: no channel to restore a backup or copy of datafile 1
报如上错误,说明控制文件中记录了目标数据库的数据库文件路径和本地的/home/oracle/oradata/ecdsdb/不同,所以必须重新指向数据文件的位置如下操作。
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/07/2013 13:07:37
RMAN-06026: some targets not found - aborting restore
RMAN-06100: no channel to restore a backup or copy of datafile 10
RMAN-06100: no channel to restore a backup or copy of datafile 9
RMAN-06100: no channel to restore a backup or copy of datafile 8
RMAN-06100: no channel to restore a backup or copy of datafile 7
RMAN-06100: no channel to restore a backup or copy of datafile 6
RMAN-06100: no channel to restore a backup or copy of datafile 5
RMAN-06100: no channel to restore a backup or copy of datafile 4
RMAN-06100: no channel to restore a backup or copy of datafile 3
RMAN-06100: no channel to restore a backup or copy of datafile 2
RMAN-06100: no channel to restore a backup or copy of datafile 1
报如上错误,说明控制文件中记录了目标数据库的数据库文件路径和本地的/home/oracle/oradata/ecdsdb/不同,所以必须重新指向数据文件的位置如下操作。
2)执行脚本命令重新恢复数据库
RMAN> run{
2> set newname for datafile 1 to '/home/oracle/oradata/ecdsdb/system_01_4g';
3> set newname for datafile 2 to '/home/oracle/oradata/ecdsdb/undotbs1_01_10g';
4> set newname for datafile 4 to '/home/oracle/oradata/ecdsdb/user_01_512m';
5> set newname for datafile 6 to '/home/oracle/oradata/ecdsdb/tbs_data1_01_16g';
6> set newname for datafile 8 to '/home/oracle/oradata/ecdsdb/tbs_part_01_16g';
7> set newname for datafile 3 to '/home/doracle/oradata/ecdsdb/sysaux_01_4g';
8> set newname for datafile 5 to '/home/oracle/oradata/ecdsdb/undotbs2_01_10g';
9> set newname for datafile 7 to '/home/oracle/oradata/ecdsdb/tbs_data2_01_24g';
10> set newname for datafile 9 to '/home/oracle/oradata/ecdsdb/tbs_idx1_01_16g';
11> set newname for datafile 10 to '/home/oracle/oradata/ecdsdb/patrol_data_01_256m';
12> restore database;
13> }
RMAN> run{
2> set newname for datafile 1 to '/home/oracle/oradata/ecdsdb/system_01_4g';
3> set newname for datafile 2 to '/home/oracle/oradata/ecdsdb/undotbs1_01_10g';
4> set newname for datafile 4 to '/home/oracle/oradata/ecdsdb/user_01_512m';
5> set newname for datafile 6 to '/home/oracle/oradata/ecdsdb/tbs_data1_01_16g';
6> set newname for datafile 8 to '/home/oracle/oradata/ecdsdb/tbs_part_01_16g';
7> set newname for datafile 3 to '/home/doracle/oradata/ecdsdb/sysaux_01_4g';
8> set newname for datafile 5 to '/home/oracle/oradata/ecdsdb/undotbs2_01_10g';
9> set newname for datafile 7 to '/home/oracle/oradata/ecdsdb/tbs_data2_01_24g';
10> set newname for datafile 9 to '/home/oracle/oradata/ecdsdb/tbs_idx1_01_16g';
11> set newname for datafile 10 to '/home/oracle/oradata/ecdsdb/patrol_data_01_256m';
12> restore database;
13> }
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 07-JAN-13
using channel ORA_DISK_1
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home/oracle/oradata/ecdsdb/rsystem_01_4g
restoring datafile 00002 to /home/oracle/oradata/ecdsdb/rundotbs1_01_10g
restoring datafile 00004 to /home/oracle/oradata/ecdsdb/ruser_01_512m
restoring datafile 00006 to /home/oracle/oradata/ecdsdb/rtbs_data1_01_16g
restoring datafile 00008 to /home/oracle/oradata/ecdsdb/rtbs_part_01_16g
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /home/oracle/oradata/ecdsdb/rsystem_01_4g
restoring datafile 00002 to /home/oracle/oradata/ecdsdb/rundotbs1_01_10g
restoring datafile 00004 to /home/oracle/oradata/ecdsdb/ruser_01_512m
restoring datafile 00006 to /home/oracle/oradata/ecdsdb/rtbs_data1_01_16g
restoring datafile 00008 to /home/oracle/oradata/ecdsdb/rtbs_part_01_16g
channel ORA_DISK_1: reading from backup piece /home/orarch_ecdsdb2/20121218/pri_ECDSDB_30527_1.bk
4、恢复数据库
rman>RECOVER DATABASE;
rman>RECOVER DATABASE;