如果自己搞不定可以找诗檀软件专业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
Comment