1.做一个RMAN的全备
E:\oracle\rman_scripts>rman catalog rman/rman@rman target sys/sys@orasjh
恢复管理器: Release 10.2.0.1.0 - Production on 星期二 3月 10 14:52:50 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: ORASJH (DBID=2615173674)
连接到恢复目录数据库
RMAN> @full_back_db.sql
RMAN> # start backup database
2>
3> run {
4> allocate channel c1 type disk;
5> backup format 'E:\oracle\rman_backup\full%u_%s_%p' database
6> plus archivelog format 'E:\oracle\rman_backup\archive_%d_%T_%s' delete all in
put;
7> release channel c1;
8> }
分配的通道: c1
通道 c1: sid=143 devtype=DISK
启动 backup 于 10-3月 -09
当前日志已存档
通道 c1: 正在启动存档日志备份集
通道 c1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =235 记录 ID=13 时间戳=681062941
输入存档日志线程 =1 序列 =236 记录 ID=11 时间戳=681058773
输入存档日志线程 =1 序列 =237 记录 ID=12 时间戳=681062675
输入存档日志线程 =1 序列 =238 记录 ID=14 时间戳=681142722
输入存档日志线程 =1 序列 =239 记录 ID=15 时间戳=681144798
通道 c1: 正在启动段 1 于 10-3月 -09
通道 c1: 已完成段 1 于 10-3月 -09
段句柄=E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090310_12 标记=TAG20090310T145320
注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:02
通道 c1: 正在删除存档日志
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00235_0679223338.001 记录 ID=13 时间
戳 =681062941
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00236_0679223338.001 记录 ID=11 时间
戳 =681058773
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00237_0679223338.001 记录 ID=12 时间
戳 =681062675
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00238_0679223338.001 记录 ID=14 时间
戳 =681142722
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00239_0679223338.001 记录 ID=15 时间
戳 =681144798
完成 backup 于 10-3月 -09
启动 backup 于 10-3月 -09
通道 c1: 启动全部数据文件备份集
通道 c1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=E:\ORACLE\ORASJH\SYSTEM01.DBF
输入数据文件 fno=00002 name=E:\ORACLE\ORASJH\UNDOTBS01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\ORASJH\SYSAUX01.DBF
输入数据文件 fno=00004 name=E:\ORACLE\ORASJH\USERS01.DBF
通道 c1: 正在启动段 1 于 10-3月 -09
通道 c1: 已完成段 1 于 10-3月 -09
段句柄=E:\ORACLE\RMAN_BACKUP\FULL0DK9ISF4_13_1 标记=TAG20090310T145324 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:45
完成 backup 于 10-3月 -09
启动 backup 于 10-3月 -09
当前日志已存档
通道 c1: 正在启动存档日志备份集
通道 c1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =240 记录 ID=16 时间戳=681144850
通道 c1: 正在启动段 1 于 10-3月 -09
通道 c1: 已完成段 1 于 10-3月 -09
段句柄=E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090310_14 标记=TAG20090310T145412
注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:02
通道 c1: 正在删除存档日志
存档日志文件名 =E:\ORACLE\ORASJH\ARCHIVE\ARC00240_0679223338.001 记录 ID=16 时间
戳 =681144850
完成 backup 于 10-3月 -09
启动 Control File and SPFILE Autobackup 于 10-3月 -09
段 handle=C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\C-2615173674-20090310-00 commen
t=NONE
完成 Control File and SPFILE Autobackup 于 10-3月 -09
释放的通道: c1
RMAN>
RMAN> # end
2> **文件结尾**
RMAN>
2.创建一个新的数据文件。
SQL> select name from v$datafile;
NAME
-----------------------------------------
E:\ORACLE\ORASJH\SYSTEM01.DBF
E:\ORACLE\ORASJH\UNDOTBS01.DBF
E:\ORACLE\ORASJH\SYSAUX01.DBF
E:\ORACLE\ORASJH\USERS01.DBF
SQL> create tablespace sjh datafile 'E:\ORACLE\ORASJH\sjh.dbf' size 2m;
表空间已创建。
SQL> create table test tablespace sjh as select * from dba_users;
表已创建。
SQL> select count(*) from dba_users;
COUNT(*)
----------
11
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
3.模拟所有控制文件,数据文件的丢失。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
手工删除所有的控制文件,数据文件。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 71304572 bytes
Database Buffers 88080384 bytes
Redo Buffers 7139328 bytes
ORA-00205: ?????????, ??????, ???????
--删除了控制文件,数据库无法mount。
4.恢复
4.1恢复控制文件
E:\oracle\rman_scripts>rman catalog rman/rman@rman target sys/sys@orasjh
恢复管理器: Release 10.2.0.1.0 - Production on 星期二 3月 10 15:32:46 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: orasjh (未装载)
连接到恢复目录数据库
RMAN> restore controlfile to 'e:\contrl.bak' from autobackup;
启动 restore 于 10-3月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20090310
通道 ORA_DISK_1: 已找到的自动备份:
c-2615173674-20090310-01
通道 ORA_DISK_1: 从自动备份复原控制文件已完成
完成 restore 于 10-3月 -09
--因为RMAN的自动备份控制文件的选项已经打开,所以在创建数据文件的时候,控制文件自动备份了,这个备份不是全备时候的控制文件备份。为了模拟特定控制文件(没记录数据文件的创建),我们指定从全备中的备份集中恢复控制文件。
RMAN> restore controlfile to 'e:\contrl.bak' from 'C:\ORACLE\PRODUCT\10.2.0\DB_
1\DATABASE\C-2615173674-20090310-00';
启动 restore 于 10-3月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02
完成 restore 于 10-3月 -09
--将e:\contrl.bak copy到控制文件的所在目录并改名成:control1.ctl,control2.ctl,control3.ctl。
4.2恢复备份期间的归档日志
RMAN> restore archivelog sequence 240
2> ;
启动 restore 于 10-3月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=240
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090310_14
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\RMAN_BACKUP\ARCHIVE_ORASJH_20090310_14 标记 = TAG20090310T145
412
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:01
完成 restore 于 10-3月 -09
SQL> alter database mount; --因为恢复了控制文件,所以数据库能mount。
数据库已更改。
4.3还原数据文件
RMAN> restore database;
启动 restore 于 10-3月 -09
释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\ORASJH\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\ORASJH\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\ORASJH\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\ORASJH\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\RMAN_BACKUP\FULL0DK9ISF4_13_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\RMAN_BACKUP\FULL0DK9ISF4_13_1 标记 = TAG20090310T145324
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:45
完成 restore 于 10-3月 -09
4.4用备份控制文件恢复数据库
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 403337 (在 03/10/2009 14:53:24 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00240_0679223338.001
ORA-00280: 更改 403337 (用于线程 1) 在序列 #240 中
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 403361 (在 03/10/2009 14:54:10 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00241_0679223338.001
ORA-00280: 更改 403361 (用于线程 1) 在序列 #241 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00240_0679223338.001'
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 5: 'E:\ORACLE\ORASJH\SJH.DBF'
ORA-01112: 未启动介质恢复
SQL> select name from v$datafile;
NAME
-----------------------------------------------------------
E:\ORACLE\ORASJH\SYSTEM01.DBF
E:\ORACLE\ORASJH\UNDOTBS01.DBF
E:\ORACLE\ORASJH\SYSAUX01.DBF
E:\ORACLE\ORASJH\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005
--原来的控制文件中没有新加数据文件的记录,oracle自动生成一个缺省的文件名:UNNAMED00005
SQL> alter database create datafile 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNA
MED00005' as 'E:\ORACLE\ORASJH\SJH.DBF';
数据库已更改。
--可以通过CREATE AS方式修改控制文件中记录。继续应用所有归档和日志文件可以完成恢复。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 403554 (在 03/10/2009 14:59:44 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00241_0679223338.001
ORA-00280: 更改 403554 (用于线程 1) 在序列 #241 中
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 403840 (在 03/10/2009 15:01:54 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00242_0679223338.001
ORA-00280: 更改 403840 (用于线程 1) 在序列 #242 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00241_0679223338.001'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 423851 (在 03/10/2009 15:18:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00243_0679223338.001
ORA-00280: 更改 423851 (用于线程 1) 在序列 #243 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00242_0679223338.001'
指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\orasjh\REDO01.LOG
ORA-00310: 归档日志包含序列 241; 要求序列 243
ORA-00334: 归档日志: 'E:\ORACLE\ORASJH\REDO01.LOG'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 423851 (在 03/10/2009 15:18:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00243_0679223338.001
ORA-00280: 更改 423851 (用于线程 1) 在序列 #243 中
指定日志: {=suggested | filename | AUTO | CANCEL}
E:\ORACLE\ORASJH\REDO02.LOG
ORA-00310: 归档日志包含序列 242; 要求序列 243
ORA-00334: 归档日志: 'E:\ORACLE\ORASJH\REDO02.LOG'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 423851 (在 03/10/2009 15:18:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00243_0679223338.001
ORA-00280: 更改 423851 (用于线程 1) 在序列 #243 中
指定日志: {=suggested | filename | AUTO | CANCEL}
E:\ORACLE\ORASJH\REDO03.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。