在 docker 容器内重新启动 Oracle 23c 会导致监听器被阻塞

在 docker 容器内重新启动 Oracle 23c 会导致监听器被阻塞

我正在使用免费的 Oracle 23c Docker 容器(看这里) 来帮助提供开发环境。

作为环境配置的一部分,我将脚本和 SQL 放入/docker-entrypoint-initdb.d/startupdocker-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给出以下内容:

Linux 版 LSNRCTL:版本 23.0.0.0.0 - 开发人员发布于 2023 年 9 月 14 日 08:27:40

版权所有 (c) 1991, 2023,Oracle。保留所有权利。

连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) LISTENER 的状态 ------------------------ 别名 LISTENER 版本 TNSLSNR for Linux:版本 23.0.0.0.0 - 开发人员发布开始日期
2023 年 9 月 14 日 08:27:37 正常运行时间 0 天 0 小时 0 分钟。 2 秒跟踪级别关闭安全性开启:本地操作系统身份验证 SNMP 关闭默认服务
FREE 侦听器参数文件
/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返回以下内容:

Linux 版 LSNRCTL:版本 23.0.0.0.0 - 开发人员发布于 2023 年 9 月 14 日 08:32:57

版权所有 (c) 1991, 2023,Oracle。保留所有权利。

连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_FREE))) LISTENER 的状态 ------------------------ 别名 LISTENER 版本 TNSLSNR for Linux:版本 23.0.0.0.0 - 开发人员发布开始日期
2023 年 9 月 14 日 08:32:46 正常运行时间 0 天 0 小时 0 分钟。 10 秒跟踪级别关闭安全性开启:本地操作系统身份验证 SNMP 关闭默认服务
FREE 侦听器参数文件
/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参数设置得更低,只能设置得更高;所以这导致数据库无法启动;因此监听器被阻塞

相关内容