ITPub博客

首页 > 数据库 > Oracle > 使用DBMS_BACKUP_RESTORE来还原控制文件和数据文件

使用DBMS_BACKUP_RESTORE来还原控制文件和数据文件

原创 Oracle 作者:ora_erin 时间:2013-09-11 20:14:59 0 删除 编辑
看了下面这个帖子,自己做了个实验
http://www.itpub.net/forum.php?mod=viewthread&tid=244345&extra=page%3D1%26filter%3Dtypeid%26typeid%3D1&page=1

1、RMAN备份,使用target数据库的控制文件存储备份恢复信息,
然后数据文件和控制文件全部丢失,但是之前全备过数据文件和控制文件

rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog.txt
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 13:42:15 2013

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

连接到目标数据库: ORCL (DBID=1327101518)
使用目标数据库控制文件替代恢复目录

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 COMPRESSED 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 'E:\ORACLE\PRODUCT\10.2.0\DB_1

\DATABASE\SNCFORCL.ORA'; # default

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP OFF;
旧的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
已成功存储新的 RMAN 配置参数

RMAN> backup database include current controlfile;---全备数据文件和控制文件
启动 backup 于 2013-09-11 13:44:51
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=137 devtype=DISK
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输入数据文件 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 2013-09-11 13:44:52
通道 ORA_DISK_1: 已完成段 1 于 2013-09-11 13:46:07
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP 标记=TAG20130911T134451 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:16
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2013-09-11 13:46:08
通道 ORA_DISK_1: 已完成段 1 于 2013-09-11 13:46:09
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP 标记=TAG20130911T134451 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 2013-09-11 13:46:09

RMAN> 

--再插入一些数据,有些已归档,有些未归档
当前日志组是第3组,序列号为1
SQL> create table t(id int,name va

表已创建。

SQL> insert into t values(1,'a');--在第3组,序列号为1

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(2,'b');--在第1组,序列号为2

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(3,'c');--在第2组,序列号为3

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(4,'d');--在第3组,序列号为4,未归档

已创建 1 行。

SQL> commit;

提交完成。

SQL>


删除所有的数据文件和控制文件

rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog02.txt
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 14:11:22 2013

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

已连接到目标数据库 (未启动)

RMAN> startup nomount;
Oracle 实例已启动

系统全局区域总计     603979776 字节

Fixed Size                     1250380 字节
Variable Size                285215668 字节
Database Buffers             310378496 字节
Redo Buffers                   7135232 字节

RMAN> startup mount;
数据库已经启动
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: startup 命令 (在 09/11/2013 14:11:36 上) 失败
ORA-00205: 标识控制文件时出错, 有关详细信息, 请查看预警日志

RMAN> restore controlfile from 'E:\ORACLE\PRODUCT\10.2.0

\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11

\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP';
启动 restore 于 2013-09-11 14:12:28
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
完成 restore 于 2013-09-11 14:12:30

RMAN> startup mount;
数据库已经启动
数据库已装载
释放的通道: ORA_DISK_1

RMAN> restore preview database;
启动 restore 于 2013-09-11 14:13:07
启动 implicit crosscheck backup 于 2013-09-11 14:13:07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
已交叉检验的 6 对象
完成 implicit crosscheck backup 于 2013-09-11 14:13:08

启动 implicit crosscheck copy 于 2013-09-11 14:13:08
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 2013-09-11 14:13:08

搜索恢复区域中的所有文件
正在编制文件目录...
目录编制完毕

已列入目录的文件的列表
=======================
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP

使用通道 ORA_DISK_1


备份集列表
===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间           
------- ---- -- ---------- ----------- ------------ -------------------
56      Full    301.10M    DISK        00:01:07     2013-09-11 13:45:56
        BP 关键字: 58   状态: AVAILABLE  已压缩: YES  标记: TAG20130911T134451
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
  备份集 56 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间            名称
  ---- -- ---- ---------- ------------------- ----
  1       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\SYSTEM01.DBF
  2       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\UNDOTBS01.DBF
  3       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\SYSAUX01.DBF
  4       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
  5       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\EXAMPLE01.DBF
  6       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
  7       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF


已存档的日志副本列表
关键字     Thrd Seq     S 短时间              名称
------- ---- ------- - ------------------- ----
144     1    1       A 2013-09-11 10:58:19 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC
145     1    2       A 2013-09-11 14:07:24 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC
146     1    3       A 2013-09-11 14:07:46 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC
介质恢复启动 SCN 是 12315123110100
恢复范围必须超出 SCN 12315123110100 才能清除数据文件模糊性
完成 restore 于 2013-09-11 14:13:10

RMAN> restore database;
启动 restore 于 2013-09-11 14:15:52
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正将数据文件00005恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正将数据文件00006恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
正将数据文件00007恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP 标记 = TAG20130911T134451
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:16
完成 restore 于 2013-09-11 14:17:08

RMAN> recover database using backup controlfile;--RMAN中没有using backup controlfile这个命令
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: 分析输入命令时出错
RMAN-01009: 语法错误: 找到 "using": 应为: "archivelog, auxiliary, allow, check, delete, from, high, noredo, 

noparallel, parallel, ;, skip, tablespace, test, until, undo" 中的一个
RMAN-01007: 在第 1 行第 18 列, 文件: standard input

RMAN> recover database;
启动 recover 于 2013-09-11 14:18:13
使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 1 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC 存在于磁盘上
存档日志线程 1 序列 2 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC 存在于磁盘上
存档日志线程 1 序列 3 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC 存在于磁盘上
存档日志线程 1 序列 4 已作为文件 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 存在于磁盘上
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11

\O1_MF_1_1_93024WC7_.ARC 线程 =1 序列 =1
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC 线程 =1 序列 =2
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC 线程 =1 序列 =3
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 线程 =1 序列 =4
介质恢复完成, 用时: 00:00:03
完成 recover 于 2013-09-11 14:18:19

--RMAN中直接recover database即可,RMAN会自动应用归档日志和联机重做日志文件,即使使用的是备份的控制文


RMAN> alter database open;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 09/11/2013 14:18:41 上) 失败
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQLPLUS中查询SCN
SQL> select name,checkpoint_change# from v$datafile t;
 
NAME                                                                             CHECKPOINT_CHANGE#
-------------------------------------------------------------------------------- ------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                                    12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF                                      12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF                                       12315123111894
 
7 rows selected
SQL> select name,checkpoint_change# from v$datafile_header;
 
NAME                                                                             CHECKPOINT_CHANGE#
-------------------------------------------------------------------------------- ------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                                    12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF                                      12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF                                       12315123111894
 
7 rows selected
--两者一致,照理说可以正常打开数据库的,在sqlplus中直接alter database open看看

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

--还是要resetlogs,这是否更加说明了两者一致是必要条件,而非充分条件

SQL> select * from t;

        ID NAME
---------- --------------------
         1 a
         2 b
         3 c
         4 d
--数据已完全恢复


2、RMAN备份,使用target数据库的控制文件存储备份恢复信息,
然后数据文件和控制文件全部丢失,但是之前全备过数据文件,但没有备份过控制文件,
然后我重建控制文件,使用DBMS_BACKUP_RESTORE来恢复数据文件会怎么样?

删除之前的备份,先备份全库
rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog03.txt
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 15:18:27 2013

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

连接到目标数据库: ORCL (DBID=1327101518)
使用目标数据库控制文件替代恢复目录

RMAN> delete backup;
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=142 devtype=DISK

备份段列表
BP 关键字  BS 关键字  Pc# Cp# 状态      设备类型段名称
------- ------- --- --- ----------- ----------- ----------
53      51      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T103220_92ZOKNWB_.BKP
54      52      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_07_18\O1_MF_S_821093443_8YGKB48S_.BKP
55      53      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825849208_92ZOMS9R_.BKP
56      54      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCNNF_TAG20130911T103220_92ZOMQ9R_.BKP
57      55      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825850730_92ZQ3D89_.BKP
58      56      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
59      57      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP

是否确定要删除以上对象 (输入 YES 或 NO)? yes
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T103220_92ZOKNWB_.BKP recid=53 stamp=825849140
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_07_18\O1_MF_S_821093443_8YGKB48S_.BKP recid=54 stamp=825849911
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825849208_92ZOMS9R_.BKP recid=55 stamp=825849912
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCNNF_TAG20130911T103220_92ZOMQ9R_.BKP recid=56 stamp=825849912
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825850730_92ZQ3D89_.BKP recid=57 stamp=825850732
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP recid=58 stamp=825860692
已删除备份段
备份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP recid=59 stamp=825862389
7 对象已删除


RMAN> backup database;
启动 backup 于 2013-09-11 15:19:28
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输入数据文件 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 2013-09-11 15:19:29
通道 ORA_DISK_1: 已完成段 1 于 2013-09-11 15:20:34
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11

\O1_MF_NNNDF_TAG20130911T151928_9306D1CQ_.BKP 标记=TAG20130911T151928 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2013-09-11 15:20:37
通道 ORA_DISK_1: 已完成段 1 于 2013-09-11 15:20:38
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T151928_9306G57T_.BKP 标记=TAG20130911T151928 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 2013-09-11 15:20:38

RMAN> 

再修改下数据
SQL> insert into t values(5,'e');--当前日志组是第3组,序号为1

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(6,'f');--当前日志组是第1组,序号为2

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(7,'g');--当前日志组是第2组,序号为3

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into t values(8,'h');--当前日志组是第3组,序号为4,未归档

已创建 1 行。

SQL> commit;

提交完成。

--关闭数据库,删除所有控制文件和数据文件
--手动创建控制文件

SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  DATAFILE
 12    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF',
 18    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF'
 19  CHARACTER SET ZHS16GBK
 20  ;

控制文件已创建。

--控制文件创建好之后,数据库已经mount

--下面的根据ctl.bak里面的内容酌情执行

SQL> -- Configure RMAN configuration record 1
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','OFF');

PL/SQL 过程已成功完成。

SQL> -- Configure RMAN configuration record 2
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK BACKUP TYPE TO 

COMPRESSED BACKUPSET PARALLELISM 1');

PL/SQL 过程已成功完成。

SQL> ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';
ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC'
*
第 1 行出现错误:
ORA-00604: ?? SQL ??  ????


SQL> alter session set nls_language='american';

Session altered.

SQL> ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';
ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC'
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level


貌似碰到oracle bug了:
http://wmlm.itpub.net/post/12871/512174
Symptoms
When using 'ALTER DATABASE REGISTER LOGFILE' command, the following errors occur:
ORA-00604: error occurred at recursive SQL level" error on "ALTER DATABASE REGISTER LOGFILE 

'//1_234_636797930.dbf'"
You are using user managed backup/recovery, without RMAN.
You are trying to rebuild the control file and generated a backup controlfile to trace.
You are trying to modify the control file incarnation table section to point to existing logfiles.
Cause
Internal bug 5766114 - REGISTER LOGFILE GENERATES ORA-16225
Solution
This is a known issue and is currently being worked in an internal bug.
Use the workaround :
ALTER DATABASE REGISTER PHYSICAL LOGFILE '//1_234_636797930.dbf';

引自: b14191.pdf p406
Recoving Through resetlogs with created cf:scenario

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';

Database altered.

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC';

Database altered.

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC';

Database altered.

原先v$archived_log是空的,现在register之后v$archived_log就有3条数据了

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
  2  USING FILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\BLOCK_CHANGE_TRACKING.TRC2' REUSE;

Database altered.


现在根据http://www.itpub.net/forum.php?mod=viewthread&tid=244345&extra=page%3D1%26filter%

3Dtypeid%26typeid%3D1&page=1介绍的dbms_backup_restore来还原数据文件:
SQL> DECLARE
  2    devtype varchar2(256);
  3    done boolean;
  4  BEGIN
  5    devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
  6    sys.dbms_backup_restore.restoreSetDatafile;
  7    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\SYSTEM01.DBF');
  8    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\UNDOTBS01.DBF');
  9    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\SYSAUX01.DBF');
 10    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\USERS01.DBF');
 11    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\EXAMPLE01.DBF');
 12    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\TTS01.DBF');
 13    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>07,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\TS01.DBF');
 14    sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T151928_9306D1CQ_.BKP', params=>null);
 15    sys.dbms_backup_restore.deviceDeallocate;
 16  END;
 17  /

PL/SQL procedure successfully completed.


我试下在RMAN里面recover database会怎么样?
rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog04.txt
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 16:54:43 2013

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

已连接到目标数据库: ORCL (DBID=1327101518, 未打开)
使用目标数据库控制文件替代恢复目录

RMAN> recover database;
启动 recover 于 2013-09-11 16:54:51
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=153 devtype=DISK

正在开始介质的恢复

存档日志线程 1 序列 1 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC 存在于磁盘上
存档日志线程 1 序列 2 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC 存在于磁盘上
存档日志线程 1 序列 3 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC 存在于磁盘上
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC 线程 =1 序列 =1
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC 线程 =1 序列 =2
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC 线程 =1 序列 =3
无法找到存档日志
存档日志线程 =1 序列=4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/11/2013 16:54:58 上) 失败
RMAN-06054: 介质恢复正请求未知的日志: 线程 1 seq 4 lowscn 12315123114592

RMAN> 
--由于控制文件是我们重新创建的,现在RMAN里面recover database不能自动应用联机重做日志文件了,
下面在sqlplus下进行恢复

SQL> recover database using backup controlfile;
ORA-00279: change 12315123114592 generated at 09/11/2013 15:35:43 needed for
thread 1
ORA-00289: suggestion :
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_4_%U_.ARC
ORA-00280: change 12315123114592 for thread 1 is in sequence #4


Specify log: {=suggested | filename | AUTO | CANCEL}
E:\oracle\product\10.2.0\oradata\ORCL\REDO03.LOG --指定联机重做日志文件
Log applied.
Media recovery complete.

具体指定哪个联机重做日志文件,可以查询v$log
select group#,sequence#,first_change# from v$log;
1 2 12315123114535
2 3 12315123114582
3 4 12315123114592

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> alter database open resetlogs;

Database altered.

SQL> select * from t;--可以看到,数据已完全恢复

        ID NAME
---------- --------------------
         1 a
         2 b
         3 c
         4 d
         5 e
         6 f
         7 g
         8 h

8 rows selected.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26524307/viewspace-772584/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2012-04-16

  • 博文量
    37
  • 访问量
    631006