RMAN学习9——丢失联机redolog的恢复

1、丢失非当前的联机redolog

(1)查看哪些redolog是非当前文件

SQL> select GROUP#, ARCHIVED,STATUS, FIRST_TIME from V$log;
    GROUP#  ARC STATUS           FIRST_TIME
---------- --- ---------------- --------------
         1   YES INACTIVE         18-7月 -12
         2   NO  CURRENT          19-7月 -12
         3   YES UNUSED
SQL> select group#,member from V$logfile;
    GROUP#                              MEMBER
--------------------------------------------------------------------------------
         3                      D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
         2                      D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
         1                      D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
SQL>

可以看出来一个文件是当前联机redolog,一个是非当前,一个还没有使用,我们删除这个INACTIVE状态的,也就是D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG

(2)删除非联机的redolog

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  535662592 bytes
Fixed Size                  1334380 bytes
Variable Size             209716116 bytes
Database Buffers          318767104 bytes
Redo Buffers                5844992 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
SQL>

(3)恢复redolog

SQL> alter database clear logfile group 1;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL>

由于丢失的并不是当前的联机redolog,不会造成数据丢失,只需要重建改组redolog就可以了。

————————————————————————————————————————————————————————————————————————————

2、丢失当前的联机redolog

这种情况一般会丢失数据,即使有备份,恢复的时候也是只能不完全恢复。有时候运气好,这段时间没有数据改变,估计不会丢失数据

(1)查找当前的联机redolog

SQL>  select GROUP#, ARCHIVED,STATUS, FIRST_TIME from V$log;
    GROUP# ARC STATUS           FIRST_TIME
---------- --- ---------------- --------------
         1 YES UNUSED           18-7月 -12
         2 NO  CURRENT          19-7月 -12
         3 YES UNUSED
SQL>  select group#,member from V$logfile;
    GROUP#           MEMBER
--------------------------------------------------------------------------------
         3             D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
         2             D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
         1             D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
SQL>

(2)删除当前联机redolog

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area  535662592 bytes
Fixed Size                  1334380 bytes
Variable Size             209716116 bytes
Database Buffers          318767104 bytes
Redo Buffers                5844992 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员
ORA-00312: 联机日志 2 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'
SQL>

(3)尝试修复联机重做日志

SQL> alter database clear logfile group 2;
alter database clear logfile group 2
*
第 1 行出现错误:
ORA-00350: 日志 2 (实例 orcl 的日志, 线程 1) 需要归档
ORA-00312: 联机日志 2 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'
SQL>

看来用恢复非当前联机redolog那一招不管用


(4)执行不完全恢复

如果有备份并且是归档模式,可以尝试用过备份进行不完全恢复

RMAN> restore database;
启动 restore 于 19-7月 -12
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=148 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTE
M01.DBF
通道 ORA_DISK_1: 将数据文件 00002 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAU
X01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOT
BS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS
01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 D:\APP\ADMINISTRATOR\ORADATA\ORCL\PRODU
CT.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\
BACKUPSET\2012_07_19\O1_MF_NNNDF_TAG20120719T155846_80HHKQDP_.BKP
通道 ORA_DISK_1: 段句柄 = D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\BACKUPSE
T\2012_07_19\O1_MF_NNNDF_TAG20120719T155846_80HHKQDP_.BKP 标记 = TAG20120719T155
846
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:45
完成 restore 于 19-7月 -12

RMAN> recover database;
启动 recover 于 19-7月 -12
使用通道 ORA_DISK_1


正在开始介质的恢复
无法恢复介质
DBGANY:     Mismatched message length! [16:29:15.562] (krmiduem)
DBGANY:     Mismatched message length! [16:29:15.562] (krmiduem)

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00600: internal error, arguments [3045] [] [] [] []
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/19/2012 16:29:15 上) 失败
ORA-00283: recovery session canceled due to errors
RMAN-11003: 在分析/执行 SQL 语句期间失败: alter database recover if needed
 start
ORA-00283: 恢复会话因错误而取消
ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员
ORA-00312: 联机日志 2 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

修复失败了,只能强制恢复了。

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
SQL>

《这个隐藏的初始化参数是oracle在open的时候会跳过一些一致性检查》

SQL> recover database until cancel;
ORA-00279: 更改 1475265 (在 07/19/2012 15:58:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_07_19\O1_MF_1_2_%U_.ARC
ORA-00280: 更改 1475265 (用于线程 1) 在序列 #2 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(1) from scott.dept;
  COUNT(1)
----------
         6
SQL>

由于执行了强制恢复,导致可能有些数据丢失,需要手动录入一些数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值