Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > Oracle Database Instance Crashes If ASM Failgroup Is Overwritten By /dev/zero

Oracle Database Instance Crashes If ASM Failgroup Is Overwritten By /dev/zero

Oracle Database Instance Crashes If ASM Failgroup Is Overwritten By /dev/zero

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

[oracle@ocm_rac01 ~]$ oerr ora 27091
27091, 00000, "unable to queue I/O"
// *Cause: read/write/readv/writev system call returned error, additional
// information indicates starting block number of I/O
// *Action: check errno
[oracle@ocm_rac01 ~]$ oerr ora 27072
27072, 00000, "File I/O error"
// *Cause: read/write/readv/writev system call returned error, additional
// information indicates starting block number of I/O
// *Action: check errno

 

 

 

 

症状

为了在正常或高冗余磁盘组中测试failgroup故障,同一failgroup中的一个或多个磁盘通过复制/dev/zero 到ASM磁盘用dd被覆盖。

 

# dd if=/dev/zero of=/dev/sdd1 count=10000 bs=1048576

当dd 被执行时,有数据库事务正在运行.

数据库进程失败,错误类型ORA-1578, ORA-8103. 数据库实例崩溃.

 

Fri Jun 19 16:11:22 2009
Errors in file /apps/oracle10g_db/db/admin/frans/bdump/frans2_ckpt_10640.trc:
ORA-01243: system tablespace file suffered media failure
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: ‘+MULTI_DB/frans/datafile/system.265.689960079’
ORA-01251: Unknown File Header Version read for file number 1
Fri Jun 19 16:11:22 2009
CKPT: terminating instance due to error 1243
Fri Jun 19 16:11:22 2009
Errors in file /apps/oracle10g_db/db/admin/frans/bdump/frans2_lms0_10626.trc:
ORA-01243: system tablespace file suffered media failure
Fri Jun 19 16:11:22 2009
System state dump is made for local instance
System State dumped to trace file
/apps/oracle10g_db/db/admin/frans/bdump/frans2_diag_10618.trc
Fri Jun 19 16:11:23 2009
Shutting down instance (abort)

原因

由于介质故障数据库实例终止。dd 命令损坏ASM 磁盘的头, ASM 元数据文件以及所有的数据库块被用/dev/zero代替磁盘内容。写每个块到ASM 磁盘 (包括ASM 元数据和数据库块) ,且块的内容都清零。

注意:执行的测试并没有真正模拟正常冗余磁盘组可容忍的磁盘故障。通过损坏ASM和数据块头,对一个损坏场景进行测试。

万一 I/O 故障,会发生什么?

万一I/O 故障或由于元数据块中存在损坏,ASM会自动删除磁盘,但如果发现数据库块损坏,不会删除磁盘。

真正的 I/O 故障是由ORA-27091和 ORA-27072错误之后的操作系统错误返回的:
ORA-27091: unable to queue I/O
ORA-27072: File I/O error

 

AIX:

 

IBM AIX RISC System/6000 Error: 6: No such device or address
Additional information: 7
Additional information: 46213120
Additional information: -1

 

Linux:

Linux-x86_64 Error: 5: Input/output error
Additional information: 4
Additional information: 2056
Additional information: -1

 

HP-UX

 

HPUX-ia64 Error: 5: I/O error
Additional information: 4
Additional information: 1028
Additional information: -1

 

Solaris:

 

SVR4 Error: 5: I/O error
Additional information: 4
Additional information: 2048
Additional information: -1

当ASM从一个特定磁盘持续收到I / O故障,一定的超时后,它会删除磁盘。如果冗余正常/高,磁盘组可能仍保持安装。

万一损坏,会发生什么?

安装/拆卸磁盘组时,ASM一般读取磁盘头。通过ASM实例的续航时间,即使您损坏了ASM磁盘头, ASM可能无法识别其磁盘头被破坏。在进一步安装磁盘组上,头损坏的磁盘被脱机。如果有至少一个剩余failgroup,磁盘组仍保持安装。

在这种特殊情况下(用 /dev/zero取代ASM磁盘), 由于介质故障数据库实例被数据库编程人员终止。在 DBW0 终止实例之前,也有受损坏影响的其他后台进程 (CKPT, MMON, 等)

数据库检查点进程首先离线有写错误的数据文件(sysaux.dbf),因为它发现数据文件头有未知版本。
—– END DDE Actions Dump (total 0 csec) —–
ORA-01171: datafile 2 going offline due to error advancing checkpoint
ORA-01122: database file 2 failed verification check
ORA-01110: data file 2: ‘+DATA/trak/datafile/sysaux.258.691597183’
ORA-01251: Unknown File Header Version read for file number 2
ksfdrfms:Mirror Read file=+DATA/trak/controlfile/current.257.691597093 fob=473c07388
bufp=ffffffff7b630400 blkno=816 nbytes=16384
ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=DATA_0001
path=/dev/rdsk/emcpower22a

 

ORA-1251的原因是数据文件介质损坏,在当前版本中,Oracle 文件头不能从mirror重读。这在版本11.2中有改进,修复了未公布的 Bug 5932237.

同样的场景在Bug 8462627下进行测试,Bug 8462627是未公布Bug 5932237的一个副本。
未公布的Bug 5932237在版本11.2和即将到来的补丁集版本10.2.0.5 和 11.1.0.8中被修复。

Bug 8462627 ASM INSTANCE DOES NOT READ MULTIPLEXED DISK
Unpublished Bug 5932237 DATAFILE HEADER READ SHOULD READ FROM MIRRORS IF VALIDATION FAILS

解决方案

首先,注意:覆盖磁盘头不能模拟一个真正的磁盘故障。它仅仅模拟 asm 磁盘头损坏 (或更多数据块损坏,如果许多块被覆盖的话)。

为模拟真正的磁盘故障,系统管理员应通过在系统/硬件级别从存储阵列拔下或隐藏磁盘来执行测试。

一旦磁盘内容损坏,由于已知未公布的Bug 5932237,数据文件的文件头不能从mirror读取,数据库实例崩溃。

未公布的Bug 5932237在版本11.2和即将到来的补丁集版本10.2.0.5 和 11.1.0.8中已被修复。