今天接到一个客户的服务请求,由于服务器被强制重启,数据库无法启动
ORA-1200报错
这是一个常见的ORA-1200错误,但是文件大小相差的有离谱实际大小729600个block,但是现在只有149760个block.不像是一般主机重启导致的数据库异常.通过再次咨询客户实际是什么情况,客户那边如实描述:三个磁盘的raid 5由于两个盘掉线,后来使用最后一个好的盘和最后掉线的盘,强制拉起raid,系统启动通过长时间的自检之后,就是出现这样的情况.通过进一步检查发现,发现大多数数据文件异常.
文件系统中数据文件截图
![dbf-fs](https://i-blog.csdnimg.cn/blog_migrate/fc3d474bf20cbda132bb03bfe3ef1ab6.png)
通过查询数据库确定文件大小情况
![df_header_check](https://i-blog.csdnimg.cn/blog_migrate/bd02df3e1891c04e20c60b0d975d2389.png)
对比文件系统中的文件和数据库查询结果,可以发现绿色框中的文件全部大于文件系统中文件,蓝色框中的文件在文件系统中丢失.对于这样的情况,由于被强制online的磁盘中有坏道,导致文件系统损坏,从而出现大量文件大小异常甚至文件丢失;或者是由于选择错了上线的磁盘出现该问题(通过分析存在的文件,判断确定上线的盘没有问题),那就是文件系统故障导致.
底层重组恢复
解决该问题的方法是通过底层block恢复,重组oracle数据文件,并且检查恢复文件坏块情况.参考: Oracle 数据文件大小为0kb或者文件丢失恢复
![scan-disk](https://i-blog.csdnimg.cn/blog_migrate/60b5528a16fc6a95e1d0d93328d0dcb1.png)
分析文件坏块原因
![block-had](https://i-blog.csdnimg.cn/blog_migrate/521a1d1423e72da56b8266bbb0849418.png)
由于文件所在block被覆盖或者磁盘坏道导致这部分block直接被空块填充.
这个客户比较幸运,直接open数据库成功,坏坏块进行分析判断业务表空间数据文件的坏块全部为index,业务数据0丢失.