Como eu asseguro que o SQL * Net keepalive esteja ativado?

3

Eu tenho um servidor de aplicativos voltado para o público que acessa um banco de dados Oracle que reside atrás de um firewall.

Alguns dos processos que são executados através do servidor de aplicativos podem ser executados por mais de uma hora. Isso faz com que o firewall desconecte a sessão sem gerar mensagens de erro. Isso faz com que o processo pareça interrompido.

Eu configurei o KeepAliveInterval para 1 segundo e o KeepAliveTime para duas horas no registro.

Eu configurei a opção enable = broken no meu arquivo tnsnames.ora

O ouvinte tem o tempo de expiração do sqlnet definido para dois minutos, por isso está enviando keepalives a partir desse fim também.

O problema é que não parece estar funcionando. Em uma máquina diferente, eu pelo menos recebi uma mensagem de que o firewall havia desconectado o servidor de aplicativos (foi quando descobri a habilitação = requisito interrompido)

Como posso ter certeza de que os keep-alives estão sendo enviados?

    
por Brad Bruce 08.11.2012 / 13:32

2 respostas

1

Por que o firewall desconecta a sessão? O firewall está configurado para fechar as conexões que estão ativas há muito tempo? Ou para fechar conexões que ficaram inativas por muito tempo? Se o firewall estiver configurado para não permitir conexões que persistam por mais de uma hora, provavelmente não há nada que você possa fazer na configuração de rede - você precisaria alterar a configuração do firewall.

Do ponto de vista de arquitetura, você realmente precisa executar processos de uma hora de seu servidor de aplicativos? Normalmente, faria mais sentido para o servidor de aplicativos fazer uma solicitação que faz com que um processo de banco de dados seja executado de forma assíncrona (ou seja, gerar uma tarefa usando DBMS_SCHEDULER ou DBMS_JOB ) e fazer com que o servidor de aplicativos monitore o andamento da tarefa. Dessa forma, você não tem uma conexão que fica aberta continuamente por uma hora. E você pode dar ao usuário algum tipo de indicador de progresso (particularmente se o trabalho for instrumentado usando, digamos, DBMS_APPLICATION_INFO ).

    
por 09.11.2012 / 16:57
0

I've set the KeepAliveInterval to 1 second and KeepAliveTime to two hours in the registry.

Eu sugiro que 5 segundos e 30 minutos possam ser valores mais sensatos (e isso supondo que haja um tempo de RTT abaixo de 5 ms). Se o firewall decidiu remover a conexão de sua tabela de estados, o keepaliveinterval é irrelevante.

How do I make sure that the keep-alives are being sent?

Com uma captura de pacotes nos dois lados do firewall

Realmente, o primeiro lugar em que você começa a investigar esse problema está nos registros do firewall.

    
por 13.11.2016 / 14:11