如何在Podman中配置运行Oracle 23ai镜像

浅丽小哥_7885

浅丽小哥_7885

2026-11-10

813人浏览

原创

Oracle Database Free 官方镜像可通过 podman pull container-registry.oracle.com/database/free:latest 拉取,但需先验证网络连通性、配置登录与加速器,启动时须映射1521端口、挂载数据卷、设置shm-size及ulimit,并等待日志提示“Database ready to use”后方可连接。

如何在podman中配置运行oracle 23ai镜像

确认镜像源可用且网络可达

直接拉取 container-registry.oracle.com/database/free:latest 前,先验证能否访问 Oracle 官方镜像仓库。国内环境常因 DNS 或防火墙导致超时或 i/o timeout 错误。

常见问题包括:

  • 未配置 Podman 镜像加速器,尤其在非云环境(如本地 Rocky Linux 或 WSL2)
  • Oracle 镜像仓库不走 Docker Hub 加速源,registry-mirrors 对它无效
  • 企业内网拦截了 container-registry.oracle.com 的 443 端口

建议操作:

  • 运行 podman login container-registry.oracle.com(需 Oracle 账号,免费注册)
  • 若失败,先用 curl -v https://container-registry.oracle.com/v2/ 测试连通性
  • 如确属网络限制,可考虑离线导入:在有网机器 podman pull 后 podman save 成 tar,再 podman load

启动容器时必须映射关键端口与卷

Oracle 23ai Free 容器默认监听 1521(TNS),但仅暴露该端口不够——缺少监听器配置和数据持久化会导致重启后数据库丢失、连接失败。

典型错误现象:

  • 容器启动成功,但 sqlplus system/oracle@localhost:1521/FREEPDB1 报 ORA-12541: TNS:no listener
  • 第一次初始化成功,第二次 podman start 后 PDB 不自动打开,SELECT STATUS FROM V$INSTANCE 返回 MOUNTED

正确启动命令应包含:

  • -p 1521:1521(必需)
  • -v /path/to/oradata:/opt/oracle/oradata(强烈建议,否则每次重建容器都重装库)
  • --shm-size=2g(Oracle 启动依赖足够共享内存,df -h /dev/shm 小于 1G 会卡在初始化)
  • --ulimit nofile=65536:65536 --ulimit nproc=65536:65536(避免 ORA-00845 错误)

首次启动后必须等待初始化完成

Oracle 23ai Free 镜像启动后不是立刻就绪的。它会在后台执行数据库创建、PDB 创建、密码设置等操作,耗时约 3–8 分钟(取决于 CPU 和磁盘 I/O)。期间 podman logs -f ora23ai 会持续输出日志,直到出现 Database ready to use. 或类似提示。

容易踩的坑:

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 看到容器状态为 Up 2 minutes 就急着连,结果报 ORA-12170: TNS:Connect timeout occurred
  • 用脚本自动化连接,但没加健康检查逻辑,导致下游服务启动失败
  • 忽略日志末尾的默认密码提示(如 The Oracle Database FREE is ready. Default password: oracle)

推荐做法:

  • 启动后执行 podman logs -f ora23ai | grep -i "ready\|password" 等待明确就绪信号
  • 写简单健康检查:循环执行 podman exec ora23ai sqlplus -s /nolog ,直到返回 OPEN

连接时注意服务名与用户权限差异

Oracle 23ai Free 默认启用多租户架构,CDB 名为 FREE,PDB 名为 FREEPDB1。直接连 CDB 只能用 / as sysdba,普通应用应连 PDB。

常见连接失败原因:

  • 用 system/oracle@localhost:1521/FREE 连 CDB,但未显式切换容器:ALTER SESSION SET CONTAINER = FREEPDB1;
  • PDB 未 open:ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;(首次启动后通常已开,但重启容器后可能需手动)
  • 用户被设为只读(23ai 新特性):SELECT username, read_only FROM dba_users WHERE username = 'SYSTEM';,若为 YES 则需 ALTER USER system READ WRITE;

最简可用连接串(Linux/macOS):

sqlplus system/oracle@//localhost:1521/FREEPDB1

注意双斜杠 // 表示 EZCONNECT 模式,比 @host:port:sid 更可靠;服务名必须是 FREEPDB1,不是 FREE 或 ORCL。

Oracle 23ai 容器的初始化逻辑藏在 entrypoint 脚本里,不看日志就动手连,大概率撞上“数据库正在建表”的静默期。另外,read only 用户标记是 23ai 新增的安全层,它不改权限视图,只在会话级拦截 DML——排查连接后不能写的问题,别只查 GRANT,先查 DBA_USERS.READ_ONLY。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4883

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

991

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1289

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6921

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3603

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6900

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

9621

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1310

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1132

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程