Eu tenho um aplicativo que escrevi que usa OCI para se conectar a um banco de dados Oracle. O banco de dados foi atualizado recentemente para o Oracle 18 e, desde então, as pesquisas de banco de dados no aplicativo param de funcionar aleatoriamente.
Eu reduzi o problema a isso. Quando o aplicativo se conecta ao banco de dados, ele executa alguns ALTER SESSION
comandos para desabilitar a distinção entre maiúsculas e minúsculas nas LIKE
condições (para que eu possa procurar "smith" e ainda encontrar "Smith"). Após algumas horas, a rede desconecta a conexão TCP. Na manhã seguinte, quando alguém tenta acessar o sistema, o cliente Oracle se reconecta e executa a consulta de forma transparente.
O problema é que essa reconexão acontece sem que meu código saiba disso, aparentemente pelo próprio cliente Oracle, e ele não executa novamente os ALTER SESSION
comandos originais após a reconexão. Nossos DBAs me forneceram um log de auditoria que mostra a alteração do ID da sessão, uma nova LOGON
tentativa e uma única ALTER SESSION
execução para definir o fuso horário (que não vem do meu código e também apareceu na conexão original).
Isso significa que meu aplicativo emite consultas ao banco de dados normalmente, sem saber que houve alguma interrupção, mas de repente elas diferenciam maiúsculas de minúsculas e os usuários começam a reclamar que a pesquisa não está retornando nenhum resultado.
Com a versão anterior do servidor Oracle meu código receberia um erro se tivesse sido desconectado, e o código tentaria se reconectar e como parte da reconexão, ele executaria os ALTER SESSION
comandos novamente para que não houvesse alteração no comportamento do sistema .
Não consigo encontrar nada sobre esse recurso de reconexão automática ou como ajustá-lo, então existe alguma maneira de preservar as ALTER SESSION
alterações para que sejam reaplicadas após a reconexão ou desabilitar esse comportamento e retornar um erro ao código se a conexão for perdida como costumava acontecer?
O cliente é um 11.2 mais antigo e atualizá-lo não é muito prático, mas como funcionava antes da atualização do servidor, eu achava que essa versão seria boa.