看了下面这个帖子,自己做了个实验
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_NNN
DF_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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26524307/viewspace-772584/