我们这次做的前提就是在重装操作系统的时候,只保留的原来数据库的数据文件、控制文件、重做日志文件,以及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=
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条评论
因为你是用控制文件存储的catalog信息,所以实际上你只要有控制文件的备份和rman的database的全备,就可以做整个数据库的恢复,没必要保留原来数据库的数据文件和重做日志文件.
呵呵,对。其实连控制文件都不用备份,只要有rman的全备,还能用DBMS_BACKUP_RESTORE包也能读取全备中关于控制文件的信息。