перезапуск Oracle 23c в контейнере Docker приводит к блокировке прослушивателя

перезапуск Oracle 23c в контейнере Docker приводит к блокировке прослушивателя

Я использую бесплатный контейнер Oracle 23c Docker (глянь сюда) для помощи в предоставлении среды разработки.

В рамках настройки среды я помещаю скрипты и SQL в /docker-entrypoint-initdb.d/startupконфигурацию using в моем файле docker-compose.yml.

Один из таких скриптов — установка параметра COMPATIBILITY ( ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE;), после установки которого требуется перезапуск базы данных.

При установке серверной базы данных я бы запустил SQL, чтобы настроить совместимость, а затем что-то вроде следующего:

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

для перезапуска базы данных.

Однако когда я делаю это в контейнере Docker (независимо от того, делаю ли я это автоматически, как описано выше, или вручную подключаясь к sqlplus в контейнере и выполняя те же команды), после перезапуска базы данных листер возвращается с заблокированным соединением, и я больше не могу подключиться к базе данных.

docker exec -ti app_db_1 lsnrctl statusдает следующее:

LSNRCTL для Linux: Версия 23.0.0.0.0 — Выпуск для разработчиков 14 сентября 2023 г., 08:27:40

Copyright (c) 1991, 2023, Oracle. Все права защищены.

Подключение к (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) СТАТУС СЛУШАТЕЛЯ ------------------------ Псевдоним СЛУШАТЕЛЯ Версия TNSLSNR для Linux: Версия 23.0.0.0.0 - Developer-Release Дата начала
14-SEP-2023 08:27:37 Время работы 0 дн. 0 ч. 0 мин. 2 сек. Уровень трассировки выкл. Безопасность ВКЛ.: Локальная аутентификация ОС SNMP ВЫКЛ. Служба по умолчанию
СВОБОДНО Файл параметров прослушивателя
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora Файл журнала прослушивателя
/opt/oracle/diag/tnslsnr/854ac05c3c0f/listener/alert/log.xml Сводка по конечным точкам прослушивания...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) Сводка по службам... Служба "FREE" имеет 1 экземпляр(ов). Экземпляр "FREE", статус BLOCKED, имеет 1 обработчик(ов) для этой службы... Служба "PLSExtProc" имеет 1 экземпляр(ов). Экземпляр «PLSExtProc», статус НЕИЗВЕСТЕН, имеет 1 обработчик(и) для этой службы... Команда выполнена успешно

обратите внимание на Instance "FREE", status BLOCKEDраздел вывода.

Как можно программно перезапустить базу данных внутри контейнера, чтобы этого не произошло?

ОБНОВЛЕНИЕ - вход в систему и интерактивный запуск перезагрузки показывает следующее:

ORA-00201: управляющий файл версии 23.0.0.0.0 несовместим с ORACLE версии 19.0.0.0.0 ORA-00202: управляющий файл: '/opt/oracle/oradata/FREE/control01.ctl'


Перед перезапуском lsnrctl statusвозвращает это:

LSNRCTL для Linux: Версия 23.0.0.0.0 — Выпуск для разработчиков 14-SEP-2023 08:32:57

Copyright (c) 1991, 2023, Oracle. Все права защищены.

Подключение к (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) СТАТУС СЛУШАТЕЛЯ ------------------------ Псевдоним СЛУШАТЕЛЯ Версия TNSLSNR для Linux: Версия 23.0.0.0.0 - Developer-Release Дата начала
14-SEP-2023 08:32:46 Время работы 0 дн. 0 ч. 0 мин. 10 сек Уровень трассировки выкл Безопасность ВКЛ: Локальная аутентификация ОС SNMP ВЫКЛ Служба по умолчанию
СВОБОДНО Файл параметров прослушивателя
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora Файл журнала прослушивателя
/opt/oracle/diag/tnslsnr/05cf8b8b6d41/listener/alert/log.xml Сводка по конечным точкам прослушивания...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_FREE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) Сводка по службам... Служба "FREE" имеет 1 экземпляр(ов). Экземпляр "FREE", статус READY, имеет 1 обработчик(ов) для этой службы... Служба "PLSExtProc" имеет 1 экземпляр(ов). Экземпляр «PLSExtProc», статус НЕИЗВЕСТЕН, имеет 1 обработчик(и) для этой службы... Команда выполнена успешно

решение1

Вы не можете установить compatibilityпараметр ниже, только выше; поэтому это приводило к тому, что база данных не запускалась; и, следовательно, прослушиватель блокировался.

Связанный контент