http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:453256655431#65270909632298
explica , mas resumidamente é o seguinte :
a) o limite de IDLE_TIME é aplicado pelo PMON, é ele que marca a sessão pra ser
removida quando o tempo se esgota - o ponto é que o PMON **** Não **** fica
constantemente a cada segundo ativo checando isso , então num banco muito
ativo, que tem muitos outras trabalhos pra executar, pode demorar pracas pro
pmon ser ativado
b) o funcionamento é : após a sessão ficar marcada pelo PMON, apenas quando a
sessão tentar enviar algum trabalho pro database é que aí sim o banco envia a
msg "vc foi desconectado" , e aí sim, com o usuário Notificado, a sessão pode
ser removida
c) isso funciona APENAS e TÃO SOMENTE pra sessões aonde NÃO haja um pool de
conexões, ou mecanismos assemelhados que removem o controle de sessões do banco
d) ululantemente Óbvio, IDLE é a sessão que está conectada , não fazendo nada
MAS 'saudável', presente, com a máquina cliente lá ativa e bonitinha... CLARO,
se o usuário desliga a máquina , ou fecha a aplicação no X da janela, ou tem um
crash, enfim QUALQUER saída não-limpa, via de regra IDLE_TIME não vai funcionar
pra isso, pra esses casos vc implementa o DCD (dead client detection)
OKDOC ? Sendo assim, SE vc quiser algo diferente desse comportamento, vc cria
um JOB pra eliminar as sessões que queira, quando e onde queira... E lembro
também que além de poder especificar IDLE_TIME e DCD, vc ainda tem a chance de
limitar TEMPO TOTAL DE CONEXÃo num profile, o que muitas vezes é apropriado
também, nesse processo de controlar usuários... Num banco sem controle, vc se
arrisca a ter aberrações tal como a que eu tive hoje no trabalho, um snapshot
too old pra uma query com duzentos e não sei quanto mil como Duration ... gee,
it´s too bad ...
==> Meu exemplo de IDLE_TIME num banco 10.2.0.5 EE na minha máquina pessoal,
sem nenhum job rodando no momento :
SYSTEM@o10gr2:SQL>show parameters limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit integer 1
java_soft_sessionspace_limit integer 0
resource_limit boolean FALSE
SYSTEM@o10gr2:SQL>alter system set resource_limit=TRUE;
Sistema alterado.
==> vc tinha dito que pediu o CREATE abaixo mas claro que a syntax tá
incompleta, imagino que foi erro de digitação ao postar :
SYSTEM@o10gr2:SQL>CREATE PROFILE TESTE IDLE_TIME 1;
CREATE PROFILE TESTE IDLE_TIME 1
*
ERRO na linha 1:
ORA-02000: palavra-chave LIMIT não encontrada
==> criação com a syntax CORRETA :
SYSTEM@o10gr2:SQL>CREATE PROFILE TESTE LIMIT IDLE_TIME 1;
Perfil criado.
SYSTEM@o10gr2:SQL>alter user scott profile TESTE;
Usuário alterado.
==> conecto com o usuário :
SCOTT@o10gr2:SQL>
==> usuário não está fazendo nada , espero e espero, veja que o tempo de IDLE
já passou :
SYSTEM@o10gr2:SQL>SYSTEM@o10gr2:SQL>select sid, serial#, logon_time,
last_call_et, SECONDS_IN_WAIT,event
2 from v$session where username='SCOTT';
SID SERIAL# LOGON_TIME LAST_CALL_ET SECONDS_IN_WAIT EVENT
---- ------- ------------------- ------------------ ------------------
-----------------------------
146 2951 04/04/2011 19:57:07 126 126 SQL*Net
message from client
=> veja que ainda não foi :
SCOTT@o10gr2:SQL>select 1 from dual;
1
------------------
1
==> a sessão fez algo e só depois voltou a ficar IDLE, o contador do evento
zerou e voltou a crescer :
SYSTEM@o10gr2:SQL>/
SID SERIAL# LOGON_TIME LAST_CALL_ET SECONDS_IN_WAIT EVENT
---- ------- ------------------- ------------------ ------------------
------------------------------
146 2951 04/04/2011 19:57:07 3 3 SQL*Net
message from client
SYSTEM@o10gr2:SQL>/
SID SERIAL# LOGON_TIME LAST_CALL_ET SECONDS_IN_WAIT EVENT
---- ------- ------------------- ------------------ ------------------
------------------------------
146 2951 04/04/2011 19:57:07 72 72 SQL*Net
message from client
SYSTEM@o10gr2:SQL>/
SID SERIAL# LOGON_TIME LAST_CALL_ET SECONDS_IN_WAIT EVENT
---- ------- ------------------- ------------------ ------------------
------------------------------
146 2951 04/04/2011 19:57:07 189 189 SQL*Net
message from client
e espero, e espero, por coisa de 3 minutos, aí quando tento de novo usar a
sessão depois de uma longa espera :
SCOTT@o10gr2:SQL>l
1* select 1 from dual
SCOTT@o10gr2:SQL>/
select 1 from dual
*
ERRO na linha 1:
ORA-02396: tempo inativo máximo excedido; conecte-se novamente
==> agora sim, PMON atuou, usuário recebeu a msg, agora sim a sessão se foi :
SYSTEM@o10gr2:SQL>/
não há linhas selecionadas
[]s
Chiappa
--- Em [email protected], Márcio Ricardo Alves da Silva
<marcio_cbj@...> escreveu
>
> Boas.
>
> Estou testando o profile IDLE_TIME e não está funcionando.
>
> ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
>
> CREATE PROFILE TESTE IDLE_TIME 1;
>
> ALTER USER XXX PROFILE TESTE;
>
> conectei com o usuário e depois executei um select, após dois minutos a
> sessão ainda estava ativa.
>
> usuário com grant de connect e resource.
>
> Release 10.2.0.5
>
> Márico.
>
>
>
>
>
>
>
>
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>