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

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

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

 

适用于:

Oracle Database - 企业版 - 版本 10.2.0.1 11.2.0.1 [版本10.2 11.2] 本文献的信息适用于任何平台。

注释: kfed 是一个Oracle 内部实用工具,不应该使用除非 Oracle Support建议使用,翻译 kfed输出不在本文范围内。

症状

在单个实例、 RAC 和任何 ASM版本中可以看到该问题 尝试安装 ASM 磁盘组 (DG1)失败,出现下列错误:

ORA-15032: not all alterations performed ORA-15036: disk 'ORCL:DATA10' is truncated ORA-15036: disk 'ORCL:DATA09' is truncated

变化

添加两个磁盘 ORCL:DATA09 ORCL:DATA10 ASM 磁盘组DG1. OS 级别重新设置磁盘大小

原因

系统/存储管理员展示了两个新的LUNs,每个65530 MB ASM使用的OS ASM 管理员/数据库管理员创建了带有那些LUN ASMLIB磁盘 DATA09 DATA10 ,添加磁盘到磁盘组 DG1,因为磁盘大小设置错误, 系统/存储管理员重新设置磁盘到指定大小 - 61530 MB,但是他们不建议ASM 管理员/数据库管理员进行这个改变,所有在ASM 级别不操作ALTER DISKGROUP RESIZE DISK ,下次尝试安装磁盘组时,会收到上述错误,不能进行磁盘组安装。

解决方法

1. 确认问题只是因为ASM元数据磁盘大小和实际的磁盘大小不匹配造成的,为此,使用 ASM实用工具 kfed OS 实用工具 fdisk. 1.1. 受影响的磁盘 (ORCL:DATA09 ORCL:DATA10) ASMLIB磁盘:

$ ls -l /dev/oracleasm/disks brw-rw---- 1 oracle dba 8, 2 Mar 14 11:25 DATA01 ... brw-rw---- 1 oracle dba 8, 161 Mar 14 11:25 DATA09 brw-rw---- 1 oracle dba 8, 177 Mar 14 11:25 DATA10

1.2.检查 ASM 磁盘头

$ kfed read /dev/oracleasm/disks/DATA09 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfdhdb.driver.provstr: ORCLDISKDATA09 ; 0x000: length=14 kfdhdb.dsknum: 4 ; 0x024: 0x0004 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: DATA09 ; 0x028: length=6 kfdhdb.grpname: DG1 ; 0x048: length=3 kfdhdb.fgname: DATA09 ; 0x068: length=6 kfdhdb.capname: ; 0x088: length=0 kfdhdb.crestmp.hi: 32934511 ; 0x0a8: HOUR=0xf DAYS=0x13 MNTH=0x2 YEAR=0x7da kfdhdb.crestmp.lo: 1158806528 ; 0x0ac: USEC=0x0 MSEC=0x7f SECS=0x11 MINS=0x11 kfdhdb.mntstmp.hi: 32934511 ; 0x0b0: HOUR=0xf DAYS=0x13 MNTH=0x2 YEAR=0x7da kfdhdb.mntstmp.lo: 1158852608 ; 0x0b4: USEC=0x0 MSEC=0xac SECS=0x11 MINS=0x11 kfdhdb.secsize: 512 ; 0x0b8: 0x0200 kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 ...

表明ASM磁盘头看起来良好,对磁盘 DATA10进行同样的操作... 1.3. 检查ASM 磁盘头中的磁盘大小:

$ kfed read /dev/oracleasm/disks/DATA09 | egrep "dskname|dsksize" kfdhdb.dskname: DATA09 ; 0x028: length=6 kfdhdb.dsksize: 65530 ; 0x0c4: 0x0000fffa

$ kfed read /dev/oracleasm/disks/DATA10 | egrep "dskname|dsksize" kfdhdb.dskname: DATA10 ; 0x028: length=6 kfdhdb.dsksize: 65530 ; 0x0c4: 0x0000fffa

表明两个磁盘头的磁盘大小都是65530 MB 1.4. 检查相关的LUNs (sd devices)的磁盘大小:

# ls -l /dev/sd* | egrep "8, 161|8, 177" brw-rw---- 1 root disk 8, 161 Mar 14 11:25 sdk1 brw-rw---- 1 root disk 8, 177 Mar 14 11:25 sdl1

标明上述最大和最小的设备号 1.5. OS级别获得磁盘大小:

# fdisk -l /dev/sdk Disk /dev/sdk: 68.7 GB, 68719476736 bytes 255 heads, 63 sectors/track, 8354 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdk1 1 7844 63006898+ 83 Linux # fdisk -l /dev/sdl Disk /dev/sdl: 68.7 GB, 68719476736 bytes 255 heads, 63 sectors/track, 8354 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdl1 1 7844 63006898+ 83 Linux

上述表明两个磁盘分区 (/dev/sdk1 and /dev/sdl1) 61530 MB.

2.  对磁盘 DATA09 DATA10,通过更新ASM 磁盘头使用kfed 实用工具纠正磁盘大小信息 2.1. 读取ASM 磁盘头,保存输出到文件:

$ kfed read /dev/oracleasm/disks/DATA09 > /tmp/DATA09_header.kfed

2.2.使用文本编辑器 (例如 vi) 编辑文件 /tmp/DATA09_header.kfed修改下列行: kfdhdb.dsksize: 65530 ; 0x0c4: 0x0000fffa to kfdhdb.dsksize: 61530 ; 0x0c4: 0x0000f05a 保存变化 对磁盘 DATA10重复:

$ kfed read /dev/oracleasm/disks/DATA09 > /tmp/DATA10_header.kfed

修改: kfdhdb.dsksize: 65530 ; 0x0c4: 0x0000fffa to kfdhdb.dsksize: 61530 ; 0x0c4: 0x0000f05a 2.3.更新ASM 磁盘头:

$ kfed merge /dev/oracleasm/disks/DATA09 text=/tmp/DATA09_header.kfed $ kfed merge /dev/oracleasm/disks/DATA10 text=/tmp/DATA10_header.kfed

3. 安装磁盘组,在ASM 级别更新磁盘大小信息 3.1. 使用正确的特权登陆 ASM实例

$ sqlplus / as sysdba (or 'sqlplus / as sysasm' in ASM version 11.1 and above)

3.2. 重新设置磁盘大小

SQL> alter diskgroup DG1 resize disk DATA09 size 61530 M; SQL> alter diskgroup DG1 resize disk DATA10 size 61530 M;

3.3. 卸载和安装磁盘组,确认没有错误的情况下安装。

参考文献 NOTE:1539387.1 - ORA-15036 After Applying Patch 12382627 BUG:20416464 - WRONG DISK SIZE SEEN BY ASM