Neustart von Oracle 23c im Docker-Container führt zu blockiertem Listener

Neustart von Oracle 23c im Docker-Container führt zu blockiertem Listener

Ich verwende den kostenlosen Oracle 23c Docker-Container (siehe hier), um bei der Bereitstellung einer Entwicklungsumgebung zu helfen.

Als Teil der Konfiguration der Umgebung füge ich Skripte und SQL in die /docker-entrypoint-initdb.d/startupverwendete Konfiguration in meiner Datei docker-compose.yml ein.

Eines dieser Skripte dient zum Festlegen des COMPATIBILITY-Parameters ( ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE;), was nach dem Festlegen einen Neustart der Datenbank erfordert.

Bei der Installation einer Serverdatenbank würde ich mein SQL ausführen, um die Kompatibilität festzulegen, gefolgt von etwas wie dem Folgenden:

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

um die Datenbank neu zu starten.

Wenn ich dies jedoch im Docker-Container mache (ob ich es nun automatisch mache, wie oben beschrieben, oder indem ich manuell eine Verbindung zu SQLPlus im Container herstelle und dieselben Befehle ausführe), kommt der Lister nach dem Neustart der Datenbank mit einer blockierten Verbindung zurück und ich kann keine Verbindung mehr zur Datenbank herstellen.

docker exec -ti app_db_1 lsnrctl statusergibt folgendes:

LSNRCTL für Linux: Version 23.0.0.0.0 - Developer-Release am 14.09.2023 08:27:40

Copyright (c) 1991, 2023, Oracle. Alle Rechte vorbehalten.

Verbindung wird hergestellt zu (BESCHREIBUNG=(ADRESSE=(PROTOKOLL=IPC)(SCHLÜSSEL=EXTPROC_FOR_FREE))) STATUS des LISTENER ------------------------ Alias ​​LISTENER Version TNSLSNR für Linux: Version 23.0.0.0.0 – Entwickler-Release Startdatum
14.09.2023 08:27:37 Betriebszeit 0 Tage 0 Std. 0 Min. 2 Sek. Ablaufverfolgungsebene aus, Sicherheit ein: Lokale Betriebssystemauthentifizierung, SNMP aus, Standarddienst
KOSTENLOS, Listener-Parameterdatei
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora, Listener-Protokolldatei
/opt/oracle/diag/tnslsnr/854ac05c3c0f/listener/alert/log.xml, Zusammenfassung der Listening-Endpunkte …
(BESCHREIBUNG=(ADRESSE=(PROTOCOL=ipc)(SCHLÜSSEL=EXTPROC_FOR_FREE)))
(BESCHREIBUNG=(ADRESSE=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))), Diensteübersicht … Dienst „FREE“ hat 1 Instanz(en). Instanz „FREE“, Status BLOCKIERT, hat 1 Handler für diesen Dienst … Dienst „PLSExtProc“ hat 1 Instanz(en). Instanz „PLSExtProc“, Status UNBEKANNT, hat 1 Handler für diesen Dienst... Der Befehl wurde erfolgreich ausgeführt

Beachten Sie den Instance "FREE", status BLOCKEDAbschnitt der Ausgabe.

Wie kann ich die Datenbank programmgesteuert im Container neu starten, ohne dass dies passiert?

UPDATE - wenn man sich anmeldet und den Neustart interaktiv durchführt, wird folgendes angezeigt:

ORA-00201: Steuerdateiversion 23.0.0.0.0 nicht kompatibel mit ORACLE Version 19.0.0.0.0 ORA-00202: Steuerdatei: „/opt/oracle/oradata/FREE/control01.ctl“


Vor dem Neustart lsnrctl statuswird Folgendes zurückgegeben:

LSNRCTL für Linux: Version 23.0.0.0.0 - Developer-Release am 14.09.2023 08:32:57

Copyright (c) 1991, 2023, Oracle. Alle Rechte vorbehalten.

Verbindung wird hergestellt zu (BESCHREIBUNG=(ADRESSE=(PROTOKOLL=IPC)(SCHLÜSSEL=EXTPROC_FOR_FREE))) STATUS des LISTENER ------------------------ Alias ​​LISTENER Version TNSLSNR für Linux: Version 23.0.0.0.0 – Entwickler-Release Startdatum
14.09.2023 08:32:46 Betriebszeit 0 Tage 0 Std. 0 Min. 10 Sek. Ablaufverfolgungsebene aus, Sicherheit EIN: Lokale Betriebssystemauthentifizierung, SNMP AUS, Standarddienst
KOSTENLOS, Listener-Parameterdatei
/opt/oracle/product/23c/dbhomeFree/network/admin/listener.ora, Listener-Protokolldatei
/opt/oracle/diag/tnslsnr/05cf8b8b6d41/listener/alert/log.xml, Zusammenfassung der Listening-Endpunkte …
(BESCHREIBUNG=(ADRESSE=(PROTOCOL=ipc)(SCHLÜSSEL=EXTPROC_FOR_FREE)))
(BESCHREIBUNG=(ADRESSE=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))), Dienstübersicht … Dienst „FREE“ hat 1 Instanz(en). Instanz „FREE“, Status BEREIT, hat 1 Handler für diesen Dienst … Dienst „PLSExtProc“ hat 1 Instanz(en). Instanz „PLSExtProc“, Status UNBEKANNT, hat 1 Handler für diesen Dienst... Der Befehl wurde erfolgreich ausgeführt

Antwort1

Sie können den compatibilityParameter nicht niedriger, sondern nur höher einstellen. Dies führte dazu, dass die Datenbank nicht gestartet wurde und der Listener blockiert wurde.

verwandte Informationen