Oracle 19c on Oracle Linux 8 安装差异详解
Oracle 19c on Oracle Linux 8 安装差异详解
适用版本:Oracle Database 19c (19.3+) for Linux x86-64 适用场景:在 OL 8 / RHEL 8 / CentOS 8 / Rocky 8 等Linux 8 系发行版上部署 文档版本:v1.0 / 2026-07
目录
- 1. 概述:为什么需要专门讨论 Linux 8
- 2. Oracle 19c 与 Linux 8 的兼容性现状
- 3. Linux 8 与 Linux 7 的关键差异
- 4. 安装前置准备
- 5. 关键坑 1:CV_ASSUME_DISTID 配置
- 6. 关键坑 2:preinstall 包版本选择
- 7. 关键坑 3:依赖包变化
- 8. 关键坑 4:root.sh 执行
- 9. 关键坑 5:listener.ora HOST 配置
- 10. 关键坑 6:oratab 与服务脚本
- 11. 完整安装流程示例
- 12. Oracle Linux 8 特有特性
- 13. 常见坑与排错
- 14. 最佳实践
- 15. 参考资料
1. 概述:为什么需要专门讨论 Linux 8
Oracle Database 19c 是 Oracle 长期支持版本(LTS),官方于 2020 年 4 月发布基础版 19.3,但当时主流 Linux 系统仍是 7.x。后来 RHEL 8 / Oracle Linux 8 / CentOS 8 相继 GA,但 19.3 的 CVU(Cluster Verification Utility)没有内置对 Linux 8 系列的识别支持[1]。
直接在 Linux 8 上安装 19c 会出现各种奇怪错误,最常见的有:
INS-08101: Unexpected issue卡在 supportedOSChecklibnsl.so.1: cannot open shared object file找不到库preinstall包不识别系统版本root.sh执行失败但无明显错误- 监听器启动失败
本文专门梳理 Linux 8 系部署 19c 的所有差异点和坑,让你一次成功。
适用范围:
- Oracle Linux 8.x
- Red Hat Enterprise Linux 8.x
- CentOS 8 / Stream
- Rocky Linux 8
- AlmaLinux 8
- 麒麟 V10 SP3(基于 Linux 8)
- openEuler 22.03+
2. Oracle 19c 与 Linux 8 的兼容性现状
官方支持情况[2][3]:
| 19c 版本 | OL 7 | OL 8 | RHEL 7 | RHEL 8 |
|---|---|---|---|---|
| 19.3 基础版 | ✅ 原生支持 | ❌ 不识别 | ✅ 原生支持 | ❌ 不识别 |
| 19.6+(RU) | ✅ 原生支持 | ⚠️ 需配置 | ✅ 原生支持 | ⚠️ 需配置 |
| 19.11+ | ✅ 原生支持 | ✅ 支持 | ✅ 原生支持 | ✅ 支持 |
MOS Note 2553472.1 明确说明[1]:
- Oracle 19.6.0.0.0(JAN2020 DBRU - Patch 30557433)或更高版本才正式支持 RHEL 8
- 19.3 基础版安装时需要:
- 设置
CV_ASSUME_DISTID=OL7强制 CVU 按 OL7 兼容项校验 - 或在安装时同步应用 19.6+ RU 补丁(用
runInstaller -applyRU)
- 设置
ARM64 平台:19.19 起官方提供 ARM64 版本[4],但仅支持 OL 8 (aarch64)。
3. Linux 8 与 Linux 7 的关键差异
| 维度 | Linux 7 | Linux 8 | 对 Oracle 影响 |
|---|---|---|---|
| 包管理器 | yum | dnf(yum 是符号链接) | 命令兼容 |
| 默认 Shell | bash | bash | 无 |
| 默认文件系统 | xfs | xfs | 无 |
| 默认防火墙 | firewalld | firewalld + nftables | 端口开放命令相同 |
| 网络管理 | network scripts | NetworkManager | 网络配置方式不同 |
| libnsl | 默认安装 | 默认不安装[5] | sqlplus 报错 |
| pdksh | 仓库可用 | 仅 ksh,无 pdksh[5] | dbca 检查失败 |
| compat-libstdc++-33 | 仓库可用 | 已移除[5] | 需 EPEL |
| 默认 Python | 2.7 | 3.6 | 部分脚本需调整 |
| 默认 OpenSSL | 1.0 | 1.1 | TLS 配置变化 |
| 默认时区 | 通常 UTC | 通常 UTC | 无 |
| 内核版本 | 3.10 | 4.18+ | 性能更好 |
| cgroups | v1 | v2(默认) | Docker 兼容性 |
关键差异点总结:
- 依赖包变化:libnsl、pdksh 等关键包需要手工处理
- CVU 不识别:必须用
CV_ASSUME_DISTID绕过 - preinstall 包版本:必须用 el8 版本,不能用 el7
- 网络配置:NetworkManager 替代了传统 network scripts
4. 安装前置准备
4.1 系统检查
# 查看操作系统版本
cat /etc/os-release
# NAME="Oracle Linux Server"
# VERSION="8.9"
# ID="ol"
# ...
# 查看内核版本
uname -r
# 5.15.0-101.103.2.1.el8uek.x86_64
# 查看内存
free -h
# 查看 Swap
swapon -s
# 查看磁盘空间
df -h /tmp /u01 /opt
4.2 关闭防火墙和 SELinux
# 关闭防火墙(开发环境)
systemctl stop firewalld
systemctl disable firewalld
# 或开放端口(生产环境)
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --permanent --add-port=5500/tcp
firewall-cmd --reload
# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证
getenforce
# Disabled
4.3 配置主机名和 hosts
# 设置主机名
hostnamectl set-hostname oracle19c.example.com
# 查看 IP
ip addr show eth0
# 配置 hosts
cat >> /etc/hosts <<EOF
192.168.1.100 oracle19c.example.com oracle19c
EOF
# 验证
hostname -f
ping -c 1 oracle19c
坑 1:RHEL 8 上 hostname -i 默认返回 IPv6 地址,会导致监听器绑定失败。务必在 hosts 中显式配置 IPv4[5]。
5. 关键坑 1:CV_ASSUME_DISTID 配置
5.1 为什么需要 CV_ASSUME_DISTID
Oracle 安装程序(CVU)启动时会读取 /etc/os-release 识别发行版[1]。19c(尤其是 19.3-19.12)的 CVU 没有内置对 Linux 8 系列的签名支持,一检测到 ID="rhel" 且 VERSION_ID="8.x" 就直接报:
INS-08101: Unexpected issue while checking for environment prerequisites.
或卡在 supportedOSCheck。
设置 CV_ASSUME_DISTID 不是”欺骗”,而是告诉 CVU:“按我指定的发行版 ID 去查兼容性表”,它就会去匹配 OL7 / RHEL7 的已知通过项[1]。
5.2 如何配置
方式 1:临时 export(推荐静默安装)
# 在执行 runInstaller 前的同一 shell 中
export CV_ASSUME_DISTID=OL7
./runInstaller -silent -responseFile /tmp/db_install.rsp
方式 2:写入 .bash_profile(推荐图形化安装)
su - oracle
vi ~/.bash_profile
# 添加
export CV_ASSUME_DISTID=OL7
# 使生效
source ~/.bash_profile
# 验证
echo $CV_ASSUME_DISTID
# OL7
方式 3:grid 用户和 oracle 用户都设置(RAC 场景)
# RAC 安装时,两个用户都要分别设置
# grid 用户
su - grid
echo 'export CV_ASSUME_DISTID=OL7' >> ~/.bash_profile
source ~/.bash_profile
# oracle 用户
su - oracle
echo 'export CV_ASSUME_DISTID=OL7' >> ~/.bash_profile
source ~/.bash_profile
坑 2:变量名容易拼错!是 CV_ASSUME_DISTID,不是 CV_ASSUMED_DISTID 或 CV_ASSUME_DIST,注意大小写,不能有空格[1]。
坑 3:不要设在 /etc/profile 全局生效,可能干扰其他 Oracle 版本或非 Oracle 工具[1]。
5.3 取值选择
| 取值 | 适用场景 |
|---|---|
OL7 | 推荐,所有 Linux 8 系最稳定 |
OL8 | 仅 19.19+ 且打了最新 RU 补丁时考虑 |
RHEL7.6 | 备选 |
RHEL7.9 | 备选 |
为什么选 OL7 而不是 OL8[1]:
听起来 OL8 更”真实”,但实际在 19c 上反而容易触发新问题 —— 因为 19c 的 CVU 根本没有完整定义 OL8 的检查项,部分校验逻辑会 fallback 到空值或抛 NPE。而 OL7 是经过 Oracle 内部充分测试的兼容路径。
除非你明确知道目标环境是 Oracle Linux 8 且已打过最新 RU 补丁(如 19.24+),否则一律用 OL7。
5.4 常见配置错误
错误 1:变量名拼错
# ❌ 错误
export CV_ASSUMED_DISTID=OL7 # 多了 D
export CV_ASSUME_DIST=OL7 # 少了 ID
export cv_assume_distid=OL7 # 小写
# ✅ 正确
export CV_ASSUME_DISTID=OL7
错误 2:没生效到子进程
# 用 echo 在运行 runInstaller 的同一行 shell 里确认
echo $CV_ASSUME_DISTID
# 如果为空,说明没 source 或写错文件位置
错误 3:写在 /etc/profile 全局
# ❌ 不推荐
echo 'export CV_ASSUME_DISTID=OL7' >> /etc/profile
# ✅ 推荐:仅 oracle 用户
echo 'export CV_ASSUME_DISTID=OL7' >> /home/oracle/.bash_profile
6. 关键坑 2:preinstall 包版本选择
6.1 OL 8 上的安装
方式 1:从 ULN 或 Oracle Linux yum 源
dnf install -y oracle-database-preinstall-19c
方式 2:手动下载 RPM
# 下载 el8 版本
curl -o oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm \
https://yum.oracle.com/repo/OracleLinux/OL8/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm
dnf -y localinstall oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm
6.2 RHEL 8 上的安装
坑 4:RHEL 8 必须用 el8 版本的 preinstall 包[5]!
# ❌ 错误:用 el7 包会缺失 fs.aio-max-nr 等内核参数
dnf install -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
# ✅ 正确:用 el8 包
dnf install -y oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm
手动补全缺失项(如未用 el8 包):
# 补全内核参数
cat >> /etc/sysctl.d/99-oracle.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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
EOF
sysctl --system
# 补全 limits
cat >> /etc/security/limits.d/oracle-database-preinstall-19c.conf <<EOF
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
EOF
6.3 验证 preinstall 是否生效
# 检查 oracle 用户
id oracle
# 应输出:uid=54321(oracle) gid=54321(oinstall) groups=...
# 检查内核参数
sysctl -a | grep -E "shmmax|sem|aio-max"
# fs.aio-max-nr = 1048576
# kernel.shmmax = ...
# kernel.sem = 250 32000 100 128
# 检查 limits 文件
ls /etc/security/limits.d/oracle-database-preinstall-19c.conf
cat /etc/security/limits.d/oracle-database-preinstall-19c.conf
7. 关键坑 3:依赖包变化
7.1 libnsl 库
问题:RHEL 8 默认不安装 libnsl.so.1,导致 sqlplus 启动时报[5]:
sqlplus: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory
解决:
# 必须同时安装 x86_64 和 i686 版本
dnf install -y libnsl libnsl.i686
# 验证
ldconfig -p ****** grep libnsl
# libnsl.so.1 (libc6,x86-64) => /lib64/libnsl.so.1
# libnsl.so.1 (libc6) => /lib/libnsl.so.1
openEuler 22.03 上的特殊处理:
# openEuler 用 libnsl2
dnf install -y libnsl2
# 软链或从 Oracle stubs 目录复制
ln -sf /usr/lib64/libnsl.so.2 /usr/lib64/libnsl.so.1
7.2 ksh 替代 pdksh
问题:RHEL 8 仓库中只有 ksh,没有 pdksh[5]。
现象:dbca 在 shell 检查时卡住或报错。
解决:
# 安装 ksh
dnf install -y ksh
# 创建符号链接(让 dbca 找到 pdksh)
ln -sf /usr/bin/ksh /bin/pdksh
# 验证
which pdksh
# /bin/pdksh
pdksh --version
# version sh (AT&T Research)
7.3 compat-libstdc++-33 处理
问题:RHEL 8 已移除 compat-libstdc++-33 和 compat-libcap1[5],是 RHEL 7 的遗留包。
解决方式 1:从 EPEL 仓库安装
# 安装 EPEL
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# 安装 compat 包
dnf install -y compat-libstdc++-33 compat-libcap1
解决方式 2:从 OL 8 兼容仓库
# 配置 OL 8 兼容仓库
cat > /etc/yum.repos.d/oracle-linux-ol8.repo <<'EOF'
[ol8_baseos_latest]
name=Oracle Linux 8 BaseOS Latest
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
[ol8_appstream]
name=Oracle Linux 8 Application Stream
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
EOF
dnf install -y compat-libcap1
解决方式 3:跳过(19c 实际不需要)
19c 实际上不需要 compat-libstdc++-33,这是 CVU 检查清单的遗留项。可以在 OUI 中勾选 Ignore All 跳过。
7.4 完整依赖清单
OL 8 / RHEL 8 上完整依赖:
dnf install -y bc binutils elfutils-libelf elfutils-libelf-devel \
fontconfig-devel glibc glibc-devel ksh libaio libaio-devel \
libnsl libnsl.i686 libX11 libXau libXi libXtst libXrender libXrender-devel \
libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel \
net-tools nfs-utils targetcli rsync smartmontools chrony
# 创建 pdksh 符号链接
ln -sf /usr/bin/ksh /bin/pdksh
8. 关键坑 4:root.sh 执行
坑 5:RPM 安装方式下 root.sh 不显式提示,但实际仍需关注[5]。
ZIP + OUI 安装方式:
# OUI 末尾会提示执行
su -
# 执行 root.sh
/opt/oracle/product/19c/dbhome_1/root.sh
# 执行时可能提示输入 ORACLE_HOME(回车默认即可)
RPM 安装方式:
RPM 包内部已自动执行了 root.sh 等价操作,但需要手动验证:
# 验证关键文件
ls -l /etc/oratab
ls -l /usr/local/bin/oraenv
ls -l /usr/local/bin/dbhome
ls -l /usr/local/bin/coraenv
# 这三个脚本应该已创建
# 验证 /etc/init.d/ 服务脚本
ls -l /etc/init.d/oracledb_ORCLCDB-19c
坑 6:如果之前设置过 CV_ASSUME_DISTID,root.sh 可能卡住[5]。
解决:
# 临时清空
unset CV_ASSUME_DISTID
# 再执行 root.sh
/opt/oracle/product/19c/dbhome_1/root.sh
9. 关键坑 5:listener.ora HOST 配置
坑 7:RHEL 8 默认 hostname -i 返回 IPv6 地址,导致监听绑定失败[5]。
现象:
lsnrctl start
# TNS-12542: TNS:address already in use
# 或监听器起不来
检查:
# 查看 hostname -i 输出
hostname -i
# 如果是 IPv6 地址(如 fe80::...)则有问题
# 查看 listener.ora
cat $ORACLE_HOME/network/admin/listener.ora
# HOST = localhost -- ❌ 错误
# HOST = oracle19c -- ⚠️ 可能解析为 IPv6
# HOST = 192.168.1.100 -- ✅ 正确
解决:
# 1. 修改 listener.ora
vi $ORACLE_HOME/network/admin/listener.ora
# 改为 IPv4 地址
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
坑 8:LD_LIBRARY_PATH 未配置也会导致监听器启动失败[5]:
# 现象
lsnrctl start
# libclntsh.so.19.1: cannot open shared object file: No such file or directory
# 解决
su - oracle
echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH' >> ~/.bash_profile
source ~/.bash_profile
lsnrctl start
10. 关键坑 6:oratab 与服务脚本
坑 9:/etc/init.d/oracledb_ORCLCDB-19c start 可能静默失败[5]。
检查清单:
# 1. 检查 /etc/oratab
cat /etc/oratab
# 应有:ORCLCDB:/opt/oracle/product/19c/dbhome_1:N
# 最后一位 N 表示不自动启动,但服务脚本需要这行存在
# 2. 检查 listener.ora 中 HOST 值(见第 9 节)
# 3. 检查 oracle 用户环境变量
su - oracle
echo $ORACLE_HOME
echo $ORACLE_SID
echo $LD_LIBRARY_PATH
oratab 文件说明:
# 格式:$ORACLE_SID:$ORACLE_HOME:<N|Y>
# N: 不通过 dbstart 自动启动
# Y: 通过 dbstart 自动启动
ORCLCDB:/opt/oracle/product/19c/dbhome_1:N
手动添加条目(如缺失):
echo 'ORCLCDB:/opt/oracle/product/19c/dbhome_1:N' >> /etc/oratab
11. 完整安装流程示例
11.1 静默安装方式
步骤 1:准备系统
# 关闭 SELinux 和防火墙
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
# 配置主机名
hostnamectl set-hostname oracle19c.example.com
echo "192.168.1.100 oracle19c.example.com oracle19c" >> /etc/hosts
步骤 2:安装 preinstall 包
# OL 8
dnf install -y oracle-database-preinstall-19c
# RHEL 8(手动下载)
curl -o preinstall.rpm https://yum.oracle.com/repo/OracleLinux/OL8/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm
dnf -y localinstall preinstall.rpm
步骤 3:补全依赖
dnf install -y libnsl libnsl.i686 ksh
ln -sf /usr/bin/ksh /bin/pdksh
步骤 4:创建目录
mkdir -p ******
mkdir -p ******
chown -R oracle:oinstall /u01
chmod -R 775 /u01
步骤 5:配置 oracle 用户环境变量
su - oracle
cat >> ~/.bash_profile <<'EOF'
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export CV_ASSUME_DISTID=OL7
EOF
source ~/.bash_profile
步骤 6:解压安装包
cd $ORACLE_HOME
unzip /tmp/LINUX.X64_193000_db_home.zip
步骤 7:编辑响应文件
cp $ORACLE_HOME/install/response/db_install.rsp /tmp/db_install.rsp
vi /tmp/db_install.rsp
# 关键参数
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
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
DECLINE_SECURITY_UPDATES=true
步骤 8:执行安装
# 确认 CV_ASSUME_DISTID 生效
echo $CV_ASSUME_DISTID
# OL7
# 执行静默安装
./runInstaller -silent -responseFile /tmp/db_install.rsp -ignorePrereqFailure
步骤 9:执行 root 脚本
su -
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.3.0/dbhome_1/root.sh
步骤 10:建库
su - oracle
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orcl -sid orcl \
-characterSet AL32UTF8 \
-sysPassword Oracle_123 \
-systemPassword Oracle_123 \
-createAsContainerDatabase false \
-storageType FS \
-datafileDestination "/u01/app/oracle/oradata" \
-memoryPercentage 40 \
-emConfiguration NONE
11.2 RPM 安装方式
# 1. 安装 preinstall
dnf install -y oracle-database-preinstall-19c
# 2. 补全依赖
dnf install -y libnsl libnsl.i686 ksh
ln -sf /usr/bin/ksh /bin/pdksh
# 3. 安装数据库软件
dnf -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm
# 4. 配置(修改 SID 等)
vi /etc/sysconfig/oracledb_ORCLCDB-19c.conf
# 5. 建库
/etc/init.d/oracledb_ORCLCDB-19c configure
# 6. 验证
su - oracle
sqlplus / as sysdba
12. Oracle Linux 8 特有特性
12.1 UEK 内核
Oracle Linux 8 默认使用 UEK(Unbreakable Enterprise Kernel),相比 RHEL 8 默认内核:
- 更好的 Oracle 性能优化
- 默认开启透明大页(THP)需关闭
- Ksplice 支持热补丁
# 查看内核
uname -r
# 5.15.0-101.103.2.1.el8uek.x86_64 -- UEK
# 4.18.0-513.el8.x86_64 -- RHCK
# 关闭透明大页(Oracle 推荐)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 持久化
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
chmod +x /etc/rc.local
12.2 Oracle Linux 8 AppStream
OL 8 的 AppStream 仓库提供了一些 Oracle 相关包:
dnf module list | grep oracle
# oracle-database-preinstall-19c
12.3 Btrfs 文件系统支持
OL 8 支持 Btrfs,但 Oracle 数据文件不建议放 Btrfs 上,建议用 xfs 或 ext4。
13. 常见坑与排错
坑 1:INS-08101 Unexpected issue
原因:CVU 不识别 Linux 8。
解决:
export CV_ASSUME_DISTID=OL7
./runInstaller
坑 2:libnsl.so.1: cannot open shared object file
原因:RHEL 8 默认未装 libnsl[5]。
解决:
dnf install -y libnsl libnsl.i686
坑 3:dbca 卡在 shell 检查
原因:缺少 pdksh[5]。
解决:
dnf install -y ksh
ln -sf /usr/bin/ksh /bin/pdksh
坑 4:preinstall 包安装失败 “缺少 /etc/redhat-release”
现象(麒麟 V10 / openEuler):
/etc/redhat-release is needed by oracle-database-preinstall-19c
解决:
# 创建 redhat-release 文件
echo "Red Hat Enterprise Linux Server release 8.0 (Maipo)" > /etc/redhat-release
# 重新安装
dnf -y localinstall oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm
坑 5:listener 起不来 ORA-12541
原因:listener.ora 中 HOST 错误[5]。
解决:见第 9 节。
坑 6:configure 卡在 32%
原因:通常是 /dev/shm 不足或内存不够。
解决:
# 查看 /dev/shm
df -h /dev/shm
# 调整 /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
mount -o remount /dev/shm
# 重试
/etc/init.d/oracledb_ORCLCDB-19c delete
/etc/init.d/oracledb_ORCLCDB-19c configure
坑 7:内核参数不生效
原因:RHEL 8 上 sysctl 配置位置变化。
解决:
# RHEL 8 推荐 /etc/sysctl.d/
cat > /etc/sysctl.d/99-oracle.conf <<EOF
fs.aio-max-nr = 1048576
kernel.shmmax = 536870912
...
EOF
sysctl --system -- 加载所有配置
坑 8:安装 19.3 后想升级到 19.19
# 1. 下载 19.19 RU 补丁(Patch 35037840)
# 2. 安装 opatch
cd $ORACLE_HOME
unzip p6880880_190000_Linux-x86-64.zip
# 3. 应用 RU
$ORACLE_HOME/OPatch/opatch apply /tmp/35037840
# 4. 编译失效对象
sqlplus / as sysdba <<EOF
@?/rdbms/admin/catbundle.sql psu apply
@?/rdbms/admin/utlrp.sql
EOF
14. 最佳实践
- 优先用 Oracle Linux 8 + UEK:与 Oracle 兼容性最佳
- 必须设置 CV_ASSUME_DISTID=OL7[1]:19.3-19.12 在 Linux 8 上的必经之路
- 用 el8 版本 preinstall 包[5]:避免内核参数和 limits 缺失
- 同时装 libnsl 的 x86_64 和 i686 版本[5]:避免 sqlplus 启动失败
- 创建 pdksh 符号链接[5]:避免 dbca 卡住
- listener.ora HOST 用 IPv4 地址[5]:避免 IPv6 解析问题
- 关闭透明大页:与 Oracle 自动内存管理冲突
- 配置 LD_LIBRARY_PATH:避免监听器启动失败
- 升级到最新 RU:19.19+ 原生支持 Linux 8
- 使用 xfs 文件系统:Linux 8 上推荐
15. 参考资料
[1] php.cn,《Oracle 19c 在 Linux 8 上安装报错通过 CV_ASSUME_DISTID 解决》: https://m.php.cn/faq/2423125.html
[2] Oracle MOS Note 2553472.1,Oracle Database on RHEL 8 / OL 8 支持矩阵: https://support.oracle.com/epmos/faces/DocumentDisplay?id=2553472.1
[3] CSDN,《Oracle Database 19c 在 RHEL8 64 位的安装要求》: https://blog.csdn.net/weixin_61212661/article/details/130341800
[4] Oracle Database 19c for LINUX ARM (aarch64) 下载页: https://www.oracle.com/nz/database/technologies/oracle19c-linux-arm64-downloads.html
[5] php.cn,《如何在 RHEL 8 上通过 RPM 包快速部署 Oracle 19c》: https://global.php.cn/zh/faq/1797073084.html
[6] CSDN,《(第 6 天)RHEL 8 安装单机 Oracle 19C CDB 数据库》: https://blog.csdn.net/m0_50546016/article/details/134957957
[7] 云贝教育,《银河麒麟 kylin_v10 使用 RPM 安装 ORACLE 19C》,墨天轮: https://www.modb.pro/db/1815587493811597312
[8] einyboy,《鲲鹏 ARM 构架 openEuler 操作系统安装 Oracle 19c》: https://www.zovps.com/article/?id=136654
[9] Oracle Database 19c Installation Guide for Linux: https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/
[10] iTops FAQ,RHEL 8 上 Oracle 19c 安装: https://www.askitops.com/
相关文章