APPLIES TO:
Oracle Database - Enterprise Edition - Version 11.2.0.1 and later
Oracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Cloud Machine - Version N/A and later
Oracle Database Exadata Express Cloud Service - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later

SYMPTOMS:
Clusterware fails to start up due to ASM instance fails to start with ORA-4031:

[root@racnode1 bin]# ./crsctl start cluster
CRS-2672: Attempting to start 'ora.asm' on 'racnode1'
CRS-5017: The resource action "ora.asm start" encountered the following error:
ORA-04031: unable to allocate 16416 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","dbktb: trace buffer")
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/11.2.0/log/mcxoradb/agent/ohasd/oraagent_oracle/oraagent_oracle.log".
CRS-2674: Start of 'ora.asm' on 'racnode1' failed
CRS-2679: Attempting to clean 'ora.asm' on 'racnode1'
CRS-2681: Clean of 'ora.asm' on 'racnode1' succeeded
CRS-4000: Command Start failed, or completed with errors.

CAUSE:
The problem is caused by db_cache_size is wrongly set to 1GB for ASM instance which in turn causing ASM fails to start with ORA-4031.

Per alert_+ASM1.log:
Sun Sep 16 19:24:42 2012
MEMORY_TARGET defaulting to 411041792.
* instance_number obtained from CSS = 1, checking for the existence of node 0...
* node 0 does not exist. instance_number = 1
Starting ORACLE instance (normal)
...
Mon Sep 17 11:26:56 2012
ALTER SYSTEM SET db_cache_size='1G' SCOPE=SPFILE SID='*';
Mon Sep 17 11:27:33 2012
ALTER SYSTEM SET db_cache_size='1G' SCOPE=SPFILE;
Mon Sep 17 14:15:16 2012
ALTER SYSTEM SET db_cache_size='1G' SCOPE=SPFILE SID='+ASM1';
...
Mon Sep 17 14:18:39 2012
Shutting down instance (abort)
License high water mark = 11
Mon Sep 17 14:18:44 2012
MEMORY_TARGET defaulting to 1543503872.
* instance_number obtained from CSS = 1, checking for the existence of node 0...
* node 0 does not exist. instance_number = 1
Starting ORACLE instance (normal)
Errors in file /u01/app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_3376.trc (incident=116161):
ORA-04031: unable to allocate 16416 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","dbktb: trace buffer")
Incident details in: /u01/app/oracle/diag/asm/+asm/+ASM1/incident/incdir_116161/+ASM1_ora_3376_i116161.trc
Use ADRCI or Support Workbench to package the incident.
ASM instance is not a database instance, it does not require db_cache_size to be set. By default it is 0. By setting this parameter, it reduces the shared_pool_size which can be used by ASM instance, hence lead to ORA-4031.

SOLUTION:
1. Stop clusterware processes on all nodes
as root user:
# crsctl stop crs -f

2. Start clusterware on node 1 in exclusive mode
as root user:
# crsctl start crs -excl

3. Create a pfile (for example: /tmp/asmpfile.ora) with the content from alert_+ASM<x>.log under the section "System parameters with non-default values:", here is a simple example, please ensure to alter it per your ASM requirement:
MEMORY_TARGET=1543503872
large_pool_size = 12M
instance_type = "asm"
remote_login_passwordfile= "EXCLUSIVE"
asm_power_limit = 1
diagnostic_dest = "/u01/app/oracle"
Save the file, then start ASM instance manually as grid user, recreate spfile on its original diskgroup, eg:

$ sqlplus / as sysasm
SQL> startup pfile='/tmp/asmpfile.ora';
SQL> create spfile='+DATADG' from pfile='/tmp/asmpfile.ora';
SQL> shutdown immediate

4. Stop clusterware on node 1 and restart clusterware on all nodes:
as root user:
# crsctl stop crs -f
# crsctl start crs

5. Wait for a while, verify the clusterware status via:
$ crsctl stat res -t

 

Recent Posts

Start typing and press Enter to search