问题出现的版本:
10.2.0.1-11.2.0.1,在任何平台都有可能出现。
问题描述:
这种错误会在单节点或者是RAC环境下出现。
在你准备mount ASM diskgruop(DG1)时,报以下错误:
ORA-15032: not all alterations performed
ORA-15036: disk 'ORCL:DATA10' is truncated
ORA-15036: disk 'ORCL:DATA09' is truncated
最近的操作:
在磁盘组DG1的ASM内新增了两块硬盘,ORCL:DATA09和ORCL:DATA10,并且在OS级别进行了resize。
原因分析:
系统管理员或者存储管理员分配了两块65530MB大小的空间,提供给ASM使用,ASM管理员或者DBA根据提供的两块空间通过ASMLIB创建了DATA09和DATA10,并且将新建的disk加入到了DG1磁盘组内,但是后来系统管理员或者是存储管理员又将先前的分配的大小由65530M降到了61530M,但是这次操作没有通知ASM/DBA管理员,所以在ASM上也没有进行ALTER DISKGROUP RESIZE DISK操作,在后来的时间内,想要将ASM磁盘进行挂载,先前的错误就发生了,并且ASM磁盘也不能挂载。
[@more@]解决方案:
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 disk的头信息:
$ kfed read /dev/oracleasm/disks/DATA09kfbh.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
...
以上信息看起来时完整没问题的,继续查看DATA10的。。。。
1.3 在ASM DISK的头信息中查看磁盘的大小:
$ 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
可以发现头信息中存储的大小事65530M
1.4查看和LUN有关联的disk大小:
# 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
以上的信息显示磁盘的大小仅为61530M(/dev/sdk1 and /dev/sdl1)
2、使用KFED工具来修正ASM头信息中的错误磁盘大小:
2.1读取ASM disk头信息并保存在文件内
$ kfed read /dev/oracleasm/disks/DATA09 > /tmp/DATA09_header.kfed
2.2 使用文本编辑器编辑/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 DISK的头信息:
$ kfed merge /dev/oracleasm/disks/DATA09 text=/tmp/DATA09_header.kfed
$ kfed merge /dev/oracleasm/disks/DATA10 text=/tmp/DATA10_header.kfed3、重新挂载ASM的磁盘组并且更新ASM信息
3.1以正确的权限登录ASM实例:
$ sqlplus / as sysdba (或者 'sqlplus / as sysasm' 11.1版本中)3.2重置磁盘的大小:
SQL> alter diskgroup DG1 resize disk DATA09 size 61530 M;
SQL> alter diskgroup DG1 resize disk DATA10 size 61530 M;
3.3重新卸载并挂载磁盘组以验证问题是否得到解决
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10130206/viewspace-1041376/ ,如需转载,请注明出处,否则将追究法律责任。