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 时可减半 |
| /tmp | 1 GB | ≥ 2 GB | 安装过程临时文件 |
| 软件盘 | 12 GB | ≥ 50 GB(含补丁) | ORACLE_HOME + oraInventory |
| 数据盘 | - | 独立挂载 | ASM 或文件系统 |
| CPU | 550 MHz | ≥ 2 GHz 多核 | Oracle 不限制核数(仅 License 限制) |
关键坑:内存 + Swap 总和必须 ≥ 2.5 GB,否则安装预检查会报 INS-35172 错误[3]。
2.2 操作系统与内核要求
19c 官方认证的 Linux 发行版[3][4]:
| 发行版 | 最低版本 | 备注 |
|---|---|---|
| Oracle Linux | 7.4+(x86-64) | 推荐 UEK 内核 5 |
| Red Hat Enterprise Linux | 7.4+ | 7.9 / 8.x 同样可用 |
| CentOS | 7.4+ | 与 RHEL 二进制兼容 |
| Oracle Linux | 8.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
坑 1:compat-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]:
| 组 | 用途 |
|---|---|
oinstall | Oracle 软件所有者组(inventory group) |
dba | OSDBA,SYSDBA 系统权限 |
oper | OSOPER,SYSOPER 系统权限 |
backupdba | SYSBACKUP 权限 |
dgdba | SYSDG 权限(Data Guard) |
kmdba | SYSKM 权限(透明数据加密密钥管理) |
racdba | SYSRAC 权限(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 关键参数详解
| 参数 | 说明 | 推荐值 |
|---|---|---|
-templateName | DBCA 模板 | General_Purpose.dbc(通用)/ Data_Warehouse.dbc(数仓) |
-gdbName | 全局数据库名(DB_NAME.DB_DOMAIN) | orcl |
-sid | 实例名 | ≤ 8 字符,与 gdbName 一致 |
-characterSet | 数据库字符集 | 生产强制 AL32UTF8[2][7] |
-nationalCharacterSet | 国家字符集(NCHAR) | AL16UTF16(默认) |
-createAsContainerDatabase | 是否创建为 CDB | 19c 推荐为 true |
-numberOfPDBs / -pdbName | PDB 数量与名称 | 应用数据放在 PDB,不在 CDB$ROOT |
-memoryPercentage | 占物理内存百分比 | 40(生产建议 60~70) |
-automaticMemoryManagement | AMM 开关 | 生产强制 false[2] |
-totalMemory | 总内存 MB(AMM 关闭时生效) | 4096+ |
-storageType | 存储类型 | FS(文件系统)/ ASM |
-redoLogFileSize | 单个 redo 日志大小 MB | 200~512,依据事务量 |
-emConfiguration | Enterprise Manager | NONE(生产用独立 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 start 报 TNS-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 文件系统布局
| 挂载点 | 用途 | 推荐大小 | 推荐文件系统 |
|---|---|---|---|
/u01 | ORACLE_HOME + oraInventory | 50 GB | xfs |
/oradata | 数据文件 | 按需 | xfs(LVM 条带)或 ASM |
/archivelog | 归档日志 | ≥ 数据库大小 | xfs |
/backup | RMAN 备份 | ≥ 2 倍数据库大小 | xfs |
/soft | 安装介质、补丁 | 50 GB | xfs |
最佳实践:数据、归档、备份物理上分离,避免单点故障。
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_LANG | AMERICAN_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
后续相关文档