欢迎光临
我们一直在努力

docker 安装oracle19C

docker 安装oracle19C,一篇文章就够了

选择docker镜像是为了简单,不需要一大堆依赖。
写这篇文章之前我是看了好多博主的文章,对于我来说每一篇都不是太爽,不能一直照着流程走通,也有可能我没有找到那篇一针见血的爽文。
所以我根据我的操作过程也集百家之长写了这篇,希望能帮到看到的人。

docker中安装oracle19C

第一步,先创建挂载文件

# 创建文件
mkdir p /mydata/oracle/oradata

# 授权,不授权会导致后面安装失败
chmod 777 /mydata/oracle/oradata

第二步,下载镜像并创建容器,对于Oracle来说就是创建实例,具体参数的意思在下面有展示,遇到过的坑也顺便在下面说一下。

docker run -d \\
–name oracle19c \\
–ulimit nofile=262144:262144 \\
–ulimit nproc=16384:16384 \\
–ulimit memlock=-1:-1 \\
–ulimit stack=67108864 \\
–shm-size=1g \\
-p 1521:1521 \\
-p 5500:5500 \\
-e TZ=Asia/Shanghai \\
-e ORACLE_SID=orcl \\
-e ORACLE_PDB=orclpdb \\
-e ENABLE_ARCHIVELOG=false \\
-e ORACLE_PWD=oracle \\
-e ORACLE_BASE=/opt/oracle \\
-e ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \\
-v /mydata/oracle/oradata/:/opt/oracle/oradata \\
registry.cn-guangzhou.aliyuncs.com/hjdyzy/oracle:19.3.0-ee

查看安装日志

docker logs oracle19c –follow

日志中出现一下字样就算是安装成功,这个过程大概需要几分钟

54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/ORCL.
Database Information:
Global Database Name:ORCL
System Identifier(SID):ORCL
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Jan 22 16:05:43 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.

在安装的时候我出现过安装容器报错的情况

library initialization failed – unable to allocate file descriptor table – out of memory/opt/oracle/createDB.sh: line 206: 51 Aborted (core dumped) dbca -silent -createDatabase -enableArch
ive "$ENABLE_ARCHIVELOG" -archiveLogDest "$ARCHIVELOG_DIR" ${DBCA_CRED_OPTIONS} -responseFile "$ORACLE_BASE"/dbca.rsp
cat: /opt/oracle/cfgtoollogs/dbca/ORCL/ORCL.log: No such file or directory
cat: /opt/oracle/cfgtoollogs/dbca/ORCL.log: No such file or directory

这个错误的核心原因不是物理内存不足(RAM),而是 Docker 容器的系统资源限制(ulimit)过低。

错误信息 library initialization failed – unable to allocate file descriptor table 表明 Oracle 进程(实际上是 JVM 或 DBCA 工具)试图打开文件句柄时,达到了容器默认允许的最大打开文件数限制(File Descriptors Limit)。

默认情况下,Docker 容器的 nofile(打开文件数)限制通常是 1024,而 Oracle 19c 安装和运行通常需要至少 65536。

如果你是使用 docker run 命令启动的,必须添加 –ulimit 参数来提高限制,同时建议增加共享内存大小(–shm-size),否则后面还会报 ORA-00845 错误。

请修改你的启动命令,加入以下参数:

参数解释:

  • –ulimit nofile=262144:262144:解决你当前的 unable to allocate file descriptor table 错误。
  • –ulimit nproc=16384:16384:增加最大进程数,Oracle 需要很多后台进程。
  • –shm-size=1g:非常重要。Docker 默认共享内存只有 64MB,Oracle 启动实例通常需要更多(建议 1GB 或 2GB),否则 DBCA 虽然能运行,但创建实例时会报错。

其他参数的解释如下

  • ​ docker run: 运行 Docker 容器的命令。
  • ​ -d: 指定容器在后台运行(detached mode)。
  • ​ -p 1521:1521: 将容器的 1521 端口映射到主机的 1521 端口,Oracle 数据库监听端口。
  • ​ -p 5502:5500: 将容器的 5500 端口映射到主机的 5502 端口,用于 Oracle Enterprise Manager Express 访问的端口。
  • ​ -e ORACLE_SID=ORCLCDB: 设置 Oracle 实例的 SID(System Identifier),这里设置为 ORCLCDB。
  • ​ -e ORACLE_PDB=ORCLPDB: 设置 Oracle 的 Pluggable Database(PDB)的名称,这里设置为 ORCLPDB。
  • ​ -e ORACLE_PWD=oracle: 设置 Oracle 系统用户 SYS 和 SYSTEM 的初始密码为 oracle。
  • ​ -e ORACLE_EDITION=standard: 设置 Oracle 的版本为标准版(standard),这影响 Oracle 的功能集。
  • ​ -e ORACLE_CHARACTERSET=AL32UTF8: 设置 Oracle 数据库的字符集为 AL32UTF8,即 Unicode 字符集。
  • ​ -v /docker/oracle19c/oradata/:/opt/oracle/oradata/: 将主机上的 /docker/oracle19c/oradata/ 目录挂载到容器内的 /opt/oracle/oradata/ 目录,用于持久化存储数据库文件。
  • ​ –name oracle_19c: 指定容器的名称为 oracle_19c。
  • ​ registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c: 指定要运行的 Docker 镜像,这里是从阿里云的镜像仓库中拉取并运行名为 oracle:19c 的镜像。
  • 创建表空间和用户

    步骤 1:进入 Docker 容器并登录 SQLPlus

    docker exec -it oracle19c /bin/bash

    sqlplus / as sysdba

    步骤 2:切换到 PDB 容器

    Oracle 19c 的用户数据应该放在 PDB 中。执行以下命令切换:

    — 查看当前有哪些 PDB
    show pdbs;

    — 切换到默认的 PDB (通常是 ORCLPDB1)
    alter session set container = ORCLPDB;

    — 确认是否切换成功(应该不再显示 CDB$ROOT)
    show con_name;

    步骤 3:创建表空间

    切换到 PDB 后,就可以创建表空间了。为了避免路径问题,我们让 Oracle 自动管理文件位置(或者只指定文件名):

    CREATE TABLESPACE test_tb DATAFILE 'test_tb.dbf' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;

    步骤 4:创建用户并授权

    创建用户 test,密码设为 test(请自行修改),并指定默认表空间为刚才创建的 test_tb

    — 创建用户
    CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE test_tb TEMPORARY TABLESPACE temp;

    — 授予连接和开发权限
    GRANT CONNECT, RESOURCE TO test;

    — 授予表空间的使用配额(如果不给配额,用户无法插入数据)
    ALTER USER test QUOTA UNLIMITED ON test_tb;

    步骤 5:验证连接

    你可以尝试用新用户连接测试:

    conn test/test@ORCLPDB

    赞(0)
    未经允许不得转载:171主机测评 » docker 安装oracle19C
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址