ASM环境中有关磁盘的操作要慎重

这两天遇到一个ASM损坏的案例,环境是AIX,单机ASM,采用/dev/rhdiskn字符设备直接做为ASM Disk。损坏的diskgroup无法mount,alert中记录错误如下:


NOTE: assigning ARB0 to group 1/0x5646ea2f (DATA)
WARNING: cache failed to read fn=279 indblk=0 from disk(s): 6
ORA-15196: invalid ASM block header [kfc.c:7910] [endian_kfbh] [279] [2147483648] [6 != 0]
NOTE: a corrupted block was dumped to the trace file
System State dumped to trace file /u01/app/oracle/admin/+ASM/bdump/+asm_rbal_950452.trc
NOTE: cache initiating offline of disk 6 group 1
WARNING: offlining disk 6.4247132900 (DATA_0006) with mask 0x3

从报错中可以知道disk 6的某个block损坏了,kfbh.endian=6,本来应该等于0的。Trace file中可以找到损坏块的dump信息:

kfgbRegister: registering group 1/0xA5A6EA25 (DATA)
kfgbBind: binding kfgpn for group 1/0xA5A6EA25 (DATA)
kfgbRecoverCod: queued COD recovery for group 1/0xa5a6ea25 (DATA)
kfgbPeelWaitCIC: ignored, not rebalancing gn=1
kfgbRegister: registering group 2/0xA5F6EA26 (FLASH_RECOVERY_AREA)
kfgbBind: binding kfgpn for group 2/0xA5F6EA26 (FLASH_RECOVERY_AREA)
kfgbRecoverCod: queued COD recovery for group 2/0xa5f6ea26 (FLASH_RECOVERY_AREA)
kfgbPeelWaitCIC: ignored, not rebalancing gn=2
kfgbRebalanceCont: continuing-op COD for group 1/a5a6ea25lx (DATA)
kfgbRebalGrp: queued rebalance (power 1) for group 1/0xa5a6ea25 (DATA)
OSM metadata block dump:
kfbh.endian: 6 ; 0x000: 0x06
kfbh.hard: 162 ; 0x001: 0xa2
kfbh.type: 0 ; 0x002: KFBTYP_INVALID
kfbh.datfmt: 0 ; 0x003: 0x00
kfbh.block.blk: 113817841 ; 0x004: T=0 NUMB=0x6c8b8f1
kfbh.block.obj: 581177085 ; 0x008: TYPE=0x2 NUMB=0x40efd
kfbh.check: 262 ; 0x00c: 0x00000106
kfbh.fcn.base: 2627010571 ; 0x010: 0x9c95000b
kfbh.fcn.wrap: 33554432 ; 0x014: 0x02000000
kfbh.spare1: 76002 ; 0x018: 0x000128e2
kfbh.spare2: 581177083 ; 0x01c: 0x22a40efb

这个比disk header损坏更严重,disk header中包含的信息有限,重建一下就可以恢复了。而具体的块损坏,则不可避免的导致数据丢失。后来发现导致块损坏的原因,居然是disk 6,对应的/dev/rhdisk8,被错误加入到一个vg当中了,这明显是一次误操作导致磁盘数据被覆盖了。在ASM环境中,对于磁盘操作,需要慎重,一个disk的损坏可能导致整个diskgroup无法使用,而且由于file分布在很多disk上,一个disk的损坏也会导致很多file失效,使得找回数据更加困难。

当然,这也可以说明另外一个问题,就是ASM还没有获得OS的足够支持。如果OS能够正确的识别ASM的Disk Header,就能够禁止该类型的操作,至少要给出提示,Oracle要推广ASM,还有很长的路要走。这也告诉我们,在DBA的日常操作中,要注重设计的简单性,文档的规范性和可操作性,并且操作要严格的安装手册执行。下命令前多检查,执行完后多监控,良好的习惯比任何高超的技巧都要来得有效



无觅相关文章插件,快速提升流量

12条评论

  • At 2008.03.10 11:37, xiaolong78x said:

    一般ASM都可以冗余呀,block一般都存在二个disks group中, 当一个坏了,另一个group的block信息可以被copy呀!

    • At 2008.03.10 12:38, NinGoo said:

      在外部存储已经采用raid的情况下,很多ASM都选择的是external冗余了,否则空间的浪费太严重了

      • At 2008.03.10 12:40, NinGoo said:

        另外纠正一下,ASM冗余是同一个extent冗余在同一个diskgroup的不同的fail group中,不是不同的diskgroup

        • At 2008.03.12 12:06, xiaolong78x said:

          thanks, 请问“被错误加入到一个vg当”,这里的vg是指什么?

          • At 2008.03.12 13:07, NinGoo said:

            volumn group。lvm没用过?

            • At 2008.03.12 13:59, xiaolong78x said:

              没用过, 可否解释下?受教了。

              • At 2008.03.12 16:09, NinGoo said:

                这个随便google一下一大堆,都比我解释得要清楚得多了

    • At 2008.03.11 13:55, anysql said:

      在存贮层规律时,也要有这种考虑,不要让一块盘影响太多的文件。

      • At 2008.03.12 08:44, boypoo said:

        看来ASM远比吹嘘的要差的多。
        吃螃蟹要有好的钳子吃起来才爽!:)

        • At 2008.03.13 10:40, xiaolong78x said:

          google了,LG就是几个磁盘或几个磁盘分区绑定在一起模拟成一个磁盘空间,LG=logical group, 好处是可以动态调整空间大小。

          • At 2009.12.11 10:53, 玉面飞龙 said:

            ASM仍然挺黑盒得。不知道在单实例数据库环境中用的多不多。

            • At 2009.12.11 13:56, NinGoo said:

              @玉面飞龙:我们在逻辑备库单实例上用了ASM


            (Required)
            (Required, will not be published)