环境:

OS:Red Hat Linux As 5

DB:10.2.0.4


有些时候因为测试环境需要,我们需要使用生产库的备份集在另外一台新的机器上做恢复(前提是新机器事先安装Oracle软件,版本跟原库一致),下面是恢复过程.


1.在原库上做全备(在原库上操作)

run{

allocate channel c1 device type disk;

allocate channel c2 device type disk;

backup format '/u02/rman_backup/full_backup/full_backup_%T_%s' database;

sql 'alter system archive log current';

backup format '/u02/rman_backup/full_backup/arc_backup_%T_%s' archivelog all;

release channel c1;

release channel c2;

}

2.查看原库的DBID(在原库上操作)

因为在做恢复的过程中需要设定DBID,这里需要找到原库的DBID

SQL> select dbid from v$database;

     DBID

----------

1820932955


-----以下的操作没有特殊说明,全部在目的库上操作-----

3.使用ftp将原库上的备份集拷贝到目的库的目录/u02/ftp/(具体操作省略)


4.在新机器上创建如下目录

mkdir /u02/mydb

mkdir -p /u02/mydb/oracl/{adump,bdump,cdump,dpdump,udump,pfile}

mkdir -p /u02/mydb/oradata/oracl

mkdir -p /u02/mydb/flash_recovery_area


5.创建密码文件

orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworacl.ora password=oracle


6.恢复参数文件

[oracle@hxlbak ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Fri Jun 29 06:51:54 2012

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

connected to target database (not started)

RMAN>set dbid 1820932955 -- 这里的dbid需要跟原库保持一致

RMAN> startup nomount

startup failed: ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora'

starting Oracle instance without parameter file for retrival of spfile

Oracle instance started

Total System Global Area     159383552 bytes

Fixed Size                     1218268 bytes

Variable Size                 54528292 bytes

Database Buffers             100663296 bytes

Redo Buffers                   2973696 bytes

RMAN> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora' from '/u02/ftp/full_backup_20120628_37';

Starting restore at 29-JUN-12

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=36 devtype=DISK

channel ORA_DISK_1: autobackup found: /u02/ftp/full_backup_20120628_37

channel ORA_DISK_1: SPFILE restore from autobackup complete

Finished restore at 29-JUN-12

备份集full_backup_20120628_3里7包含了参数文件,我们在备份数据的时候会默认备份参数文件,可以在原库使用list backup查看,list backup输出部分内容如下:

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

------- ---- -- ---------- ----------- ------------ ---------------

35      Full    80.00K     DISK        00:00:01     28-JUN-12

       BP Key: 35   Status: AVAILABLE  Compressed: NO  Tag: TAG20120628T184555

       Piece Name: /u02/rman_backup/full_backup/full_backup_20120628_37

 SPFILE Included: Modification time: 28-JUN-12

恢复了参数文件initoracl.ora后,因为原库和目的库各文件保存的路径不一致,这个时候需要修改参数文件,修改的地方如下,各文件路径指向新目录:

*.audit_file_dest='/u02/mydb/oracl/adump'

*.background_dump_dest='/u02/mydb/oracl/bdump'

*.control_files='/u02/mydb/oradata/oracl/control01.ctl','/u02/mydb/oradata/oracl/control02.ctl','/u02/mydb/oradata/oracl/control03.ctl'

*.core_dump_dest='/u02/mydb/oracl/cdump'

*.db_recovery_file_dest='/u02/mydb/flash_recovery_area'

*.user_dump_dest='/u02/mydb/oracl/udump'

7.使用编辑好的参数文件启动数据库到nomount状态并恢复控制文件

SQL> startup nomount pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora

ORACLE instance started.

Total System Global Area 1048576000 bytes

Fixed Size                  1223368 bytes

Variable Size             310379832 bytes

Database Buffers          734003200 bytes

Redo Buffers                2969600 bytes

SQL>

恢复控制文件

RMAN> restore controlfile from '/u02/ftp/full_backup_20120628_36';

Starting restore at 29-JUN-12

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:05

output filename=/u02/mydb/oradata/oracl/control01.ctl

output filename=/u02/mydb/oradata/oracl/control02.ctl

output filename=/u02/mydb/oradata/oracl/control03.ctl

Finished restore at 29-JUN-12

跟参数文件一样,在备份数据的时候会默认备份了控制文件,备份集full_backup_20120628_36中包含了控制文件,同样可以在原库使用list backup查看,list backup输出部分内容如下:

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

------- ---- -- ---------- ----------- ------------ ---------------

34      Full    6.98M      DISK        00:00:02     28-JUN-12

       BP Key: 34   Status: AVAILABLE  Compressed: NO  Tag: TAG20120628T184555

       Piece Name: /u02/rman_backup/full_backup/full_backup_20120628_36

 Control File Included: Ckp SCN: 1545845      Ckp time: 28-JUN-12

8.启动数据库到mount状态并注册备份集

RMAN> alter database mount;

database mounted

released channel: ORA_DISK_1

注册备份集,因为控制文件中的保留的备份信息是原库的,我们这里需要重新注册新库路径下的备份集

RMAN> catalog start with '/u02/ftp/';

Starting implicit crosscheck backup at 29-JUN-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

Crosschecked 29 objects

Finished implicit crosscheck backup at 29-JUN-12

Starting implicit crosscheck copy at 29-JUN-12

using channel ORA_DISK_1

Finished implicit crosscheck copy at 29-JUN-12

searching for all files in the recovery area

cataloging files...

no files cataloged

searching for all files that match the pattern /u02/ftp/

List of Files Unknown to the Database

=====================================

File Name: /u02/ftp/full_backup_20120628_35

File Name: /u02/ftp/full_backup_20120628_37

File Name: /u02/ftp/full_backup_20120628_34

File Name: /u02/ftp/arc_backup_20120628_38

File Name: /u02/ftp/arc_backup_20120628_40

File Name: /u02/ftp/full_backup_20120628_36

File Name: /u02/ftp/full_backup_20120628_31

File Name: /u02/ftp/full_backup_20120628_33

File Name: /u02/ftp/arc_backup_20120628_39

File Name: /u02/ftp/full_backup_20120628_32

File Name: /u02/ftp/full_backup_20120628_30

Do you really want to catalog the above files (enter YES or NO)? yes

cataloging files...

cataloging done

List of Cataloged Files

=======================

File Name: /u02/ftp/full_backup_20120628_35

File Name: /u02/ftp/full_backup_20120628_37

File Name: /u02/ftp/full_backup_20120628_34

File Name: /u02/ftp/arc_backup_20120628_38

File Name: /u02/ftp/arc_backup_20120628_40

File Name: /u02/ftp/full_backup_20120628_36

File Name: /u02/ftp/full_backup_20120628_31

File Name: /u02/ftp/full_backup_20120628_33

File Name: /u02/ftp/arc_backup_20120628_39

File Name: /u02/ftp/full_backup_20120628_32

File Name: /u02/ftp/full_backup_20120628_30

9.列出当前的所有数据文件

SQL> column name format a60;

SQL> select file# as "file/grp#", name from v$datafile;

file/grp# NAME

---------- ------------------------------------------------------------

        1 /u01/app/oracle/oradata/oracl/system01.dbf';

        2 /u01/app/oracle/oradata/oracl/undotbs01.dbf';

        3 /u01/app/oracle/oradata/oracl/sysaux01.dbf';

        4 /u01/app/oracle/oradata/oracl/users01.dbf';

        5 /u01/app/oracle/oradata/oracl/hxl01.dbf';

        6 /u01/app/oracle/oradata/oracl/hxl02.dbf';

        7 /u01/app/oracle/oradata/oracl/hxl03.dbf';

        8 /u01/app/oracle/oradata/oracl/hxl04.dbf';

        9 /u01/app/oracle/oradata/oracl/hxl05.dbf';

       10 /u02/app/oracle/oradata/oracl/hxl06.dbf';

       11 /u02/app/oracle/oradata/oracl/hxl07.dbf';

file/grp# NAME

---------- ------------------------------------------------------------

       12 /u02/app/oracle/oradata/oracl/hxl08.dbf';

       13 /u02/app/oracle/oradata/oracl/hxl09.dbf';

       14 /u02/app/oracle/oradata/oracl/hxl10.dbf';


可以看到,当前控制文件中记录的数据文件的路径是原来的路径,我们在做恢复的时候需要指向新的路径.


10.恢复数据库

RMAN> run{

set newname for datafile  1 to '/u02/mydb/oradata/oracl/system01.dbf';

set newname for datafile  2 to '/u02/mydb/oradata/oracl/undotbs01.dbf';

set newname for datafile  3 to '/u02/mydb/oradata/oracl/sysaux01.dbf';

set newname for datafile  4 to '/u02/mydb/oradata/oracl/users01.dbf';

set newname for datafile  5 to '/u02/mydb/oradata/oracl/hxl01.dbf';

set newname for datafile  6 to '/u02/mydb/oradata/oracl/hxl02.dbf';

set newname for datafile  7 to '/u02/mydb/oradata/oracl/hxl03.dbf';

set newname for datafile  8 to '/u02/mydb/oradata/oracl/hxl04.dbf';

set newname for datafile  9 to '/u02/mydb/oradata/oracl/hxl05.dbf';

set newname for datafile 10 to '/u02/mydb/oradata/oracl/hxl06.dbf';

set newname for datafile 11 to '/u02/mydb/oradata/oracl/hxl07.dbf';

set newname for datafile 12 to '/u02/mydb/oradata/oracl/hxl08.dbf';

set newname for datafile 13 to '/u02/mydb/oradata/oracl/hxl09.dbf';

set newname for datafile 14 to '/u02/mydb/oradata/oracl/hxl10.dbf';

restore database;

switch datafile all;

recover database;

}


11.打开数据库

alter database open resetlogs;


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html