Blog
Conectando na SGA usando uma conexão SQL*Plus Preliminar
Diversas vezes encontramos ambientes onde o numero de processos permitidos estourou (ORA-00020: maximum number of processes (%s) exceeded), e agora qual a solução? Reiniciar o database ou começar a matar sessões?
Estas ações muitas vezes podem mascarar o problema ou não serem permitidas pois podem significar mais trabalho..
Uma "solução" introduzida na versão 10G é a conexão preliminar, onde permite a conexão diretamente com a SGA sem abrir uma sessão no bando de dados.
Abrindo uma conexão preliminar e tentando executar um select (erro):
[oracle@orcl ~]$ sql -prelim / as sysdba SQL*Plus: Release 11.1.0.6.0 - Production on Wed Feb 22 12:18:22 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. SQL> select * from tab; select * from tab * ERROR at line 1: ORA-01012: not logged on Process ID: 0 Session ID: 0 Serial number: 0
Outra forma de iniciarmos a conexão preliminar é:
[oracle@orcl ~]$ sql /nolog SQL*Plus: Release 11.1.0.6.0 - Production on Fri Feb 24 13:36:58 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. SQL> set _prelim on SQL> conn / as sysdba Prelim connection established
Através do comando ORADEBUG podemos rastrear qualquer processo ou sessão gerando assim um arquivo trace para dentro do diretório configurado no parâmetro background_dump_dest.
[oracle@orcl ~]$ ps -ef| grep -i ora_dbw| grep -v grep oracle 11749 1 0 13:29 ? 00:00:00 ora_dbw0_orcl11g [oracle@orcl ~]$
[oracle@orcl ~]$ sql -prelim / as sysdba SQL*Plus: Release 11.1.0.6.0 - Production on Fri Feb 24 13:44:46 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. SQL> oradebug setorapname DBW0 Oracle pid: 10, Unix process pid: 11749, image: oracle@orcl.anderson (DBW0) SQL> oradebug unlimit; Statement processed. SQL> oradebug event 10046 trace name context forever, level 12 Statement processed. SQL> oradebug tracefile_name /u01/app/oracle/diag/rdbms/orcl11g/orcl11g/trace/orcl11g_dbw0_11749.trc SQL> !tail -f /u01/app/oracle/diag/rdbms/orcl11g/orcl11g/trace/orcl11g_dbw0_11749.trc *** 2012-02-24 13:46:49.252 Finished processing ORADEBUG command (#6) 'tracefile_name' WAIT #0: nam='rdbms ipc message' ela= 995049 timeout=300 p2=0 p3=0 obj#=-1 tim=1330102009264004 *** 2012-02-24 13:46:51.275 WAIT #0: nam='rdbms ipc message' ela= 2010785 timeout=201 p2=0 p3=0 obj#=-1 tim=1330102011274975 *** 2012-02-24 13:46:54.276 WAIT #0: nam='rdbms ipc message' ela= 3001026 timeout=300 p2=0 p3=0 obj#=-1 tim=1330102014276241 *** 2012-02-24 13:46:57.277 WAIT #0: nam='rdbms ipc message' ela= 3000305 timeout=300 p2=0 p3=0 obj#=-1 tim=1330102017277006
Um case muito interessante utilizando a conexão preliminar foi publicado pelo Arup Nanda em seu blog, vale a pena conferir!
Diagnosing Library Cache Latch Contention: A Real Case Study