Today I wanted to fine tune an Oracle DB memory consumption. I started to modifying a few parameters in initSID.ora files (links to all of them are in $ORACLE_HOME/dbs).
As part of the process I also changed processes parameter. To 20 – I know very stupid idea. I mean, I know now. I did usual dbshut and was about to do dbstart, but I have noticed that some DB processes are running. And they didn’t respond on usual kill command either. So I did second stupid thing – killed them with -9.
But what was my surprise when I saw following in startup.log:
SQL> ERROR:
ORA-00020: maximum number of processes (20) exceeded
$ORACLE_HOME/bin/dbstart: Database instance "MYDB" warm started.
and it wasn’t possible to login to the DB. Not even using sys user:
sqlplus / as sysdba
I had to ask my colleague and the reason for this behaviour was that there stayed 2 share memory blocks in the memory. Reboot would help, but you can use ipcs tool to delete the blocks:
$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x7d9f3370 4423680 oracle 660 4096 0
0x1e6e4598 4620289 oracle 660 4096 0
$ ipcrm -m 4423680
$ ipcrm -m 4620289
$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
That way, the init*.ora files finally took effect.