Eu tenho um cenário em que sessões longas e inativas deTOADSofta comunicação do cliente com o servidor Oracle parece ser interrompida à medida que atinge o tempo limite em um firewall intermediário com estado completo.
Essas sessões podem ficar inativas por várias horas!
Não é aceitável aumentar o tempo limite do firewall globalmente e,
claro, não suporta tempos limites mais longos para fluxos específicos.
Corrigi esse problema para conexões ociosas do PuTTY;
permite umkeep-alive configurável.
Porém, ainda não identifiquei nenhum suporte desse tipo no software TOAD.
Olhando um pouco sobre as configurações de todo o sistema, descobri este detalhe do Microsoft TechNet emConfigurando Keep-Alives em todo o sistemaque envolve trabalhar comKeepAliveTimee variáveis de registro relacionadas.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parâmetros\KeepAliveTime
Isto parece oConfiguração de todo o sistema Linux para usar keep-alive em todo o sistema.
Mas, isso requer que os programas usem setsockopt()
e solicitem keep-alive (certo?).
Lembre-se de que o suporte keepalive, mesmo que configurado no kernel, não é o comportamento padrão no Linux. Os programas devem solicitar controle de manutenção de atividade para seus soquetes usando a interface setsockopt. Existem relativamente poucos programas implementando keepalive...
Questões
- Posso usar istoTécnica KeepAliveTime nas máquinas clientes Windows ou talvez no servidor?
(alguém já tentou?)- Existe alguma outra maneira de manter essas conexões TOAD ativas (de qualquer extremidade da comunicação)?
Responder1
Defina o valor deSQLNET.EXPIRE_TIMEem sqlnet.ora.
Aqui está o queo manual do oraclediz sobre este assunto:
Propósito
Use o parâmetro SQLNET.EXPIRE_TIME
para especificar o intervalo de tempo, em minutos, para enviar uma sonda para verificar se as conexões cliente/servidor estão ativas. Definir um valor maior que 0 garante que as conexões não sejam deixadas abertas indefinidamente, devido a um encerramento anormal do cliente. Se o probe encontrar uma conexão encerrada ou que não esteja mais em uso, ele retornará um erro, fazendo com que o processo do servidor seja encerrado. Este parâmetro destina-se principalmente ao servidor de banco de dados, que normalmente lida com diversas conexões ao mesmo tempo.
As limitações ao uso deste recurso de detecção de conexão encerrada são:
- Não é permitido em conexões legadas.
- Embora muito pequeno, um pacote de investigação gera tráfego adicional que pode prejudicar o desempenho da rede.
- Dependendo de qual sistema operacional está em uso, o servidor pode precisar executar processamento adicional para distinguir o evento de sondagem de conexão de outros eventos que ocorrem. Isso também pode resultar na degradação do desempenho da rede.
Padrão: 0
Valor Mínimo: 0
Valor recomendado: 10
Exemplo
SQLNET.EXPIRE_TIME=10
Responder2
Você tem acesso SSH? Você pode configurar um túnel SSH e enviar a comunicação SQL por meio dele.
TOAD: server (ou tnsnames) torna-se localhost, a porta de escuta é alguma porta aleatória, como 12346
PuTTY: encaminhamento de porta. porta de origem: 12346, destino: $REMOTE_IP:1521. Deixe-o como uma porta local.
Certifique-se de ativar os keepalives TCP no PuTTY por meio da seção Conexão.
Responder3
Encontrei isso no site da Dell e confirmei que funciona (no Toad 11.5.0.56): O Toad tem uma configuração keep alive/intervalo/ping para que a rede não atinja o tempo limite? (49507)
Para resumir - Ative a saída na janela Saída do DBMS clicando no ícone do botão vermelho à esquerda da barra de menu Saída do DBMS (ficará verde). Você pode acessar isso na guia DBMS Output ao lado da guia Data Grid ou através de View -> DBMS Output.
Isso também ativará automaticamente a votação. Na minha experiência, você precisa de saída DBMSePolling ativado para manter a conexão.