重装系统后的oracle恢复(在rman帮助下)

我们这次做的前提就是在重装操作系统的时候,只保留的原来数据库的数据文件、控制文件、重做日志文件,以及rman的database全备和archivelog的备份——我们假设只保留了以上文件,其他文件,包括spfile和pfile都已经被删除,而且我们的oracle相关表空间都已经改变过,如默认的undo表空间叫TS_UNDO_01。

一、在重装操作系统之前我们先用rman进行全备:备份database ,controlfile,archivelog。

D:Back Updb bakRMAN_BK>rman nocatalog target /
恢复管理器: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
连接到目标数据库: ORALOCAL (DBID=3826047702)正在使用目标数据库控制文件替代恢复目录

RMAN>

在这里我们使用nocatalog备份,因为如果用catalog备份,相关的备份信息会保存在数据库中,当数据库重装的时候,新的数据库是没有这些信息的,而老的控制文件由于新的spfile中的部分指示有误还加载不上去,startup mount的时候会出错。因此我们干脆就使用nocatalog备份,将备份的信息保存在controlfile中。

登陆rman后,我们来更改一下一些备份参数(<>内的文字是我添加的)

RMAN> show all;
<查看rman当前参数>
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:ORACLEORA92DATABASESNCFORALOCAL.ORA'; # default
 
RMAN>

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
<设置备份过期时间是2天>新的 RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;已成功存储新的 RMAN 配置参数

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
<设置控制文件自动备份>新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP ON;已成功存储新的 RMAN 配置参数

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:Back Updb bakRMAN_BK%F_CTL.RMN';
<设置控制文件的备份途径>新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:Back Updb bakRMAN_BK%F_CTL.RMN';已成功存储新的 RMAN 配置参数

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
<设置2个通道并行进行备份>新的 RMAN 配置参数:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;已成功存储新的 RMAN 配置参数

RMAN>

RMAN> show all;
<查看rman当前参数,发现参数已经被修改>
RMAN 配置参数为:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:Back Updb bakRMAN_BK%F_CTL.RMN';CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:ORACLEORA92DATABASESNCFORALOCAL.ORA'; # default

RMAN>

Ok,我们开始用rman进行备份:


RMAN> run {

2> backup database

3> tag 'full_db_20060910'

4> format 'D:Back Updb bakRMAN_BKfull_db_20060910_%u%s%p.RMN'

5> include current controlfile;

6> backup archivelog all

7> tag 'arch_20060910'

8> format 'D:Back Updb bakRMAN_BKarch_20060910_%u%s%p.RMN'

9> delete input;}


启动 backup 于 10-9月 -06

使用通道 ORA_DISK_1

使用通道 ORA_DISK_2

通道 ORA_DISK_1: 正在启动 full 数据文件备份集

通道 ORA_DISK_1: 正在指定备份集中的数据文件

输入数据文件 fno=00011 name=D:ORACLEORADATAORALOCALPERFSTAT.DBF

输入数据文件 fno=00005 name=D:ORACLEORADATAORALOCALEXAMPLE01.DBF

输入数据文件 fno=00006 name=D:ORACLEORADATAORALOCALINDX01.DBF

输入数据文件 fno=00009 name=D:ORACLEORADATAORALOCALTS_RMAN_01.DBF

输入数据文件 fno=00003 name=D:ORACLEORADATAORALOCALCWMLITE01.DBF

输入数据文件 fno=00004 name=D:ORACLEORADATAORALOCALDRSYS01.DBF

输入数据文件 fno=00008 name=D:ORACLEORADATAORALOCALTOOLS01.DBF

通道 ORA_DISK_1: 正在启动段 1 于 10-9月 -06

通道 ORA_DISK_2: 正在启动 full 数据文件备份集

通道 ORA_DISK_2: 正在指定备份集中的数据文件

备份集中包括当前控制文件

输入数据文件 fno=00001 name=D:ORACLEORADATAORALOCALSYSTEM01.DBF

输入数据文件 fno=00010 name=D:ORACLEORADATAORALOCALXDB01.DBF

输入数据文件 fno=00002 name=D:ORACLEORADATAORALOCALTS_UNDO_01.DBF

输入数据文件 fno=00007 name=D:ORACLEORADATAORALOCALODM01.DBF

输入数据文件 fno=00012 name=D:ORACLEORADATAORALOCALTS_DATA_USER01.DBF

通道 ORA_DISK_2: 正在启动段 1 于 10-9月 -06

通道 ORA_DISK_1: 已完成段 1 于 10-9月 -06

段 handle=D:BACK UPDB BAKRMAN_BKFULL_DB_20060910_0THSVDUH291.RMN comment=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:16

通道 ORA_DISK_2: 已完成段 1 于 10-9月 -06

段 handle=D:BACK UPDB BAKRMAN_BKFULL_DB_20060910_0UHSVDUI301.RMN comment=NONE

通道 ORA_DISK_2: 备份集已完成, 经过时间:00:02:20

完成 backup 于 10-9月 -06


启动 backup 于 10-9月 -06

当前日志已存档

使用通道 ORA_DISK_1

使用通道 ORA_DISK_2

通道 ORA_DISK_1: 正在启动存档日志备份集

通道 ORA_DISK_1: 正在指定备份集中的存档日志

输入存档日志线程 =1 序列 =218 记录 ID=74 时间戳=600815409

通道 ORA_DISK_1: 正在启动段 1 于 10-9月 -06

通道 ORA_DISK_2: 正在启动存档日志备份集

通道 ORA_DISK_2: 正在指定备份集中的存档日志

输入存档日志线程 =1 序列 =219 记录 ID=75 时间戳=600815711

通道 ORA_DISK_2: 正在启动段 1 于 10-9月 -06

通道 ORA_DISK_1: 已完成段 1 于 10-9月 -06

段 handle=D:BACK UPDB BAKRMAN_BKARCH_20060910_0VHSVE2V311.RMN comment=NONE

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02

通道 ORA_DISK_1: 正在删除存档日志

存档日志文件名 =D:ORACLEORA92RDBMSARC00218.001 记录 ID=74 时间戳 =600815409

通道 ORA_DISK_2: 已完成段 1 于 10-9月 -06

段 handle=D:BACK UPDB BAKRMAN_BKARCH_20060910_10HSVE2V321.RMN comment=NONE

通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:02

通道 ORA_DISK_2: 正在删除存档日志

存档日志文件名 =D:ORACLEORA92RDBMSARC00219.001 记录 ID=75 时间戳 =600815711

完成 backup 于 10-9月 -06


启动 Control File and SPFILE Autobackup 于 10-9月 -06

段 handle=D:BACK UPDB BAKRMAN_BKC-3826047702-20060910-04_CTL.RMN comment=NONE

完成 Control File and SPFILE Autobackup 于 10-9月 -06


RMAN>

二、重装操作系统后,我们删除oracle下除oradata(含数据文件,控制文件,redolog)外的所有文件,重装oracle。

三、重装oracle。

四、将原来是oradata(含数据文件,控制文件,redolog)覆盖oradata。

五、这时启动oracle,我们发现只能启动到nomount状态。原因是根据目前的spfile,找不到对应的表空间,找不到undo表空间——当前的spfile认为的undo表空间是UNDOTS01,我们的是TS_UNDO_01。因此,我们删除这个没用的spfile。

六、找到$ORACLE_HOMEadminSIDpfileinit.ora,打开后,进行修改,将undo_tablespace=UNDOTS01改成:undo_tablespace=TS_UNDO_01。然后startup pfile=$ORACLE_HOMEadminSIDpfileinit.ora

七、运行rman

C:Documents and SettingsAdministrator>rman nocatalog target /


恢复管理器: 版本9.2.0.1.0 - Production


Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.


连接到目标数据库: ORALOCAL (DBID=3826047702)

正在使用目标数据库控制文件替代恢复目录


RMAN> show all;


RMAN 配置参数为:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:Back Updb bakRMAN_BK%F_CTL.RMN';

CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:ORACLEORA92DATABASESNCFORALOCAL.ORA'; # default


RMAN> restore spfile from autobackup;


启动 restore 于 10-9月 -06


分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=12 devtype=DISK

分配的通道: ORA_DISK_2

通道 ORA_DISK_2: sid=13 devtype=DISK

通道 ORA_DISK_1: 寻找以下日期的自动备份: 20060910

通道 ORA_DISK_2: 寻找以下日期的自动备份: 20060910

通道 ORA_DISK_2: 跳过, 自动备份已经找到

通道 ORA_DISK_1: 已找到的自动备份: D:Back Updb bakRMAN_BKc-3826047702-20060910-04_CTL.RMN

通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成

完成 restore 于 10-9月 -06


RMAN> shutdown immediate


数据库已关闭

数据库已卸载

Oracle 例程已关闭


RMAN> exit



恢复管理器完成。

八、Ok,至此我们的复原工作完成99%,但是在启动的时候还是会报ora-01991的错误,我们需要重建一下密码文件:

1、删除原来的$ORACLE_HOMEora92databasePWDsid.ora密码文件

2、命令行输入orapwd file= password= entries=

3、重启数据库:

C:Documents and SettingsAdministrator>sqlplus "/ as sysdba"


SQL*Plus: Release 9.2.0.1.0 - Production on 星期日 9月 10 22:30:22 2006


Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


已连接到空闲例程。


SQL>

SQL> startup nomount

ORACLE 例程已经启动。


Total System Global Area 135338868 bytes

Fixed Size 453492 bytes

Variable Size 109051904 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

SQL> alter database mount;


数据库已更改。


SQL> alter database open ;


数据库已更改。

相关文章

2条评论

  1. 因为你是用控制文件存储的catalog信息,所以实际上你只要有控制文件的备份和rman的database的全备,就可以做整个数据库的恢复,没必要保留原来数据库的数据文件和重做日志文件.

  2. 呵呵,对。其实连控制文件都不用备份,只要有rman的全备,还能用DBMS_BACKUP_RESTORE包也能读取全备中关于控制文件的信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据