这个确实不好说,毕竟谁的问题都得讲证据,况且还有个大锅在上面,肯定得先紧着撇清自己,每个产品都有自己的检查校验工具,从emc工程师的角度看,跑完测试没问题,确实也能甩一甩了。
1. 从Oracle写的路径链条看: 文件系统(asm)----> 设备驱动 ----> 适配器链路 ----> 存储控制器 ----> 磁盘,如果有硬件故障,或者链条里的一个任何一个环节有bug,都会导致写异常。
2. 从oracle的角度看,oracle的坏块分两种:
物理损坏:每个块头有校验字段,每次从内存写入磁盘会计算一个值写进去,下次从磁盘读的时候再计算对比,两个值对不上了就是物理损坏,校验和或块头损坏都可能导致这个问题,Oracle识别不了这个块了。这种的硬件可能性会偏大点, 一般会报1578的错,alert和trc有明细。 比如早些年遇到的ds系列存储的一个经典故障,不可读坏块,会在存储层对不可读的块清零,从而导致Oracle出现坏块,整个数据块全是0,而且存储也有报错,这种责任就很容易界定了。
记得Oracle有个文章专门描述了数据块损坏的各种类型,可以翻翻看看
逻辑损坏:块头校验没问题,块内容不一致了,比如软件bug导致的写丢失等。
rman备份的时候会先把块拷到缓冲区,相当于默认做了物理一致性检查,所以物理块损坏的可能大点,建议结合日志和trc再好好看看,查一下mos,看看是否命中bug之类的,当然这样不是说责任在oracle,毕竟准备的越充分,后面讨论的把握会更大一些。