在 Ubuntu 上部署 Oracle 应用的可行路径
- 常见做法有三类:
- 在 Ubuntu 上原生安装 Oracle Database(如 19c/12c);
- 使用 Docker 运行 Oracle 数据库镜像(快速、可移植);
- 仅部署 Oracle 客户端/Instant Client 用于连接远程数据库。
本文以数据库为主,并给出客户端连接与自启动要点,便于应用部署与连接。
方案一 原生安装 Oracle Database 19c
- 准备系统与用户
- 更新系统并安装依赖:sudo apt update && sudo apt install -y gcc make binutils libaio1 unixodbc alien
- 创建用户与组:sudo groupadd oinstall;sudo groupadd dba;sudo useradd -g oinstall -G dba -d /home/oracle -s /bin/bash oracle;sudo passwd oracle
- 目录与环境
- 创建目录:sudo mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1;sudo chown -R oracle:oinstall /u01/app/oracle;sudo chmod -R 775 /u01/app/oracle
- 配置环境变量(oracle 用户):
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
执行:source ~/.bashrc
- 内核与资源限制(示例值,按实际内存调整)
- /etc/sysctl.conf:fs.file-max=6815744;kernel.shmmax=4398046511104;kernel.shmall=1073741824;kernel.sem=250 32000 100 128;执行 sysctl -p
- /etc/security/limits.conf:oracle soft nproc 16384;oracle hard nproc 16384;oracle soft nofile 65536;oracle hard nofile 65536
- 安装与建库
- 以 oracle 用户解压安装介质并运行:unzip /path/to/LINUX.X64_193000_db_home.zip -d /u01/app/oracle;cd /u01/app/oracle/database;./runInstaller(图形界面或静默模式)
- 或使用 DBCA 建库;亦可用 SQL*Plus 手工建库(示例):
sqlplus / as sysdba
CREATE DATABASE orcl
USER sys IDENTIFIED BY
USER system IDENTIFIED BY
CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE ‘/u01/app/oracle/oradata/orcl/system01.dbf’ SIZE 700M REUSE
SYSAUX DATAFILE ‘/u01/app/oracle/oradata/orcl/sysaux01.dbf’ SIZE 500M REUSE
DEFAULT TABLESPACE users DATAFILE ‘/u01/app/oracle/oradata/orcl/users01.dbf’ SIZE 500M REUSE
DEFAULT TEMPORARY TABLESPACE temp TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ SIZE 20M REUSE
UNDO TABLESPACE undotbs DATAFILE ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf’ SIZE 200M REUSE;
- 启动与监听
- lsnrctl start;sqlplus / as sysdba;startup
- 客户端连接串示例(tnsnames.ora)
- ORADBSID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <db_host>)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
以上步骤覆盖环境准备、目录权限、内核参数、安装与建库、监听与连接等关键环节。
方案二 使用 Docker 运行 Oracle 数据库
- 安装 Docker:sudo apt-get update && sudo apt-get install -y docker.io && sudo systemctl enable --now docker
- 拉取并运行镜像(示例:企业版 12.2.0.1)
- docker pull store/oracle/database-enterprise:12.2.0.1
- docker run -d --name oracle-db -p 1521:1521 -p 5500:5500 store/oracle/database-enterprise:12.2.0.1
- 进入容器并修改默认口令
- docker exec -it oracle-db bash
- source /home/oracle/.profile(或相应 profile 文件)
- sqlplus / as sysdba;alter user system identified by <new_pwd>;
- 连接与应用
- 应用连接串:jdbc:oracle:thin:@//:1521/<service_name>;Service 名称与镜像说明一致(如 ORCL)
- 其他镜像与版本
- 也可使用社区镜像(如 11g XE)快速体验:docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g,启动方式与上述类似。
Docker 方式部署快速、隔离性好,适合开发测试与演示环境。
方案三 仅部署 Oracle Instant Client 用于应用连接
- 适用场景:应用服务器只需连接远程 Oracle,不在本机安装数据库。
- 安装与配置
- 安装 Instant Client 基础包与 SDK/SQL*Plus(.deb 或 .rpm,按仓库选择):sudo apt-get install -y oracle-instantclient-basic oracle-instantclient-sqlplus(或 alien 转换 .rpm)
- 配置库路径:echo /usr/lib/oracle//client64/lib | sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf && sudo ldconfig
- 配置环境变量:export ORACLE_HOME=/usr/lib/oracle//client64;export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH;export PATH=$ORACLE_HOME/bin:$PATH
- 配置 tnsnames.ora(如 /usr/lib/oracle//client64/network/admin/tnsnames.ora)后使用 sqlplus user/pass@tns_alias 连接
- 说明
- Instant Client 提供 OCI/ODBC/JDBC 驱动所需库与工具,不包含数据库实例。
该方案轻量、依赖少,适合微服务、应用服务器与 CI 环境。
连接与运维要点
- 监听与实例
- 启动监听:lsnrctl start;查看状态:lsnrctl status
- 启动实例:sqlplus / as sysdba;startup
- 常见报错速查
- command not found:检查 PATH 是否包含 $ORACLE_HOME/bin
- ORA-12541 TNS:no listener:未启动监听,执行 lsnrctl start
- 动态库加载错误:检查 LD_LIBRARY_PATH 是否包含 $ORACLE_HOME/lib
- 开机自启(原生安装)
- 在 /etc/oratab 将实例设为 Y:orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
- 创建 systemd 服务(/etc/systemd/system/oracle.service):
[Unit] Description=Oracle Auto Start Service;After=network.target
[Service] Type=simple;User=oracle;Group=oinstall;ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart;ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut;Restart=on-failure;RestartSec=30s
[Install] WantedBy=multi-user.target
启用:sudo systemctl daemon-reload && sudo systemctl enable --now oracle.service
以上要点可快速定位连接与自启动问题,提升运维效率。