quinta-feira, 3 de setembro de 2015

ORA-00020 : maximum number os processes exceeded


Este erro pode causar sérios problemas em um ambiente de produção, uma vez que na maioria das vezes requer um shutdown para resolver.
O peso do problema é que que os processos de parâmetro foi definido muito baixo no arquivo de parâmetro. Pode ser também que você calculou o valor do parâmetro corretamente, mas os usuários não são desligar de suas sessões e assim estão segurando processos e de ter atingido o limite.

O parâmetro processos especifica o número máximo de processos do usuário do sistema operacional que pode se conectar simultaneamente ao Banco Oracle. Seu valor deve permitir  todos os processos em segundo plano, processos de fila de trabalho e os processos de execução paralela. 

O número de processos em segundo plano de  um banco de dados depende da versão e recursos que você usar. 

É importante não definir esse parâmetro para um valor ridiculamente alto, como a 10000 quando você não terá mais de 1000 usuários simultâneos. À medida que cada processo iniciado é alocado memória e se você definir o parâmetro muito alto, você pode receber um ORA-00371: não o suficiente erro da memória pool compartilhado quando você tenta iniciar o banco de dados.

Portanto, se você receber um chamado onde os usuários reclamam de um ORA-00020 ou se você ver o erro no seu log de alerta, o que deve fazer? Se for um ambiente de produção e você quer evitar um shutdown, você pode começar por matar sessões inativas usando a seguinte consulta para determinar as sessões inativas:


SELECT USERNAME, SID, SERIAL#, STATUS FROM V$SESSION WHERE STATUS = ‘INACTIVE’;


Em seguida execute a seguinte Query para matar a sessão;


ALTER SYSTEM KILL SESSION ’7,15′; (Where 7 is the SID and 15 is the SERIAL#)

A correção acima só é possível se você mesmo é capaz de garantir uma conexão. Se você já estava conectado como SYSDBA, em seguida, a sessão será suficiente, mas se não você terá que matar um processo para obter-se conectado.

Fazê-lo no sistema operacional da seguinte forma:

ps -ef |grep oracleMDB1 (Onde oracleMDB1 é o SID do banco de dados)

O Resultado é esse: 

oracle 4144 1 0 05:36 ? 00:00:00 ora_w000_MDB1


Proximo passo é matar a sessão:


kill -9 4144 (4144 é o ID do Processo)

Isso vai matar o processo e emitir um ORA-03135: conexão perdida mensagem de erro contato quando o usuário tenta acessar a sessão. O problema aqui é que você não pode ter certeza se o processo estava ativo ou não.

Finalmente, se você matar processos suficientes e precisa aumentar o valor dos processos, em seguida, faça o seguinte:

Login sysdba

Verifique o valor dos parametros;

show parameter sessions; 
show parameter processes;
show parameter transactions;


Se você tem a intenção de aumentar o numero de processos, você tambem terá que modificar o numero de sessões e transações.

Para não colocar qualquer numero a Oracle indica uma conta simples para definir esses parâmetros;

processes=x
sessions=x*1.1+5
transactions=sessions*1.1

Definido o valor será necessário apenas modificar o parametro se você utiliza o SPfiles;

alter system set processes=xxx scope=spfile;
alter system set sessions=xxx scope=spfile;
alter system set transactions=xxx scope=spfile;

shutdown immediate 
startup


Boa Sorte DBAs

Bjs

Mari












Nenhum comentário:

Postar um comentário