解決ORA-15036:disk is truncated錯誤

qqmengxue發表於2010-11-12

問題出現的版本:

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.kfed

3、重新掛載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部落格 ” ,連結:http://blog.itpub.net/10130206/viewspace-1041376/,如需轉載,請註明出處,否則將追究法律責任。

相關文章