I met someone at Rocky Mountain User Group Training Days 2009 who mentioned that they enjoyed my Little Things Doth Crabby Make…series ( found here). I was reminded of that this morning as I suffered the following Oracle Database 11g Automatic Storage Management (ASM) issue:
$ sqlplus '/ as sysdba' SQL*Plus: Release 11.1.0.7.0 - Production on Thu Feb 19 09:33:53 2009 Copyright (c) 1982, 2008, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ASM instance started Total System Global Area 283930624 bytes Fixed Size 2158992 bytes Variable Size 256605808 bytes ASM Cache 25165824 bytes ORA-15032: not all alterations performed ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA2" ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA1"
Ho hum. I know the disks are there. I’ve just freshly configured this system. After all, this is Exadata and configuring ASM to use Exadata couldn’t be easier as you simply list the IP addresses of the Exadata Storage Servers in a text configuration file. No more ASMLib sort of stuff. Just point and go.
SQL> select count(*) from v$asm_disk; COUNT(*) ---------- 24
See, even ASM agrees with me. I set up 12 disks for each diskgroup and viola, there they are.
KFOD
There is even a nice little command line tool that ships with Oracle Database 11g 11.1.0.[67] that reports what Exadata disks are discovered. This is a nice little tool. It shows that I have 12 Exadata “griddisks” (ASM disks really) of 20GB and another 12 of 200GB all within a single Exadata Storage Server (for testing purposes). Note, it also reports a list of other ASM instances in the database grid.
$ kfod -disk all -------------------------------------------------------------------------------- Disk Size Path User Group ================================================================================ 1: 20480 Mb o/192.168.50.32/data1_CD_10_cell06 <unknown> <unknown> 2: 20480 Mb o/192.168.50.32/data1_CD_11_cell06 <unknown> <unknown> 3: 20480 Mb o/192.168.50.32/data1_CD_12_cell06 <unknown> <unknown> 4: 20480 Mb o/192.168.50.32/data1_CD_1_cell06 <unknown> <unknown> 5: 20480 Mb o/192.168.50.32/data1_CD_2_cell06 <unknown> <unknown> 6: 20480 Mb o/192.168.50.32/data1_CD_3_cell06 <unknown> <unknown> 7: 20480 Mb o/192.168.50.32/data1_CD_4_cell06 <unknown> <unknown> 8: 20480 Mb o/192.168.50.32/data1_CD_5_cell06 <unknown> <unknown> 9: 20480 Mb o/192.168.50.32/data1_CD_6_cell06 <unknown> <unknown> 10: 20480 Mb o/192.168.50.32/data1_CD_7_cell06 <unknown> <unknown> 11: 20480 Mb o/192.168.50.32/data1_CD_8_cell06 <unknown> <unknown> 12: 20480 Mb o/192.168.50.32/data1_CD_9_cell06 <unknown> <unknown> 13: 204800 Mb o/192.168.50.32/data2_CD_10_cell06 <unknown> <unknown> 14: 204800 Mb o/192.168.50.32/data2_CD_11_cell06 <unknown> <unknown> 15: 204800 Mb o/192.168.50.32/data2_CD_12_cell06 <unknown> <unknown> 16: 204800 Mb o/192.168.50.32/data2_CD_1_cell06 <unknown> <unknown> 17: 204800 Mb o/192.168.50.32/data2_CD_2_cell06 <unknown> <unknown> 18: 204800 Mb o/192.168.50.32/data2_CD_3_cell06 <unknown> <unknown> 19: 204800 Mb o/192.168.50.32/data2_CD_4_cell06 <unknown> <unknown> 20: 204800 Mb o/192.168.50.32/data2_CD_5_cell06 <unknown> <unknown> 21: 204800 Mb o/192.168.50.32/data2_CD_6_cell06 <unknown> <unknown> 22: 204800 Mb o/192.168.50.32/data2_CD_7_cell06 <unknown> <unknown> 23: 204800 Mb o/192.168.50.32/data2_CD_8_cell06 <unknown> <unknown> 24: 204800 Mb o/192.168.50.32/data2_CD_9_cell06 <unknown> <unknown> -------------------------------------------------------------------------------- ORACLE_SID ORACLE_HOME ================================================================================ +ASM1 /u01/app/oracle/product/db +ASM2 /u01/app/oracle/product/db +ASM3 /u01/app/oracle/product/db <pre>
I know why ASM is trying to mount these diskgroups because I set the parameter file to direct it to do so.
SQL> show parameter asm_diskgroups; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ asm_diskgroups string DATA1, DATA2
I suppose I should get some information about the diskgroups. How about names first:
SQL> select name from v$asm_diskgroup; no rows selected SQL> host date Thu Feb 19 09:37:25 PST 2009
Idiot! When you have several configurations “stewing” it is quite easy to miss a step. Today that seems to be forgetting to actually create diskgroups before I ask ASM to mount them.
SQL> startup force ASM instance started Total System Global Area 283930624 bytes Fixed Size 2158992 bytes Variable Size 256605808 bytes ASM Cache 25165824 bytes ORA-15032: not all alterations performed ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA2" SQL> select name from v$asm_diskgroup; NAME ------------------------------ DATA1 SQL> host date Thu Feb 19 09:44:21 PST 2009
Magic. I created the DATA1 diskgroup in a separate xterm and did a STARTUP FORCE.
Summary
Stupidity is one of those little things that doth crabby make. And, yes, the title of this blog post was a come-on. Who knows, however, someday there may be a flustered googler that’ll end up feeling crabby and stupid (like I do now) 🙂 after finding this worthless post.
Not completely useless since I am now aware of kfod 🙂
I think kfod is mentioned in expert oracle exadata also…on page 461..