reiniciar o Oracle 23c dentro do contêiner docker causa o bloqueio do ouvinte

reiniciar o Oracle 23c dentro do contêiner docker causa o bloqueio do ouvinte

Estou usando o contêiner Free Oracle 23c Docker (Veja aqui) para ajudar a provisionar um ambiente de desenvolvimento.

Como parte da configuração do ambiente, estou colocando scripts e SQL para /docker-entrypoint-initdb.d/startupusar a configuração em meu arquivo docker-compose.yml.

Um desses scripts é configurar o parâmetro COMPATIBILITY ( ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE;), que, após configurá-lo, requer a reinicialização do banco de dados.

Em uma instalação de banco de dados de servidor, eu executaria meu SQL para definir a compatibilidade, seguido de algo como o seguinte:

echo -e "shutdown immediate \n startup mount" | sqlplus -s / as sysdba

para reiniciar o banco de dados.

No entanto, quando faço isso no contêiner docker (seja automaticamente, conforme descrito acima, ou conectando-me manualmente ao sqlplus no contêiner e executando os mesmos comandos), depois que o banco de dados for reiniciado, o lister voltará com uma conexão bloqueada, e não consigo mais me conectar ao banco de dados.

docker exec -ti app_db_1 lsnrctl statusdá o seguinte:

LSNRCTL para Linux: versão 23.0.0.0.0 - lançamento do desenvolvedor em 14 de setembro de 2023 08:27:40

Direitos autorais (c) 1991, 2023, Oracle. Todos os direitos reservados.

Conectando-se a (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) STATUS do LISTENER ------------------------ Alias ​​LISTENER Versão TNSLSNR para Linux: Versão 23.0.0.0.0 - Data de início de lançamento do desenvolvedor
14-SEP-2023 08:27:37 Tempo de atividade 0 dias 0 horas. 0 minutos. 2 segundos Nível de rastreamento desativado Segurança ATIVADO: Autenticação do SO local SNMP DESLIGADO Serviço padrão Arquivo de
parâmetros do ouvinte GRATUITO
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora Arquivo de log do ouvinte
/opt/oracle/diag/tnslsnr/854ac05c3c0f /listener/alert/log.xml Resumo dos terminais de escuta...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0) (PORT=1521))) Resumo dos serviços... O serviço "FREE" possui 1 instância(s). Instância "FREE", status BLOCKED, possui 1 manipulador(es) para este serviço... O serviço "PLSExtProc" possui 1 instância(s). Instância "PLSExtProc", status UNKNOWN, possui 1 manipulador(es) para este serviço... O comando foi concluído com sucesso

observe a Instance "FREE", status BLOCKEDseção da saída.

Como posso reiniciar o banco de dados programaticamente dentro do contêiner sem que isso aconteça?

ATUALIZAÇÃO - fazer login e executar a reinicialização interativamente mostra o seguinte:

ORA-00201: arquivo de controle versão 23.0.0.0.0 incompatível com ORACLE versão 19.0.0.0.0 ORA-00202: arquivo de controle: '/opt/oracle/oradata/FREE/control01.ctl'


Antes de reiniciar, lsnrctl statusretorna isto:

LSNRCTL para Linux: versão 23.0.0.0.0 - lançamento do desenvolvedor em 14 de setembro de 2023 08:32:57

Direitos autorais (c) 1991, 2023, Oracle. Todos os direitos reservados.

Conectando-se a (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) STATUS do LISTENER ------------------------ Alias ​​LISTENER Versão TNSLSNR para Linux: Versão 23.0.0.0.0 - Data de início de lançamento do desenvolvedor
14-SEP-2023 08:32:46 Tempo de atividade 0 dias 0 horas. 0 minutos. 10 seg. Nível de rastreamento desativado Segurança ATIVADO: Autenticação do SO local SNMP DESLIGADO Serviço padrão
Arquivo de parâmetros do ouvinte GRATUITO
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora Arquivo de log do ouvinte
/opt/oracle/diag/tnslsnr/05cf8b8b6d41 /listener/alert/log.xml Resumo dos terminais de escuta...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0) (PORT=1521))) Resumo dos serviços... O serviço "FREE" possui 1 instância(s). Instância "FREE", status READY, possui 1 manipulador(es) para este serviço... O serviço "PLSExtProc" possui 1 instância(s). Instância "PLSExtProc", status UNKNOWN, possui 1 manipulador(es) para este serviço... O comando foi concluído com sucesso

Responder1

Você não pode definir o compatibilityparâmetro mais baixo, apenas mais alto; então isso estava fazendo com que o banco de dados não iniciasse; e, portanto, o ouvinte será bloqueado

informação relacionada