阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle在线 redo log文件丢失后的恢复

361次阅读
没有评论

共计 5664 个字符,预计需要花费 15 分钟才能阅读完成。

今天一个开发库启动不了了,发过来报错一看是日志文件损坏了 (见下图),接着说了一下前因后果。说是年前服务器掉电了,然后就再没有启动起来过。今天有人用才想到要处理。

Oracle 在线 redo log 文件丢失后的恢复

先说一下大体的思路,如果损坏的 redo log 是 INACTIVE 状态的,也就是实例崩溃恢复用不到的 redo log,那处理起来比较容易,直接 alter database clear logfile group #; 或 alter database clear unarchived logfile group #; 重建日志组就行了。建议重建日志文件级后对数据库做一个全库备份,特别是强制 clear 后,造成的归档日志文件断层。在如果损坏的 redo log 是 ACTIVE 或 CURRENT 状态的,也就是实例崩溃恢复需要用到的 redo log,那处理起来就比较麻烦了,损坏这种 redo log 就意味着丢失数据。

redo log 的三种状态:

  1. INACTIVE:日志对应的修改已经被写入硬盘
  2. ACTIVE:日志对应的修改还没有被写入硬盘
  3. CURRENT:实例正在使用的日志文件

由于这个开发库有种种的问题,恢复起来遇到了各种情况,这里用一个虚拟机上的数据库演示如果 CURRENT 或 ACTIVE 状态的日志文件损坏的情况下如何恢复。

1、构造场景

删除一张表的数据但不提交,然后在另一个会话中把数据库 shutdown abort。再删除所有的 redo log 文件。

#session 1
sys@ORCL>delete from zx;
 
2858 rows deleted.
#session 2
sys@ORCL>select group#,status from v$log;
 
    GROUP# STATUS
———- ————————————————
    1 INACTIVE
    2 ACTIVE
    3 CURRENT
 
sys@ORCL>shutdown abort;
Oracle instance shut down.
# 删除 redo log 文件
[oracle@rhel6 ~]$ cd /u02/app/oracle/oradata/orcl/
[oracle@rhel6 orcl]$ ls -l 
total 1944992
-rw-r—– 1 oracle oinstall  9748480 Feb 24 23:56 control01.ctl
-rw-r—– 1 oracle oinstall  9748480 Feb 24 23:56 control02.ctl
-rw-r—– 1 oracle oinstall 328343552 Feb 24 23:54 example01.dbf
-rw-r—– 1 oracle oinstall  52429312 Feb 24 23:54 redo01.log
-rw-r—– 1 oracle oinstall  52429312 Feb 24 23:55 redo02.log
-rw-r—– 1 oracle oinstall  52429312 Feb 24 23:55 redo03.log
-rw-r—– 1 oracle oinstall 545267712 Feb 24 23:54 sysaux01.dbf
-rw-r—– 1 oracle oinstall 796925952 Feb 24 23:54 system01.dbf
-rw-r—– 1 oracle oinstall  30416896 Feb 24 13:58 temp01.dbf
-rw-r—– 1 oracle oinstall 110108672 Feb 24 23:54 undotbs01.dbf
-rw-r—– 1 oracle oinstall  5251072 Feb 24 23:54 users01.dbf
[oracle@rhel6 orcl]$ rm redo*log
l[oracle@rhel6 orcl]$ ls -l
total 1791212
-rw-r—– 1 oracle oinstall  9748480 Feb 24 23:56 control01.ctl
-rw-r—– 1 oracle oinstall  9748480 Feb 24 23:56 control02.ctl
-rw-r—– 1 oracle oinstall 328343552 Feb 24 23:54 example01.dbf
-rw-r—– 1 oracle oinstall 545267712 Feb 24 23:54 sysaux01.dbf
-rw-r—– 1 oracle oinstall 796925952 Feb 24 23:54 system01.dbf
-rw-r—– 1 oracle oinstall  30416896 Feb 24 13:58 temp01.dbf
-rw-r—– 1 oracle oinstall 110108672 Feb 24 23:54 undotbs01.dbf
-rw-r—– 1 oracle oinstall  5251072 Feb 24 23:54 users01.dbf

2、启动数据库出现报错

idle>startup
ORACLE instance started.
 
Total System Global Area 1603411968 bytes
Fixed Size        2253664 bytes
Variable Size      1476398240 bytes
Database Buffers    117440512 bytes
Redo Buffers          7319552 bytes
Database mounted.
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: ‘/u02/app/oracle/oradata/orcl/redo02.log’
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

3、尝试使用 clear 方式重建日志组出现报错

idle>alter database clear logfile group 2;
alter database clear logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 2 thread 1: ‘/u02/app/oracle/oradata/orcl/redo02.log’
 
 
idle>alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 2 thread 1: ‘/u02/app/oracle/oradata/orcl/redo02.log’

从报错信息中可以看出 log 2 是实例崩溃恢复所需要的日志文件,不能直接重建。

4、这种情况下使用隐含参数_allow_resetlogs_corruption,创建 pfile,把 *._allow_resetlogs_corruption=TRUE 加入到 pfile 中。然后 mount 数据库,强制不完全恢复,再 open resetlogs

idle>create pfile=’/home/oracle/initorcl.ora’ from spfile;
 
File created.
[oracle@rhel6 orcl]$ vi /home/oracle/initorcl.ora
idle>shutdown immediate;
ORA-01109: database not open
 
 
Database dismounted.
ORACLE instance shut down.
idle>startup pfile=’/home/oracle/initorcl.ora’ mount;
ORACLE instance started.
 
Total System Global Area 1603411968 bytes
Fixed Size        2253664 bytes
Variable Size      1476398240 bytes
Database Buffers    117440512 bytes
Redo Buffers          7319552 bytes
Database mounted.
idle>show parameter _allow_
 
NAME                    TYPE                VALUE
———————————— ——————————— ——————————
_allow_resetlogs_corruption      boolean                  TRUE
idle>recover database until cancel;
ORA-00279: change 1023441 generated at 02/24/2017 23:54:54 needed for thread 1
ORA-00289: suggestion : /u02/app/oracle/product/11.2.4/db1/dbs/arch1_2_936817668.dbf
ORA-00280: change 1023441 for thread 1 is in sequence #2
 
 
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ‘/u02/app/oracle/oradata/orcl/system01.dbf’
 
 
ORA-01112: media recovery not started
 
 
idle>alter database open resetlogs;
 
Database altered.
 
idle>select open_mode from v$database;
 
OPEN_MODE
————————————————————
READ WRITE

可以看到现在数据库已经被 open 了。

5、再次查看第一步中被删除的数据的表,数据仍然存在说明丢失 CURRENT 或 ACTIVE 状态的日志文件会导致数据丢失。

idle>select count(*) from zx;
 
  COUNT(*)
———-
      2858

以上是在虚拟机上做测试的恢复过程,但是对于前面说到的开发库的恢复就没有这个过程简单了。可以说是解决了一个报错又出来新的报错。

在使用_allow_resetlogs_corruption 参数执行不完全恢复,open resetlogs 时,遇到了 ORA-01248

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01248: file 5 was created in the future of incomplete recovery

于是先把这个文件 offline drop

1 SQL> alter database datafile 5 offline drop;

再次 open resetlogs 时又遇到了 ORA-00704 和 ORA-01555

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 5 with name
“_SYSSMU5_4116806824$” too small
Process ID: 3396
Session ID: 573 Serial number: 51

由于现在的水平有限,在网上查资料也没有能解决这一系列的问题,最后没办法只能重建库,重新导数据了。

如果哪位遇到了类似的问题,而且解决了,也请分享一下经验。

其实上午在模拟这个问题的时候,在 open resetlogs 时还遇到了一个经典的报错 ORA-600 [2662],这个错误可以参考 http://www.linuxidc.com/Linux/2017-02/141074.htm

参考:http://www.linuxidc.com/Linux/2017-02/141073.htm

http://www.linuxidc.com/Linux/2012-02/53426.htm

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/141072.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5664字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7804788
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
使用1Panel面板搭建属于你的AI项目环境

使用1Panel面板搭建属于你的AI项目环境

使用 1Panel 面板搭建属于你的 AI 项目环境 在 AI 项目越来越火的今天,很多朋友都想自己动手搭建一...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...