Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1278928
  • 博文数量: 1211
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 14340
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-09 11:20
文章分类

全部博文(1211)

文章存档

2011年(1)

2008年(1210)

我的朋友

分类: 服务器与存储

2008-06-14 13:59:52

恢复案例三:恢复控制文件

  全部控制文件丢失,需要从备份的控制文件恢复。恢复了控制文件后必须要进行RECOVER恢复然后用RESETLOGS参数打开数据库,我们也可以把控制文件恢复到其他位置(不是在参数文件中给出的控制文件位置)。本例假定没有使用恢复目录,我们将在以后介绍带有恢复目的RMAN备份如何恢复控制文件。如果没有恢复目录,用RMAN只能在NOMOUNT状态从备份中进行控制文件的恢复。

  从自动备份控制文件恢复:

RMAN> configure controlfile autobackup on;

  旧的 RMAN 配置参数:

CONFIGURE CONTROLFILE AUTOBACKUP OFF;

  新的 RMAN 配置参数:

CONFIGURE CONTROLFILE AUTOBACKUP ON;

  已成功新的 RMAN 配置参数:

RMAN> show all;

  RMAN 配置参数为:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
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 '%F'; # default
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 1;
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 ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE
\SNCFROME.ORA'; # default RMAN> backup database; 启动 backup 于 24-1月 -07 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=143 devtype=DISK 通道 ORA_DISK_1: 启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 输入数据文件 fno=00002 name=F:\ORACLE\ORADATA\ROME\UNDOTBS01.DBF 输入数据文件 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSTEM01.DBF 输入数据文件 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSAUX01.DBF 输入数据文件 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\USERS01.DBF 输入数据文件 fno=00005 name=E:\ORACLE\ORADATA\ROME\TEST.DBF 通道 ORA_DISK_1: 正在启动段 1 于 24-1月 -07 通道 ORA_DISK_1: 已完成段 1 于 24-1月 -07 段句柄=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NNNDF_TAG20070124T091006_2VFDHGYR_.BKP 标记=TAG20070124T091006 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:25 完成 backup 于 24-1月 -07 启动 Control File and SPFILE Autobackup 于 24-1月 -07段 handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\AUTOBACKUP\2007_
01_24\O1_MF_S_612695432_2VFDJ95V_.BKP comment=NONE 完成 Control File and SPFILE Autobackup 于 24-1月 -07 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 删除所有的控制文件。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1288340 bytes Variable Size 104859500 bytes Database Buffers 54525952 bytes Redo Buffers 7098368 bytes ORA-00205: ?????????, ??????, ??????? SQL> shutdown immediate ORA-01507: ?????? ORACLE 例程已经关闭。 SQL> startup nomount ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1288340 bytes Variable Size 104859500 bytes Database Buffers 54525952 bytes Redo Buffers 7098368 bytes RMAN> SET DBID 252956976; 正在执行命令: SET DBID RMAN> restore controlfile from autobackup; 启动 restore 于 24-1月 -07 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 恢复区域目标: d:\oracle\product\10.2.0\flash_recovery_area 用于搜索的数据库名 (或数据库的唯一名称): ROME 通道 ORA_DISK_1: 在恢复区域中找到自动备份 通道 ORA_DISK_1: 已找到的自动备份: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ ROME\AUTOBACKUP\2007_01_24\O1_MF_S_612695432_2VFDJ95V_.BKP 通道 ORA_DISK_1: 从自动备份复原控制文件已完成 输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\CONTROL01.CTL 输出文件名=F:\ORACLE\ORADATA\ROME\CONTROL02.CTL 输出文件名=E:\ORACLE\ORADATA\ROME\CONTROL03.CTL 完成 restore 于 24-1月 -07 RMAN> sql 'alter database mount'; sql 语句: alter database mount 释放的通道: ORA_DISK_1 RMAN> recover database; 启动 recover 于 24-1月 -07 启动 implicit crosscheck backup 于 24-1月 -07 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 已交叉检验的 21 对象 完成 implicit crosscheck backup 于 24-1月 -07 启动 implicit crosscheck copy 于 24-1月 -07 使用通道 ORA_DISK_1 已交叉检验的 1 对象 完成 implicit crosscheck copy 于 24-1月 -07 搜索恢复区域中的所有文件 正在编制文件目录... 目录编制完毕 已列入目录的文件的列表 ======================= 文件名: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\AUTOBACKUP\2007_01_
24\O1_MF_S_612714183_2VFYT8Y8_.BKP 使用通道 ORA_DISK_1 正在开始介质的恢复 存档日志线程 1 序列 1 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A.L OG 存在于磁盘上 存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A.LOG 线程 =1 序列 = 1 介质恢复完成, 用时: 00:00:03 完成 recover 于 24-1月 -07 RMAN> sql 'alter database open resetlogs'; sql 语句: alter database open resetlogs

  从包含控制文件的全库备份恢复:

RMAN> configure controlfile autobackup off;
旧的 RMAN 配置参数: 
CONFIGURE CONTROLFILE AUTOBACKUP ON; 
新的 RMAN 配置参数: 
CONFIGURE CONTROLFILE AUTOBACKUP OFF; 
已成功新的 RMAN 配置参数 

RMAN> backup database; 

启动 backup 于 24-1月 -07 
分配的通道: ORA_DISK_1 
通道 ORA_DISK_1: sid=157 devtype=DISK 
通道 ORA_DISK_1: 启动全部数据文件备份集 
通道 ORA_DISK_1: 正在指定备份集中的数据文件 
输入数据文件 fno=00002 name=F:\ORACLE\ORADATA\ROME\UNDOTBS01.DBF 
输入数据文件 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSTEM01.DBF 
输入数据文件 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSAUX01.DBF 
输入数据文件 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\USERS01.DBF 
输入数据文件 fno=00005 name=E:\ORACLE\ORADATA\ROME\TEST.DBF 
通道 ORA_DISK_1: 正在启动段 1 于 24-1月 -07 
通道 ORA_DISK_1: 已完成段 1 于 24-1月 -07 
段句柄=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NNNDF_TAG20070124T152907_2VG2P400_.BKP 标记=TAG20070124T152907 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:25 通道 ORA_DISK_1: 启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 备份集中包括当前控制文件 在备份集中包含当前的 SPFILE 通道 ORA_DISK_1: 正在启动段 1 于 24-1月 -07 通道 ORA_DISK_1: 已完成段 1 于 24-1月 -07 段句柄=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NCSNF_TAG20070124T152907_2VG2PZ6C_.BKP 标记=TAG20070124T152907 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03 完成 backup 于 24-1月 -07 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 删除所有控制文件。 SQL> startup nomount ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1288340 bytes Variable Size 104859500 bytes Database Buffers 54525952 bytes Redo Buffers 7098368 bytes C:\Documents and Settings\Administrator>rman target / 恢复管理器: Release 10.2.0.2.0 - Production on 星期三 1月 24 15:37:54 2007 Copyright (c) 1982, 2005, . All rights reserved. 连接到目标数据库: rome (未装载) RMAN> RESTORE CONTROLFILE FROM 'D:\oracle\product\10.2.0\flash_recovery_area\
ROME\BACKUPSET\2007_01_24\O1_MF_NCSNF_TAG20070124T152907_2VG2PZ6C_.BKP'; 启动 restore 于 24-1月 -07 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 通道 ORA_DISK_1: 正在复原控制文件 通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04 输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\CONTROL01.CTL 输出文件名=F:\ORACLE\ORADATA\ROME\CONTROL02.CTL 输出文件名=E:\ORACLE\ORADATA\ROME\CONTROL03.CTL 完成 restore 于 24-1月 -07 RMAN> sql 'alter database mount'; sql 语句: alter database mount 释放的通道: ORA_DISK_1 RMAN> recover database; 启动 recover 于 24-1月 -07 启动 implicit crosscheck backup 于 24-1月 -07 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 已交叉检验的 24 对象 完成 implicit crosscheck backup 于 24-1月 -07 启动 implicit crosscheck copy 于 24-1月 -07 使用通道 ORA_DISK_1 已交叉检验的 1 对象 完成 implicit crosscheck copy 于 24-1月 -07 搜索恢复区域中的所有文件 正在编制文件目录... 目录编制完毕 已列入目录的文件的列表 ======================= 文件名: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NCSNF_TAG20070124T152907_2VG2PZ6C_.BKP 使用通道 ORA_DISK_1 正在开始介质的恢复 存档日志线程 1 序列 1 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A.L OG 存在于磁盘上 存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A.LOG 线程 =1 序列 = 1 介质恢复完成, 用时: 00:00:02 完成 recover 于 24-1月 -07 RMAN> sql 'alter database open resetlogs'; sql 语句: alter database open resetlogs

  我们可以利用dbms_backup_restore包来恢复控制文件。

RMAN> backup database;

启动 backup 于 24-1月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=143 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=F:\ORACLE\ORADATA\ROME\UNDOTBS01.DBF
输入数据文件 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSTEM01.DBF
输入数据文件 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSAUX01.DBF
输入数据文件 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\USERS01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\ORADATA\ROME\TEST.DBF
通道 ORA_DISK_1: 正在启动段 1 于 24-1月 -07
通道 ORA_DISK_1: 已完成段 1 于 24-1月 -07
段句柄=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NNNDF_TAG20070124T120738_2VFPWCXS_.BKP 标记=TAG20070124T120738 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:25 通道 ORA_DISK_1: 启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 备份集中包括当前控制文件 在备份集中包含当前的 SPFILE 通道 ORA_DISK_1: 正在启动段 1 于 24-1月 -07 通道 ORA_DISK_1: 已完成段 1 于 24-1月 -07 段句柄=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_24
\O1_MF_NCSNF_TAG20070124T120738_2VFPX6G5_.BKP 标记=TAG20070124T120738 注释=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03 完成 backup 于 24-1月 -07 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 删除所有控制文件。 SQL> startup nomount ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1288340 bytes Variable Size 104859500 bytes Database Buffers 54525952 bytes Redo Buffers 7098368 bytes SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>''); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreControlfileTo(cfname=>'D:\oracle\product
\10.2.0\oradata\rome\Control01.ctl'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\oracle
\product\10.2.0\flash_recovery_area\ROME\BACKUPSET\2007_01_24\O1_MF_NCSNF_
TAG20070124T120738_2VFPX6G5_.BKP', params=>null); 9 sys.dbms_backup_restore.deviceDeallocate; 10 exception when others then 11 dbms_output.put_line(sqlerrm); 12 END; 13 / PL/SQL 过程已成功完成。 RMAN> restore database; 启动 restore 于 24-1月 -07 启动 implicit crosscheck backup 于 24-1月 -07 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 已交叉检验的 17 对象 完成 implicit crosscheck backup 于 24-1月 -07 启动 implicit crosscheck copy 于 24-1月 -07 使用通道 ORA_DISK_1 已交叉检验的 1 对象 完成 implicit crosscheck copy 于 24-1月 -07 搜索恢复区域中的所有文件 正在编制文件目录... 目录编制完毕 已列入目录的文件的列表 ======================= 文件名: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_
24\O1_MF_NCSNF_TAG20070124T120738_2VFPX6G5_.BKP 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始恢复数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件 正将数据文件00001恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSTEM01.DBF 正将数据文件00002恢复到F:\ORACLE\ORADATA\ROME\UNDOTBS01.DBF 正将数据文件00003恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\SYSAUX01.DBF 正将数据文件00004恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\USERS01.DBF 正将数据文件00005恢复到E:\ORACLE\ORADATA\ROME\TEST.DBF 通道 ORA_DISK_1: 正在读取备份段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROM E\BACKUPSET\2007_01_24\O1_MF_NNNDF_TAG20070124T120738_2VFPWCXS_.BKP 通道 ORA_DISK_1: 已恢复备份段 1 段句柄 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ROME\BACKUPSET\2007_01_
24\O1_MF_NNNDF_TAG20070124T120738_2VFPWCXS_.BKP 标记 = TAG20070124T120738 通道 ORA_DISK_1: 恢复完成, 用时: 00:01:45 完成 restore 于 24-1月 -07 RMAN> recover database; 启动 recover 于 24-1月 -07 使用通道 ORA_DISK_1 正在开始介质的恢复 存档日志线程 1 序列 26 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A. LOG 存在于磁盘上 存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\ROME\REDO02A.LOG 线程 =1 序列 = 26 介质恢复完成, 用时: 00:00:02 完成 recover 于 24-1月 -07 RMAN> sql 'alter database open resetlogs'; sql 语句: alter database open resetlogs

  如果使用了 Recovery Area,RMAN自动执行CROSSCHECK检查控制文件中涉及到的备份文件和竞相拷贝(磁盘备份),如果是使用磁带备份RMAN不会自动进行CROSSCHECK检查,需要我们恢复完控制文件后执行下列检查操作:

RMAN> CROSSCHECK BACKUP DEVICE TYPE SBT;

  如果我们的RMAN是带有恢复目录的话,则在恢复的时候不用进行SET DBID操作,直接执行如下命令即可:

RMAN>  restore controlfile;

  我们可以在数据库处于任何状态的情况下把控制文件恢复到参数文件中设置的控制文件以外的位置:

RMAN〉restore controlfile to ‘...’ from ‘...’;

阅读(338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~