O problema:
Quando tento executar reunir estatísticas sobre OpenVPN no meu banco de dados Oracle 19c, o SQL Developer não retorna a mensagem típica "procedimento PL/SQL concluído com êxito" se for executado por mais de um determinado período de tempo.
Aparentemente, a conexão trava depois de um tempo e eu preciso me desconectar do OpenVPN ou matar o SQL Developer no Gerenciador de Tarefas do Windows para fechá-lo.
Meu banco de dados Oracle 19c e servidor OpenVPN estão em diferentes provedores de nuvem.
A execução de estatísticas de coleta nesse banco de dados geralmente leva cerca de meia hora.
Executando o comando reunir estatísticas no SQL Developer
O que verifiquei:
Nada incomum nos logs do Iptables e do OpenVPN no OpenVPN Server ou no listener e nos logs de alerta no Oracle 19c Server.
net.ipv4.tcp_keepalive_time e net.netfilter.nf_conntrack_tcp_timeout_established são definidos para seus valores padrão de 7200 (2 horas) e 432000 (5 dias) em ambas as máquinas.
Se eu me conectar ao banco de dados como sistema e executar:
selecione x.sid, x.serial#, x.username, x.status, x.osuser, x.machine, x.program, x.event, x.state, sql.sql_text de v$sqlarea sql, v$session x onde x.sql_hash_value = sql.hash_value e x.sql_address = sql.address e x.username = 'myuser';
Após cerca de meia hora, notei que a sessão para coletar estatísticas está inativa. Portanto, presumo que o collect stats realmente seja executado e finalizado com êxito, mas simplesmente não retorna a mensagem de saída mencionada acima.
Reúna estatísticas em execução no banco de dados
Sessão de estatísticas inativa após cerca de meia hora
O que eu tentei:
Em um banco de dados menor na mesma instância, a execução de reunir estatísticas sobre OpenVPN retorna a mensagem de sucesso mencionada acima. Este leva cerca de 10 minutos.
Conectar-se diretamente (sem OpenVPN) ao banco de dados adicionando meu endereço IP ao firewall do provedor de nuvem e executando as estatísticas de coleta também retorna a mensagem de sucesso mencionada anteriormente.
Gerando um par de chaves públicas/privadas SSH no servidor Oracle 19c e usando hosts SSH no SQL Developer, mas a conexão é muito instável/sempre redefinindo.
Configurando um servidor proxy Dante. Aparentemente, o SQL Developer só pode usar algum tipo de servidor proxy especial.
Configurando uma VPN IPSEC com StrongSwan. Meu Windows 10 não conseguiu estabelecer uma conexão com ele por algum motivo.
Em primeiro lugar, pude confirmar que as estatísticas de coleta realmente terminam com sucesso executando:
Depois disso, executei os seguintes comandos tcpdump nos dois servidores:
E descobri que o servidor Oracle 19c enviou a mensagem de sucesso, mas o servidor OpenVPN nunca a recebeu.
Depois de pesquisar em vários sites, descobri que não entendi o que net.ipv4.tcp_keepalive_time realmente faz.
Depois disso, descobri uma configuração de rede do provedor de nuvem onde tenho meu servidor OpenVPN hospedado.
Com essas novas informações contornei essa limitação definindo o tempo de manutenção para um valor inferior a 10 minutos executando o seguinte comando no servidor Oracle 19c:
E tornou essas alterações permanentes salvando-as em /etc/sysctl.conf.
Finalmente, o SQL Developer recebe a mensagem de sucesso e fecha a conexão.