当存储Cache由于丢失时,我们应该如何处理,让数据库重新能够open起来呢?让我们听听,云和恩墨 ACE 李真旭分享的这篇案例。

发现问题

最近某客户的一套核心数据库由于存储问题导致清掉Cache之后无法启动。首先我们来看看数据库在启动的时候报什么错误:

错误并不复杂。可以看到Oracle这里已经无法正常写Redo logfile了。

解决思路

由于这套数据库是非归档,只有逻辑备份,因此即使恢复成功也面临数据丢失的可能性。

首先我在尝试进行恢复时,发现居然无法mount数据库,在mount过程中实例被直接终止了,感觉非常奇怪。也没有报非常明显的错误。mount过程出错,那么无疑是controlfile存在异常;由于没有controlfile备份,因此这里先手工重建控制文件,如下是脚本:

重建完毕后。其实这里我首先尝试了进行noresetlogs创建,但是发现报错:

很明显,Redo logfile有问题。

看来还是只能Resetlogs方式创建。创建完毕之后,尝试进行了recover database using backup controlfile until cancel恢复操作;然后通过隐含参数强制open发现还是有如下错误:

这是非常经典的错误了,由于这是scn的问题,而且数据库版本为11.2.0.3.0,未安装任何psu。因此这里是可以直接推进scn的。

直接通过10015 event 来推进数据库的scn;另外由于是异常关机,那么这里Undo 必然也无法进行正常恢复;因此同时设置 undo_management 参数为manual,并同时设置10015 event:

alter session set events ‘10015 trace name adjust_scn level 2’;

顺利打开了数据库。打开数据库之后立刻重建数据库Undo和temp,如下:

再次重启数据库之后,发现alert log仍然有一些错误。如下所示:

实际上当时在进行恢复时,我手工处理掉了obj# 290。但是进一步检查发现obj$,col_usage$ ,i_obj4# 都存在问题。而且不一致的记录还比较多:

最开始我还尝试通过bbed修复了2个Block;最后发现依然难以处理这个ora-08102错误;后续通过上述sql比较发现居然有如此多的记录不一致。修改起来太过麻烦了。

这里其实本来想尝试通过重建obj$,i_obj4$,col_usage$ 来解决的。但是担心有较大的风险,因此这里建议可以进行了数据库重建。由于obj$这里有问题,expdp操作都报错,无法执行任何ddl操作。因此最好通过exp拆分脚本来进行重建处理。整个数据库恢复+重建过程将近20小时左右(2tb左右的库).

由于客户存储环境io较差,因此导致整个重建过程比较复杂,比较耗时。我们在开玩笑讲到:如果可能的数据库运行在我们的Zdata环境上,那么数据库重建过程在2小时内即可完成,而且也不会出现类似故障。因此Zdata的io操作上直接落盘或者写到Pcie上,不存在数据丢失的风险

补充说明

1)  由于数据库很多事务无法正常恢复,导致SMON在不断尝试进行事务恢复时报错,达到一定次数之后会crash实例,进而影响数据库的重建工作。可通过设置_smon_internal_errlimit 参数来避免该问题。

2) 为了加快exp和imp速度,这里我们利用了管道技术,脚本如下:

推荐阅读:

关于cache buffers chains的经典案例处理详解

free cache 导致数据库实例crash

如何转储数据文件和Buffer Cache中的数据块

Cache Buffer Chain Latch等待事件

调整_lm_cache_res_cleanup解决Shared Pool 的4031问题

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

‘DBALIFE’,“DBA的一天”海报

‘DBA04’,DBA手记4经典篇章电子书

‘INTERNALS’,Oracle RAC PPT

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

故障诊断 | 存储Cache丢失导致数据库无法open的案例分享相关推荐

  1. oracle access表丢失,oracle 11.1.0.7-版本也会出现access$表丢失导致数据库无法启动

    oracle 11.1.0.7-版本也会出现access$表丢失导致数据库无法启动 发布时间:2017-06-23 20:10 来源:互联网 当前栏目:web技术类 下面我们来看看oracle 11. ...

  2. 【服务器数据恢复】MDisk重建,vdisk丢失导致数据库不可用的数据恢复案例

    服务器故障: 本案例需要进行数据恢复机器是一台IBM某型号存储,故障为vdisk丢失,操作系统中的Oracle数据库无法正常使用.管理员重建MDisk,把故障存储中的raid10重建为了raid6,然 ...

  3. 【北亚数据恢复】Hp DL380服务器raid磁盘故障导致数据库数据丢失的数据恢复案例

    环境: HP DL380服务器: 三块300GSAS硬盘: 数据库在D分区: 备份放在E分区. 故障: 一块硬盘出现故障,状态灯红色,RAID瘫痪,存储故障,D分区不能识别,E分区可识别,拷贝备份文件 ...

  4. oracle asm磁盘标签丢失导致整个集群和数据库启动失败

    oracle asm磁盘标签丢失导致整个集群和数据库启动失败 应用环境描述 一.硬件 1. 服务器:2台dell r610-16G内存.2颗6核xeon cpu.2个146G sas盘,做了raid1 ...

  5. oracle注册表重建,一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动问题。...

    一次Windows  注册表中注册表项目丢失导致的Oracle 数据库启动问题. 环境说明: 1.windows 2008操作系统 x64bit 2.Oracle database 11.2.0.1 ...

  6. oracle 注册表丢了,一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动有关问题...

    一次Windows 注册表中注册表项目丢失导致的Oracle 数据库启动问题. 一次Windows  注册表中注册表项目丢失导致的Oracle 数据库启动问题. 环境说明: 1.windows 200 ...

  7. moore 数据集_可计算存储:数据压缩和数据库计算下推

    "摩尔定律"失效指的是什么? 2016年2月9号<自然>杂志的<The chips are down for Moore's law>写到即将出版的国际半导 ...

  8. mysql sys库 oom_MySQL 5.6因为OOM导致数据库重启

    MySQL 5.6因为OOM导致数据库重启 发布时间:2020-08-09 08:29:53 来源:ITPUB博客 阅读:89 作者:feelpurple 线上的一套MySQL 5.6的从库,因为OO ...

  9. 又一例SPFILE设置错误导致数据库无法启动

    --======================================== --又一例SPFILE设置错误导致数据库无法启动 --============================== ...

最新文章

  1. Groovy中的闭包
  2. arduino项目_quot;Arduino智能车项目quot;实战班开班!
  3. 详解python中的用法_详解python中*号的用法
  4. js 两行之间的设置间距_防火间距
  5. Tensorflow入门神经网络代码框架
  6. JSP九大内置对象(转载)
  7. spring更新后 外层事务查不到_再深一点:面试工作两不误,源码级理解Spring事务...
  8. 俄亥俄州立大学计算机科学转学成功,俄亥俄州立大学转学成功率83.38%!!
  9. Jqgrid pager 关于“local” dataType 动态加载数据分页的研究(没好用的研究结果)...
  10. 哪里有现成的问卷调查数据_何去何从?被数据掩埋的「消费者旅程」
  11. 开源内网DNS服务器软件介绍
  12. STM32单片机远程升级
  13. 哪些股票自动交易接口好用呢?
  14. a标签下载图片 text
  15. CCProxy+Proxifier代理手机连接电脑(玩网游)支持VIST(防QQ不掉线)本文转载
  16. cobble批量装机原理与部署
  17. GIS:不同基准面坐标系转换
  18. 5种顶级逻辑思维训练法:1min 轻松上手,工作学习都能用
  19. DA14580的AD转换
  20. python读-Python之文件读写

热门文章

  1. vs2017c#开源项目_2017年值得关注的开源项目
  2. 香蕉派,蜘蛛侠手臂和USO世界
  3. HTML wbr元素
  4. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
  5. 视觉SLAM笔记(4) SLAM的数学表述
  6. 两个运放制作加法器_集成电路的分类及其制作工艺
  7. mysql log stats_MySQL慢查询之pt-query-digest分析慢查询日志
  8. java参数值注入_在springboot中使用注解将值注入参数的操作
  9. 4 linux编辑器
  10. appium常用参数(一)