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

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

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

    症状 运行RAC 和ASM的环境,在磁盘成为磁盘组一部分之前,必须验证它存在于群集的所有节中,验证失败会产生不同的结果,尤其对使用版本10.2.0.2及以下的环境而言。 10.2.0.2 及以下 磁盘群安装在执行操作的ASM 实例中,但是不安装在磁盘丢失群集的ASM 实例中 尝试安装磁盘群可能会产生类似错误: ORA-15001: diskgroup "1" does not exist or is not mounted ORA-15040: diskgroup is incomplete ORA-15066: offlining disk "" may result in a data loss ORA-15042: ASM disk "3" is missing or SQL> alter diskgroup test1 mount; alter diskgroup test1 mount * ERROR at line 1: ORA-15032: not all alterations performed ORA-15040: diskgroup is incomplete ORA-15042: ASM disk "1" is missing 添加磁盘到磁盘组时: SQL> alter diskgroup test1 add disk '/dev/asmdisk_KH5' force; alter diskgroup test1 add disk '/dev/asmdisk_KH5' force * ERROR at line 1: ORA-15032: not all alterations performed ORA-15075: disk(s) are not visible cluster-wide   10.2.0.3 及以上 从10.2.0.3开始, 如果不能在群集的所有节中验证磁盘,将不会添加到磁盘组,在这个过程中,磁盘的头部被格式化为带有有效信息,看起来像是一个有效的ASM 磁盘。 尝试删除磁盘会失败,产生错误ORA-15032和ORA-15054 SQL> alter diskgroup test drop disk '/dev/raw/raw8'; alter diskgroup test drop disk '/dev/raw/raw8' * ERROR at line 1: ORA-15032 : not all alterations performed ORA-15054 : disk "/DEV/RAW/RAW8" does not exist in diskgroup "TEST" 再次尝试添加磁盘会失败,产生错误ORA-15032和ORA-15020 SQL> alter diskgroup test add disk '/dev/raw/raw8'; alter diskgroup TEST add disk '/dev/raw/raw8' * ERROR at line 1: ORA-15032 : not all alterations performed ORA-15020 : discovered duplicate ASM disk "TEST_0005"   原因 10.2.0.2及以下 当磁盘添加到磁盘组时,必须通过群集的所有节进行验证,如果盘不存在于一个节点,在命令被执行(主实例)ASM实例的alert.log文件中,将会产生下列信息: SQL> ALTER DISKGROUP DG3_DBDATA ADD DISK '/dev/raw/raw8' SIZE 25595M Mon Dec 12 15:16:10 2005 NOTE: reconfiguration of group 1/0xfaa07f1e (DG3_DBDATA), full=1 Mon Dec 12 15:16:10 2005 NOTE: initializing header on grp 1 disk DG3_DBDATA_0003 NOTE: cache opening disk 3 of grp 1: DG3_DBDATA_0003 path:/dev/raw/raw8 NOTE: requesting all-instance disk validation for group=1 此时盘已被部分加入(接收姓名,号码,等等),它需要在所有的实例进行验证,群集中的其它实例将会触发磁盘浏览,读取磁盘头部,寻找新的添加的磁盘,如果在节中没有发现新磁盘,那么主实例(操作开始的地方)会在alert.log中产生下列信息:   NOTE: disk validation pending for group 1/0xfaa07f1e (DG3_DBDATA) SUCCESS: validated disks for 1/0xfaa07f1e (DG3_DBDATA) SUCCESS: refreshed PST for 1/0xfaa07f1e (DG3_DBDATA) Received dirty detach msg from node 1 for dom 1   从最后一条信息,我们可以确定没有发现磁盘的节:  from node 1. 审查特定节点的ASM实例的alert.log会发现这样的错误: NOTE: reconfiguration of group 1/0xfaa064f3 (DG3_DBDATA), full=1 NOTE: disk validation pending for group 1/0xfaa064f3 (DG3_DBDATA) ERROR: group 1/0xfaa064f3 (DG3_DBDATA): could not validate disk 3 SUCCESS: validated disks for 1/0xfaa064f3 (DG3_DBDATA) SUCCESS: refreshed PST for 1/0xfaa064f3 (DG3_DBDATA) ERROR: ORA-15040 thrown in RBAL for group number 1 Mon Dec 12 15:16:15 2005 Errors in file /oralog/+asm2_rbal_8654.trc: ORA-15040: diskgroup is incomplete ORA-15066: offlining disk "" may result in a data loss ORA-15042: ASM disk "3" is missing   如果磁盘组使用外部冗余,它将在那里的新磁盘未发现的情况下卸载,安装磁盘组之前,磁盘必须在所有节点可用。 10.2.0.3 及以上 从10.2.0.3开始, 情况变化了,此时,磁盘是不会被添加到磁盘组。同时,在没有发现磁盘的实例中产生的信息,会有一些不同: NOTE: reconfiguration of group 2/0xc9489bc5 (TEST), full=1 NOTE: disk validation pending for group 2/0xc9489bc5 (TEST) ERROR: group 2/0xc9489bc5 (TEST): could not validate disk 3   解决方法 10.2.0.2 及以下
  1. 请不要操作磁盘头部
请记住磁盘已经部分添加到磁盘组,这意味着它已经包括一个ASM头部和元数据, 磁盘组在一些节上可用,如果新盘的头部是在ASM外部改变,它不会让ASM配置磁盘。
  1. 不要卸载磁盘组
不要试图从它仍旧安装的ASM实例卸载磁盘组,同时,不要尝试重启节。
  1. 生成手动重新平衡 如果在创建磁盘组时报告出问题,将会在执行命令的ASM 实例上创建和安装它,但是在群集的其它节上安装磁盘组时,会报告一个错误,在安装磁盘组之前,验证磁盘存在于所有节中,紧跟着是步骤4和5的指导方针。 如果在添加磁盘到现存的磁盘组之后产生问题: 添加的磁盘处于“部分”状态,触发手动重新平衡将从磁盘组驱逐该磁盘,记住,磁盘组将会安装在执行命令的ASM 实例上。
SQL> alter diskgroup <DGNAME> rebalance power X; 查看V $ ASM_OPERATION,寻找与特定磁盘组有关的行,视图中没有行意味着没有重新平衡操作正在运行,要么没有运行,要么已经完成,尝试在没有安装的一个实例中安装磁盘组。 如果磁盘存在于所有节中,那么其它驱除磁盘的方式是执行下列命令: SQL> alter diskgroup <DGNAME> drop disk <DISK_NAME>; SQL> alter diskgroup <DGNAME> undrop disks; 它将触发一个重新平衡操作,移除不完整的磁盘。 在尝试再次添加磁盘之前,验证磁盘存在于群集中的所有节中。 10.2.0.3及以上 磁盘不是磁盘组的一部分,那么不要求它执行删除或重新平衡命令。 注意磁盘是如何显示在v$asm_disk上的。 在这个例子中, 磁盘正在使用ASMLIB
群号 磁盘号 路径 HEADER STATUS STATE NAME
0 8 ORCL:DISK4 MEMBER IGNORED  
1 0 ORCL:DISK1 MEMBER CACHED DISK1
2 1 ORCL:DISK2 MEMBER CACHED DISK2
3 2 ORCL:DISK3 MEMBER CACHED DISK3
下面的列标识磁盘不是任何磁盘组的一部分: MOUNT_STATUS = IGNORED GROUP_NUMBER = 0. 当磁盘组不安装磁盘时,使用这个号。 在有问题的磁盘上使用 kfed不要困惑, 因为它会显示一个有效的ASM 磁盘头,记住在操作一开始就被格式化了,但是如果过程失败将不会改变。 在验证磁盘存在于所有的节之后,清空磁盘的内容或者重建asmlib 磁盘,将它添加到磁盘组。 如何验证磁盘存在于群集的所有节上。   不要求所有节上的所有磁盘有相同的名称,当有大量磁盘时,这只会使管理相对容易些,对ASM而言,相关的是可以发现所有的磁盘(asm_diskstring),当磁盘在其它节得到验证时,ASM按顺序读取磁盘头部,以完成操作,在asm_diskstring 参数的基础上发现磁盘。 即便没有设置asm_diskstring 参数,也将浏览平台和那些目录的默认路径,将会发现有正确权限的设备。 导致磁盘不被发现的一些原因是: * 如果使用ASMLIB,在群集剩下的节中不会执行/etc/init.d/oracleasm scandisk命令, *不正确的权限。  Oracle用户不是拥有者,不能读取/写入。 * 磁盘不会存在任何名称之下。 * 在Linux中使用原连接时,原名称在节上是一致的,要么设备是不正确的(不同的磁盘),要么文件/proc/分区中有丢失的条目。 * 所有节的名称是一样的,但是它们不指向相同的设备。 * 在IBM AIX中,使用没有LVM的磁盘时, 磁盘有特定的属性 (表1).
存储类型 ATTRIBUTE VALUE
IBM STORAGE (ESS,FasTt,DSXXX) reserve_policy no_reserve
EMC STORAGE reserve_lock no
表 1 例如,使用ESS磁盘,用reserve_policy=single_路径配置它们, 使得只能在一个节点上安装磁盘组,作为一个额外的配置, dd命令可用于在第二个节上从设备读取,在操作系统级别上该操作的失败证明原因和磁盘配置有关。 lsattr -E -l hdisk19|grep reser reserve_policy no_reserve Reserve Policy True lsattr -E -l hdisk21|grep reser reserve_policy single_path Reserve Policy True *********** Wont be discovered in a second node 如何验证磁盘在所有节上是相同的。 *如果使用ASMLIB,在所有节上运行 /etc/init.d/oracleasm listdisk ,验证输出是一样的,其他的选择是运行 ls -l /dev/oracleasm/disks * 使用 kfed to 回顾头的内容。 在每个节点上执行: $kfed read <devicename> text=name.txt * 比较txt文件的输出,必须是一样的。 * In the node where the disk was discovered, this is part of the valid output: fbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0 kfbh.block.obj: 2147483649 ; 0x008: TYPE=0x8 NUMB=0x1 kfbh.check: 3189683974 ; 0x00c: 0xbe1eb706 /* SOME DATA REMOVED INTENTIONALLY */ kfdhdb.dsknum: 1 ; 0x024: 0x0001 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: DATA_0001 ; 0x028: length=9 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: DATA_0001 ; 0x068: length=9 * In the failing node, if the disk is not the same, you will get different output or the operation will fail. KFED-00303: unable to open file ''