Oracle Linux 8安装Oracle 21c必须严格按顺序执行:先dnf install oracle-database-preinstall-21c(自动创建oracle用户、设组、配limits和sysctl),再安装主RPM包;root运行/etc/init.d/oracledb_ORCLCDB-21c configure初始化监听与数据库;SELinux和firewalld须彻底禁用;sqlplus需alias rlwrap支持方向键。
oracle-database-ee-21c 在 Oracle Linux 8 上不是直接 yum install 就能装完的,必须分步处理预依赖、用户环境、内核参数和初始化脚本,否则 /etc/init.d/oracledb_ORCLCDB-21c configure 会失败或监听起不来。跳过这一步,oracle 用户不会被自动创建,/u01 目录权限、sysctl 参数、limits.conf 都不会生效,后续所有操作都会卡在权限或资源限制上。
dnf install -y oracle-database-preinstall-21c 必须最先执行(它会建 oracle 用户、设组、改 /etc/security/limits.d/oracle-database-preinstall-21c.conf)dnf install -y oracle-database-ee-21c-1.0-1.ol8.x86_64.rpm(RPM 文件需提前从 Oracle 正式下载,不能靠 yum repo 自动拉取)dnf localinstall —— 它不保证依赖顺序,容易漏掉 libnsl 或 compat-libstdc++ 等隐式依赖SELinux 半开状态(permissive)会导致 sqlplus 连接时出现 ORA-12547: TNS:lost contact;firewalld 没停干净会让 lsnrctl start 成功但外部连不上 1521 端口。
setenforce 0 是临时关闭,必须同步改 /etc/selinux/config 里 SELINUX=disabled,否则重启后失效systemctl disable --now firewalld.service 比单独 stop 更可靠,避免下次 reboot 自启sestatus 应输出 disabled,systemctl is-active firewalld 应输出 inactive
oracle 用户没权限写 /etc/init.d/ 下的服务脚本,也不能直接调用 oradim 或 dbca 创建实例——这些都得由 root 走封装好的初始化流程。
/etc/init.d/oracledb_ORCLCDB-21c configure
oracle 用户身份调用 dbca -silent -createDatabase
$ORACLE_HOME/network/admin/listener.ora
oracledb_ORCLCDB-21c)并启用/opt/oracle/oradata/ORCLCDB 和 $ORACLE_HOME/network/admin/listener.ora 再重试,不要手动跑 dbca
默认 sqlplus 不支持上下箭头翻历史命令,这不是 bug,是 Oracle RPM 包没打包 readline 支持。
dnf install -y rlwrap(注意不是 epel 源里的旧版,要用 OL8 AppStream 仓库的)/home/oracle/.bash_profile 里加:alias sqlplus='rlwrap sqlplus'
which sqlplus 路径硬写——RPM 安装后 sqlplus 在 /usr/bin/sqlplus,但 alias 机制更稳定source ~/.bash_profile 生效configure 脚本必须由 root 运行——这两步一旦顺序错或权限错,后续所有数据库启动、监听、连接问题几乎都源于此。