Oracle 19c Linux 静默安装详解

Oracle 19c Linux 静默安装详解

适用版本:Oracle Database 19.3 (19.3.0.0.0) 及后续 RU(如 19.22、19.25) 适用平台:Oracle Linux 7 / RHEL 7 / CentOS 7(x86-64),OL 8 / RHEL 8 同样适用但需注意依赖包差异 安装方式:静默安装(Silent Install),生产环境推荐方式 文档版本:v1.0 / 2026-07


目录


1. 概述

Oracle Database 19c 是 12c Release 2 的长期支持版本(Long Term Support,LTS),提供至少到 2027 年 4 月的扩展支持,是当前生产环境的主流选择[1]。

Oracle 安装方式分两类:

方式适用场景优缺点
图形化安装(OUI)桌面环境、教学演示直观,但生产服务器通常无图形界面,且需要 X11 转发,效率低
静默安装(Silent Install)生产环境、自动化部署、容器化无需图形界面,可通过响应文件(response file)实现幂等部署

本文重点讲解静默安装 + 静默建库(DBCA -silent) 的完整流程,并整合多份社区实战经验,覆盖踩坑点。

注意:19c 安装包解压方式与 11g/12c 不同 —— 19c 必须直接解压到 ORACLE_HOME 目录后再执行 runInstaller,而不是解压到临时目录再安装到 ORACLE_HOME[2]。


2. 环境准备

2.1 硬件资源要求

参考 Oracle Support Doc ID 2610727.1[3] 与官方 Installation Guide[4]:

资源最低要求生产建议说明
内存2 GB≥ 8 GB(OLTP)/ ≥ 16 GB(DSS)SGA + PGA + OS 总和
Swap等于内存内存的 1~1.5 倍内存 > 16 GB 时可减半
/tmp1 GB≥ 2 GB安装过程临时文件
软件盘12 GB≥ 50 GB(含补丁)ORACLE_HOME + oraInventory
数据盘-独立挂载ASM 或文件系统
CPU550 MHz≥ 2 GHz 多核Oracle 不限制核数(仅 License 限制)

关键坑:内存 + Swap 总和必须 ≥ 2.5 GB,否则安装预检查会报 INS-35172 错误[3]。

2.2 操作系统与内核要求

19c 官方认证的 Linux 发行版[3][4]:

发行版最低版本备注
Oracle Linux7.4+(x86-64)推荐 UEK 内核 5
Red Hat Enterprise Linux7.4+7.9 / 8.x 同样可用
CentOS7.4+与 RHEL 二进制兼容
Oracle Linux8.1+(x86-64)19c 后期认证

查看当前系统:

cat /etc/os-release
uname -r

2.3 主机名与网络

Oracle 强制要求主机名不能为 localhost,且必须能解析为非回环 IP[3]。

# 修改主机名
hostnamectl set-hostname oradb01

# 配置 hosts 解析
cat >> /etc/hosts <<'EOF'
192.168.10.101  oradb01
EOF

验证:

hostname        # 应为 oradb01
ping -c 1 oradb01   # 必须能 ping 通非 127.0.0.1 地址

3. 系统配置

3.1 安装依赖包

方式一:使用 Oracle 预安装 RPM(推荐,仅 OL)

yum install -y oracle-database-preinstall-19c

该 RPM 会自动配置内核参数、资源限制、用户和组[3]。

方式二:手动安装依赖包(RHEL/CentOS)

yum install -y bc binutils compat-libcap1 compat-libstdc++-33 \
    elfutils-libelf elfutils-libelf-devel fontconfig-devel \
    glibc glibc-devel ksh libaio libaio-devel libX11 libXau \
    libXi libXtst libXrender libXrender-devel libgcc libstdc++ \
    libstdc++-devel libxcb make net-tools nfs-utils python \
    python-configshell python-rtslib python-six smartmontools \
    sysstat targetcli unixODBC

坑 1compat-libstdc++-33 在 RHEL 8 / OL 8 中已从 Base 源下架,需启用 Codeready Builder 源:

# RHEL 8
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
yum install -y compat-libstdc++-33

# OL 8
dnf config-manager --set-enabled ol8_codeready_builder

坑 2:缺少 libaio-devel 会触发 INS-35954 预检查失败[2]。

3.2 配置内核参数

cat >> /etc/sysctl.conf <<'EOF'
# oracle-database-preinstall-19c settings
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.panic_on_oops = 1
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
EOF

sysctl -p
******

参数说明[5]:

| 参数 | 含义 | 计算建议 |
| --- | --- | --- |
| `kernel.shmmax` | 单个共享内存段最大值 | 物理内存的 80%,必须 SGA 大小 |
| `kernel.shmall` | 共享内存总页数 | `shmmax / PAGE_SIZE`,x86-64 默认页大小 4 KB |
| `kernel.sem` | 信号量 | 格式 `semmsl semmns semopm semmni` |
| `fs.file-max` | 系统最大文件句柄 | 6815744(Oracle 推荐) |
| `fs.aio-max-nr` | 异步 IO 最大请求数 | 1048576 |
| `net.ipv4.ip_local_port_range` | 临时端口范围 | 9000-65500 避免与 Oracle 监听端口冲突 |

**坑 3**:`kernel.shmmax < SGA 大小` 会导致实例启动报 `ORA-27102: out of memory`[2]。

### 3.3 配置资源限制

```bash
cat >> /etc/security/limits.conf <<'EOF'
# oracle-database-preinstall-19c settings
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc     16384
oracle   hard   nproc     16384
oracle   soft   stack     10240
oracle   hard   stack     32768
oracle   soft   memlock   unlimited
oracle   hard   memlock   unlimited
EOF

同时需要配置 pam.d 启用 limits(OL 7 通常已默认启用):

grep -q "pam_limits.so" /etc/pam.d/system-auth || \
  echo "session required pam_limits.so" >> /etc/pam.d/system-auth

3.4 创建用户与组

# 创建 OS 组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 racdba

# 创建 oracle 用户并加入附属组
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle

# 设置密码
echo "oracle:YourStrongPwd_2026" | chpasswd

各 OS 组的用途[5]:

用途
oinstallOracle 软件所有者组(inventory group)
dbaOSDBA,SYSDBA 系统权限
operOSOPER,SYSOPER 系统权限
backupdbaSYSBACKUP 权限
dgdbaSYSDG 权限(Data Guard)
kmdbaSYSKM 权限(透明数据加密密钥管理)
racdbaSYSRAC 权限(RAC 集群管理)

注意:12c R2 起细化权限组是最佳实践,单实例也可全部合并到 dba,但不推荐。

3.5 目录规划与权限

参考 Oracle Optimal Flexible Architecture(OFA)标准[4]:

# 软件根目录
mkdir -p ******
# oraInventory 目录(多个 Oracle 产品共享)
mkdir -p ******
# 数据文件目录(生产环境建议独立挂载点)
mkdir -p ******
# 归档日志目录
mkdir -p ******

# 授权
chown -R oracle:oinstall /u01 /oradata /archivelog
chmod -R 775 /u01

坑 4:路径中不要包含空格或中文,否则 runInstaller 会异常退出[2]。

3.6 配置 oracle 用户环境变量

切换到 oracle 用户后编辑 ~/.bash_profile

su - oracle
cat >> ~/.bash_profile <<'EOF'
# ===== Oracle Environment =====
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export ORACLE_HOSTNAME=oradb01
export ORACLE_UNQNAME=orcl

# PATH & Library
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

# Locale
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

# Alias
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
EOF

source ~/.bash_profile

rlwrap 提供 SQL*Plus / RMAN 的方向键历史功能,需要单独安装:

# EPEL 源
yum install -y epel-release
yum install -y rlwrap

3.7 关闭防火墙与 SELinux

# 停止并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

生产建议:若必须保留防火墙,需要放行 1521(监听)、节点间私网全部端口(RAC)、4900-4999(GNS)等。

3.8 配置 SSH 互信(RAC 必备)

单实例可跳过。RAC 部署必须为 grid / oracle 用户在所有节点间配置无密码 SSH:

# 在每个节点每个用户下执行
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

# 互传公钥(双向)
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@node1

# 验证
ssh node2 date
ssh node1 date

Oracle 也提供 sshUserSetup.sh(在 GI 安装包 sshsetup/ 目录下)批量配置。


4. 软件静默安装

4.1 解压安装包

# 以 oracle 用户操作
su - oracle
cd $ORACLE_HOME

# 解压安装包(19c 直接解压到 ORACLE_HOME)
unzip -oq /soft/LINUX.X64_193000_db_home.zip

坑 5:19c 的安装包 LINUX.X64_193000_db_home.zip 必须解压到 ORACLE_HOME,而不是临时目录。这是与 11g/12c 的关键差异[2][6]。

4.2 编写响应文件

cat > /home/oracle/db_install.rsp <<'EOF'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0

# 安装选项:仅安装软件(建库由 DBCA 单独执行)
oracle.install.option=INSTALL_DB_SWONLY

# OS 组
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory

# Oracle 路径
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle

# 安装版本
oracle.install.db.InstallEdition=EE

# 权限分离的 OS 组
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba

# root 脚本自动执行(生产建议 false,手动执行)
oracle.install.db.rootconfig.executeRootScript=false
EOF

4.3 执行安装

cd $ORACLE_HOME

./runInstaller -silent \
    -responseFile /home/oracle/db_install.rsp \
    -waitforcompletion \
    -ignorePrereqFailure

参数说明:

参数作用
-silent静默模式,无图形界面
-responseFile指定响应文件绝对路径
-waitforcompletion安装完成前不退出(便于看日志)
-ignorePrereqFailure跳过非致命预检查警告(慎用

坑 6-ignorePrereqFailure 只能跳过警告类预检查,无法跳过致命错误(如内存不足、内核参数不合规)。强行跳过会导致后续建库失败[2]。

4.4 执行 root 脚本

安装完成后,提示以下两个脚本必须以 root 执行:

# 以 root 用户
su -

# 1. 初始化 oraInventory
/u01/app/oraInventory/orainstRoot.sh

# 2. 配置 ORACLE_HOME 权限、rootsh.log 等
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh

root.sh 主要做:

  • 修改 ORACLE_HOME 下部分文件的所有者为 root
  • 创建 /etc/oratab 文件
  • 配置 oraInst.loc

5. 静默建库(DBCA)

5.1 建库命令

dbca -silent -createDatabase \
    -templateName General_Purpose.dbc \
    -gdbName orcl \
    -sid orcl \
    -databaseConfigType SI \
    -characterSet AL32UTF8 \
    -nationalCharacterSet AL16UTF16 \
    -createAsContainerDatabase true \
    -numberOfPDBs 1 \
    -pdbName pdb1 \
    -pdbAdminPassword YourPdbPwd_2026 \
    -sysPassword YourSysPwd_2026 \
    -systemPassword YourSysPwd_2026 \
    -memoryPercentage 40 \
    -automaticMemoryManagement false \
    -totalMemory 4096 \
    -storageType FS \
    -datafileDestination /oradata \
    -recoveryAreaDestination /archivelog \
    -recoveryAreaSize 20480 \
    -redoLogFileSize 200 \
    -emConfiguration NONE \
    -sampleSchema true \
    -ignorePreReqs

5.2 关键参数详解

参数说明推荐值
-templateNameDBCA 模板General_Purpose.dbc(通用)/ Data_Warehouse.dbc(数仓)
-gdbName全局数据库名(DB_NAME.DB_DOMAIN)orcl
-sid实例名≤ 8 字符,与 gdbName 一致
-characterSet数据库字符集生产强制 AL32UTF8[2][7]
-nationalCharacterSet国家字符集(NCHAR)AL16UTF16(默认)
-createAsContainerDatabase是否创建为 CDB19c 推荐为 true
-numberOfPDBs / -pdbNamePDB 数量与名称应用数据放在 PDB,不在 CDB$ROOT
-memoryPercentage占物理内存百分比40(生产建议 60~70)
-automaticMemoryManagementAMM 开关生产强制 false[2]
-totalMemory总内存 MB(AMM 关闭时生效)4096+
-storageType存储类型FS(文件系统)/ ASM
-redoLogFileSize单个 redo 日志大小 MB200~512,依据事务量
-emConfigurationEnterprise ManagerNONE(生产用独立 OEM Cloud Control)

坑 7:字符集选错是灾难级错误。生产环境统一用 AL32UTF8,不要用 ZHS16GBK。后期改字符集需要重建库,成本极高[2][7]。

坑 8-automaticMemoryManagement false 是故意的。AMM(Automatic Memory Management)在大内存环境下与 HugePages 冲突,且会显著降低性能。生产推荐 ASMM(Automatic Shared Memory Management,即设置 SGA_TARGET + PGA_AGGREGATE_TARGET)[2]。

5.3 验证安装

# 检查实例状态
sqlplus / as sysdba <<'EOF'
SET LINESIZE 200
SELECT instance_name, status, version FROM v$instance;
SELECT name, open_mode FROM v$database;
SELECT name, open_mode FROM v$pdbs;
SELECT banner_full FROM v$version;
EOF

预期输出:

INSTANCE_NAME    STATUS       VERSION
---------------- ------------ ---------------------
orcl             OPEN         19.0.0.0.0

NAME      OPEN_MODE
--------- --------------------
ORCL      READ WRITE

NAME      OPEN_MODE
--------- --------------------
PDB$SEED  READ ONLY
PDB1      READ WRITE

检查监听:

lsnrctl status

6. 常见坑与排错

坑 9:安装中断后无法重装

现象:安装失败后再次执行 runInstaller 提示已安装。

解决:清理之前的残留:

# 删除 oraInventory 中的产品记录
rm -rf /u01/app/oraInventory/ContentsXML
# 删除 ORACLE_HOME 内容
rm -rf /u01/app/oracle/product/19.0.0/dbhome_1/*
# 删除 /etc/oratab
rm -f /etc/oratab
# 重新解压安装包
cd /u01/app/oracle/product/19.0.0/dbhome_1
unzip -oq /soft/LINUX.X64_193000_db_home.zip

坑 10:DBCA 失败后无法重建

现象dbca 报错 ORA-01078 / LRM-00109。

解决:删除残留实例和文件:

# 删除实例
dbca -silent -deleteDatabase -sourceSID orcl

# 手动清理
rm -rf /oradata/ORCL/*
rm -f $ORACLE_HOME/dbs/orapworcl
rm -f $ORACLE_HOME/dbs/spfileorcl.ora
rm -f $ORACLE_HOME/dbs/initorcl.ora
rm -f /etc/oratab  # 或编辑删除对应行

坑 11:监听无法启动

现象lsnrctl startTNS-12555: TNS:permission denied

原因/var/tmp/.oracle socket 文件权限丢失。

解决

mkdir -p ******
chown oracle:oinstall /var/tmp/.oracle
chmod 755 /var/tmp/.oracle

坑 12: HugePages 未配置导致启动慢

现象:实例启动慢,alert log 中有 HugePages_Total 警告。

原因:SGA 较大(> 8 GB)但未启用大页。

解决

# 1. 计算所需大页数(每页 2 MB)
# 所需大页数 = SGA_SIZE_MB / 2
# 例如 SGA 16 GB → 8192 / 2 = 4096 大页

# 2. 配置 sysctl
echo "vm.nr_hugepages = 4096" >> /etc/sysctl.conf
sysctl -p

****** 3. 禁用 AMM(AMM 与 HugePages 不兼容)
# 在 init 参数中确保 MEMORY_TARGET=0

# 4. 重启系统
reboot

# 5. 验证
grep Huge /proc/meminfo

坑 13:补丁应用失败

现象:OPatch 报 Prereq check failed

解决

# 1. 确认 OPatch 版本
$ORACLE_HOME/OPatch/opatch version

# 2. 升级 OPatch(下载 p6880880 对应版本)
cd $ORACLE_HOME
mv OPatch OPatch.bak
unzip -oq /soft/p6880880_190000_Linux-x86-64.zip

# 3. 应用补丁前必须停实例和监听
lsnrctl stop
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF

# 4. 应用补丁
cd /soft/35943157  # RU 补丁号
$ORACLE_HOME/OPatch/opatch apply -silent

# 5. 数据字典补丁
sqlplus / as sysdba <<EOF
startup upgrade;
exit;
EOF
cd $ORACLE_HOME/OPatch
./datapatch -verbose

7. 生产环境最佳实践

7.1 文件系统布局

挂载点用途推荐大小推荐文件系统
/u01ORACLE_HOME + oraInventory50 GBxfs
/oradata数据文件按需xfs(LVM 条带)或 ASM
/archivelog归档日志≥ 数据库大小xfs
/backupRMAN 备份≥ 2 倍数据库大小xfs
/soft安装介质、补丁50 GBxfs

最佳实践:数据、归档、备份物理上分离,避免单点故障。

7.2 内存规划

物理内存假设 32 GB
  OS 保留:           4 GB
  Oracle 内存(80%):28 GB
    SGA_TARGET:      20 GB(Buffer Cache 12 GB + Shared Pool 4 GB + 其他)
    PGA_AGGREGATE_TARGET:8 GB
  HugePages:         10240 页(每页 2 MB,共 20 GB)

7.3 字符集统一

用途推荐值
数据库字符集(CHARACTER SET)AL32UTF8
国家字符集(NATIONAL CHARACTER SET)AL16UTF16
客户端 NLS_LANGAMERICAN_AMERICA.AL32UTF8

坑 14:客户端 NLS_LANG 与数据库字符集不一致会导致中文乱码。客户端 NLS_LANG 第三段必须等于数据库字符集[7]。

7.4 安全加固

-- 1. 锁定默认账户
ALTER USER DBSNMP ACCOUNT LOCK;
ALTER USER OUTLN ACCOUNT LOCK;

-- 2. 修改默认密码
ALTER USER SYS IDENTIFIED BY ******
ALTER USER SYSTEM IDENTIFIED BY ******

-- 3. 启用密码复杂度
@?/rdbms/admin/utlpwdmg.sql

-- 4. 设置失败登录次数
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LIFE_TIME 90;

-- 5. 关闭不必要的服务
-- 不使用 XDB、APEX 时,移除相应组件

7.5 启用归档模式与 Flashback

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;

-- 验证
ARCHIVE LOG LIST;
SELECT flashback_on FROM v$database;

7.6 配置自动备份与监控

  • RMAN 备份:每日增量 + 每周全备 + 归档日志自动备份
  • OSS / S3 异地备份:将备份集上传到对象存储
  • Data Guard 备库:异地容灾
  • OEM Cloud Control:统一监控多个数据库实例
  • 自定义脚本:通过 cron 调用 RMAN 和告警脚本

8. 参考资料

[1] Oracle Database 19c Lifetime Support 通告: https://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf

[2] 三笠丶,《Oracle 19c 静默安装避坑指南:一次搞定,不走弯路》,墨天轮: https://www.modb.pro/db/2049726570299465728

[3] Oracle Support Doc ID 2610727.1,《在 64 位 OL7 或者 RHEL7 上安装 Oracle 19c 数据库的要求》: https://support.oracle.com/knowledge/Oracle%20Cloud/2610727_1.html

[4] Oracle Database Installation Guide 19c for Linux: https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/

[5] Oracle Database 19c 概念文档,第 15 章 Memory Architecture: https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/memory-architecture.html

[6] 福尔摩俞,《ORACLE 19C 安装》,墨天轮: https://www.modb.pro/doc/132974

[7] Oracle Database Globalization Support Guide 19c: https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/

[8] Lucifer 三思而后行,《Oracle Linux 7.9 一键安装 Oracle 19C 单机(19.22)》,墨天轮: https://www.modb.pro/db/1783040588504977408


后续相关文档