一、SPFILE丢失
步骤:
RMAN> startup nomount;
RMAN> set dbid 1354067853;
RMAN> restore spfile from autobackup;
或者通过某个文件:
RMAN> restore spfile from ‘path/file_name’;
RMAN> shutdown immediate;
set dbid 1354067853;
startup;
测试:
SQL> startup --删除SPFILE后,数据库打不开,报错。
ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITSORCL.ORA'
C:\Users\Administrator>rman target / --使用RMAN
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 09:38:35 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount; --使用RMAN在无SPFILE下启动到nomount
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INITSORCL.ORA'
在没有参数文件的情况下启动 Oracle 实例以检索 spfile
Oracle 实例已启动
系统全局区域总计 159383552 字节
Fixed Size 1289436 字节
Variable Size 58721060 字节
Database Buffers 92274688 字节
Redo Buffers 7098368 字节
RMAN> set dbid 1354067853; --设置DBID
正在执行命令: SET DBID
RMAN> restore spfile from autobackup;
启动 restore 于 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131113
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131112
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131111
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131110
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131109
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131108
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131107
通道 ORA_DISK_1: 没有找到 7 天之内的自动备份
--没有自动备份
RMAN> restore spfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_13\O1
_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP';
启动 restore 于 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 已找到的自动备份: E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_
11_13\O1_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 13-11月-13
--从指定备份文件中恢复
RMAN> shutdown immediate;
Oracle 实例已关闭
SQL> startup --启动数据库
ORACLE 例程已经启动。
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 339742272 bytes
Database Buffers 29360128 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
数据库已经打开。
二、Controlfile全部丢失
步骤:
RMAN> set dbid 1354067853;
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
或者从指定文件恢复:
RMAN> restore controlfile from ‘path/file_name’;
RMAN> alter database mount;
RMAN> recover database;(保证数据一致,因为控制文件里scn发生改变)
RMAN> alter database open resetlogs;
测试:
SQL> startup; --启动数据库报错
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 356519488 bytes
Database Buffers 12582912 bytes
Redo Buffers 7094272 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> select status from v$instance;
STATUS
------------
STARTED
SQL> select * from v$database;
select * from v$database
*
ERROR at line 1:
ORA-01507: database not mounted
SQL> shutdown abort;
ORACLE instance shut down.
C:\Users\Administrator>rman target / --使用RMAN
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 10:47:59 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> set dbid 1354067853; --设置DBID
正在执行命令: SET DBID
RMAN> startup nomount; --启动至nomount
Oracle 实例已启动
系统全局区域总计 377487360 字节
Fixed Size 1290688 字节
Variable Size 360713792 字节
Database Buffers 8388608 字节
Redo Buffers 7094272 字节
RMAN> restore controlfile from autobackup;
启动 restore 于 13-11月-13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
恢复区域目标: E:\oracle\product\10.2.0\flash_recovery_area
用于搜索的数据库名 (或数据库的唯一名称): ORCL
通道 ORA_DISK_1: 在恢复区域中未找到自动备份
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131113
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131112
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131111
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131110
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131109
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131108
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20131107
通道 ORA_DISK_1: 没有找到 7 天之内的自动备份
--没有自动备份
RMAN> restore controlfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_
13\O1_MF_NCSNF_TAG20131113T092124_985O1HY9_.BKP';
启动 restore 于 13-11月-13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:03
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_985T8O42_.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_985T8OHP_.CTL
完成 restore 于 13-11月-13
--使用指定的备份文件恢复
RMAN> alter database mount; --mount数据库
数据库已装载
释放的通道: ORA_DISK_1
RMAN> recover database; --恢复数据库
启动 recover 于 13-11月-13
启动 implicit crosscheck backup 于 13-11月-13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
已交叉检验的 1 对象
完成 implicit crosscheck backup 于 13-11月-13
启动 implicit crosscheck copy 于 13-11月-13
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 13-11月-13
搜索恢复区域中的所有文件
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_13\O1_MF_NCSNF_TAG201311
13T092124_985O1HY9_.BKP
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 3 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3
_93F18M64_.LOG 存在于磁盘上
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_93F18M64_.LOG 线
程 =1 序列 =3
介质恢复完成, 用时: 00:00:02
完成 recover 于 13-11月-13
RMAN> alter database open resetlogs; --resetlogs打开
数据库已打开
三、Redo Log File损坏
1、Current Online Redo损坏
这种情况在之前的文章中介绍过:
http://space.itpub.net/25744374/viewspace-776419/
这里再写一下步骤:
(1)、如果有归档和备份,可以用不完全恢复
SQL> startup mount;
SQL> recover database until cancel;先选择auto,尽量恢复可以利用的归档日志,然后重新执行:
SQL> recover database until cancel;这次输入cancel,完成不完全恢复,用resetlogs打开数据库:
SQL> alter database open resetlogs;
(2)、强制恢复,这种方法可能会导致数据不一致
SQL> startup mount;
SQL> alter system set “_allow_resetlogs_corruption”=true scope=spfile;
SQL> recover database until cancel;
SQL> alter database open resetlogs;
由于使用该方式打开会造成数据的丢失,且数据库的状态不一致,因此,这种情况下oracle建议通过exp方式导出数据库,重建新数据库后,再导入。
2、非Current损坏
这种情况下的恢复比较简单,因为redo log是已经完成归档或者正在归档,没有正在使用,可以通过v$log查看redo log的状态。
(1)、如果status是inactive,则表示已经完成了归档,直接清除掉这个redo log即可。
SQL> startup mount;
SQL> alter database clear logfile group 3;
SQL> alter database open;
测试:
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---
1 2 52428800 2 YES ACTIVE
2 3 52428800 2 NO CURRENT
3 1 52428800 2 YES INACTIVE
--当前INACTIVE状态的redo是group3
SQL> shutdown immediate; --关闭数据库,手工修改破坏group3日志
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --数据库启动报错
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 352325184 bytes
Database Buffers 16777216 bytes
Redo Buffers 7094272 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_93F18LGH_
.LOG'
ORA-00312: online log 3 thread 1: 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF
_3_93F18M64_.LOG'
--根据提示的错误,可以看出是group 3日志的问题,查看一下:
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----
1 2 52428800 2 YES INACTIVE
3 1 52428800 2 YES INACTIVE
2 3 52428800 2 NO CURRENT
SQL> alter database clear logfile group 3;
Database altered. --清除日志组3
SQL> alter database open; --打开数据库
Database altered.
(2)、如果status是ACTIVE状态,表示正在归档,此时需要使用如下语句:
SQL> startup mount;
SQL> alter database clear unarchived logfile group 3;
SQL> alter database open;
四、非系统表空间损坏
若出现介质故障导致某表空间不可用,恢复可以在数据库处于open或mount状态下进行,步骤如下:
1.将该表空间至于offline状态;
2.修复表空间数据;
3.恢复表空间并处于一致性;
4.将表空间online.
RMAN> sql ‘alter tablespace ts1 offline’;
如果文件不存在,就加immediate参数:
RMAN> sql ‘alter tablespace ts1 offline immediate’;
RMAN> restore tablespace ts1;
RMAN> recover tablespace ts1;
RMAN> sql ‘alter tablespace ts1 online’;
五、数据文件损坏
如果出现介质故障导致某表空间数据文件丢失(这种情况也可以参照表空间损坏的恢复),恢复可以在数据库处于open或mount状态下进行:步骤如下:
1.将数据文件置于offline状态;
2.修复数据文件(指定数据文件编号);
3.修复数据文件;
4.将数据文件online.
RMAN> sql ‘alter datafile 5 offline’;
RMAN> restore datafile 5;
RMAN> recover datafile 5;
RMAN> sql ‘alter datafile 5 online’;
测试:
SQL> startup
ORACLE instance started.
Total System Global Area 377487360 bytes
Fixed Size 1290688 bytes
Variable Size 352325184 bytes
Database Buffers 16777216 bytes
Redo Buffers 7094272 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\TS01.DBF'
--手工修改了表空间ts1的数据文件,数据库打开时报错
RMAN> restore datafile 5; --restore数据文件
启动 restore 于 13-11月-13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\TS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_
13\O1_MF_NNNDF_TAG20131113T134432_9864G11O_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_11_13\O1_MF_NNNDF_TAG20131
113T134432_9864G11O_.BKP 标记 = TAG20131113T134432
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:05
完成 restore 于 13-11月-13
RMAN> recover datafile 5; --recover数据文件
启动 recover 于 13-11月-13
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:03
完成 recover 于 13-11月-13
SQL> alter database open; --启动数据库
Database altered.
六、基于时间点/SCN/日志序列的不完全恢复
基于时间点/SCN/日志序列的不完全恢复,可以将数据库、表空间、数据文件等恢复至恢复备份集保存时间点中的任何一个时间点/SCN/日志序列,但须谨慎,操作前一定需要做好备份,具备条件的情况下最好先恢复到异机。
1、基于时间点
run{
set until time “to_date(‘11/13/13 13:00:00’,’mm/dd/yy hh24:mi:ss’)”;
restore database;
recover database;
alter database open resetlogs;
}
-------------------------------------------------
SQL> startup nomount;
SQL> alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;
SQL> recover database until time ‘2013-11-13 13:10:00’;
SQL> alter database open resetlogs;
-------------------------------------------------
SQL> startup mount;
SQL> recover database until time “to_date(‘2013-11-13 13:10:00’,’YYYY-MM-DD HH24:MI:SS’)”;
SQL> alter database open resetlogs;
2、基于SCN
RMAN> startup mount;
RMAN> restore database until scn 10000;
RMAN> recover database until scn 10000;
RMAN> alter database open resetlogs;
3、基于日志序列
RMAN> startup mount;
RMAN> restore database until SEQUENCE 100 thread 1;
//100是日志序列
RMAN> recover database until SEQUENCE 100 thread 1;
RMAN> alter database open resetlogs;
七、非catalog下完全恢复
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
测试:
--删除全部数据文件、控制文件
C:\Users\Administrator>rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 11月 13 16:46:40 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount;
Oracle 实例已启动
系统全局区域总计 377487360 字节
Fixed Size 1290688 字节
Variable Size 352325184 字节
Database Buffers 16777216 字节
Redo Buffers 7094272 字节
--restore控制文件
RMAN> restore controlfile from 'E:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET\2013_11_
13\O1_MF_NCSNF_TAG20131113T163801_986GN47H_.BKP';
启动 restore 于 13-11月-13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:01
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROLFILE\O1_MF_986H53FG_.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_986H53RV_.CTL
完成 restore 于 13-11月-13
RMAN> alter database mount; --mount数据库
数据库已装载
释放的通道: ORA_DISK_1
RMAN> recover database; --恢复数据库
启动 recover 于 13-11月-13
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 1 已作为文件 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1
_93F18H07_.LOG 存在于磁盘上
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_93F18H07_.LOG 线
程 =1 序列 =1
介质恢复完成, 用时: 00:00:03
完成 recover 于 13-11月-13
RMAN> alter database open resetlogs;
数据库已打开
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25744374/viewspace-776521/ ,如需转载,请注明出处,否则将追究法律责任。