Árvore de páginas

 Implementação de identificação de sessões inativas em banco de dados Oracle

Linha de Produto:

Datasul

Segmento:

Tecnologia

Módulo:

Menu 

Função:

Datasul Interactive

Situação/Requisito:

Não é possível saber quando uma sessão está inativa ao utilizar a funcionalidade de Controle de sessões Progress
Exemplos de inatividade:

  • Ao cair a rede de uma sessão client progress, a sessão é mantida no Oracle até que ocorra o seu timeout removendo a sessão.
    • Este cenário também ocorre ao cair a energia de uma estação
  • Para estes casos, ao tentar abrir uma nova sessão Progress e essa nova sessão chegue no seu limite de sessões configurada para o usuário, não será possível abrir o Datasul Interactive.
    • Será informada uma mensagem, que o usuário atingiu o seu limite de sessões conectadas.

A tabela de sessões do Oracle possui alguns campos que podem ser utilizados para verificação de inatividade sendo eles:

  • SECONDS_IN_WAIT: É o tempo que a sessão está inativa
  • STATUS: É o estado da sessão
    • STATUS=INACTIVE não quer dizer que seja uma sessão 'perdida', pode ser uma sessão ainda válida que não recebeu nenhuma atividade do client.
    • Exemplo o Datasul Interactive aberto porém sem uso.

Solução/Implementação:

Foi implementada a ativação de STATUS na sessão do Oracle.

  • A ativação é feita a cada 2 minutos por meio do Datasul Interactive
  • É feito um "count" por usuário na tabela de sessão do Oracle.

O campo SECONDS_IN_WAIT, será utilizado para os casos de queda de Rede/Energia onde a sessão Client Progress é perdida, porém a sessão do banco de dados Oracle é mantida pelo banco até que o mesmo faça o seu timeout.

  • Nesses casos, o Client Progress não existindo não será mais enviado o sinal de atividade para o oracle (por meio do Datasul Interactive a cada 2 minutos), sendo assim o seu tempo de inatividade (SECONDS_IN_WAIT) será crescente.
    • Por padrão definimos que uma sessão Client Progress com 30 minutos (1800 segundos) de inatividade, será desconsiderado na contagem de sessões da verificação do limite de sessões conectadas por usuário.
    • Esse tempo padrão de 30 minutos de inatividade pode ser sobrescrito, basta adicionar a propriedade oracle.session.minutes.in.wait no arquivo de propriedades datasul_framework.properties 
      • Exemplo de configuração para 20 minutos oracle.session.minutes.in.wait=20
      • O valor minimo aceito é de 5 minutos
      • Caso o administrador do ambiente não queira que seja avaliada a inatividade de sessões, deve ser informado o valor 0 "zero" na configuração oracle.session.minutes.in.wait=0
        • Assim não serão mais enviados os sinais de atividade para a sessão do Oracle a cada 2 minutos
        • Não será mais feita a verificação do tempo de inatividade de sessão, realizando a contagem de limite de sessões com as sessões de tempo crescente e sem inatividade.