CentOS Oracle常见问题怎么解决
小樊
31
2025-12-07 13:57:19
CentOS 上 Oracle 常见问题与解决
一 安装与预检阶段
交换空间不足:安装检查报“可用交换空间为 0 MB,需要 ≥150 MB”。临时扩容示例:创建并启用 512MB 交换文件,写入 /etc/fstab 持久化。命令示例:fallocate -l 512M /mnt/512MiB.swap;chmod 600;mkswap;swapon;echo “/mnt/512MiB.swap none swap sw 0 0” >> /etc/fstab。
内核参数 semmni 检查失败:Expected 128 ,Actual 0 。在 /etc/sysctl.conf 设置 kernel.sem = 250 32000 100 128 ,执行 sysctl -p 生效。
图形界面乱码:安装器中文方框或乱码,临时设置环境变量:export LANG=en_US 。
安装器 OS 支持检查报错(INS-08101):如 RHEL/CentOS 8 系列触发,可设置 export CV_ASSUME_DISTID=RHEL7.6 再启动安装。
依赖包缺失:按 Oracle 要求安装常用包组(示例)binutils、compat-libstdc++、elfutils-libelf、gcc、glibc、ksh、libaio、libstdc++、make、sysstat、unixODBC 等;可用 rpm -q 检查,缺失则 yum/dnf 安装。
静默安装报 NoClassDefFoundError:多为 32 位兼容库 缺失(如 glibc-devel.i686 ),安装对应 32 位包后重试。
安装日志定位:查看 $ORACLE_BASE/oraInventory/logs 下安装日志,快速定位具体失败点。
二 监听与启停故障
监听无法启动或端口不通:开放 1521/TCP (以及 OEM/EM 常用端口如 5500/TCP ),命令示例:firewall-cmd --zone=public --add-port=1521/tcp --permanent && firewall-cmd --reload;用 tnsping 与 telnet 测试连通性。
dbstart/dbshut 报错或无效:编辑 $ORACLE_HOME/bin/dbstart 与 dbshut ,将 ORACLE_HOME_LISTNER=$1 改为 ORACLE_HOME_LISTNER=$ORACLE_HOME ;确保 /etc/oratab 中实例行结尾为 :Y (如 orcl:/u01/app/oracle/product/19.3/dbhome_1:Y)。
X11 图形显示错误:提示 “Unable to verify the graphical display setup”。设置 export DISPLAY=:0.0 ,必要时 xhost + 授权,或改用静默安装。
启动数据库找不到参数文件:报 ORA-01078/LRM-00109 ,通常是 ORACLE_SID 与 dbs 目录中 init 文件前缀不一致。核对 $ORACLE_SID ,必要时复制模板创建 init$ORACLE_SID.ora。
三 连接与会话问题
SQL*Plus 无法启动:检查 ORACLE_HOME 、PATH 是否正确,或使用绝对路径 /u01/app/oracle/product/…/bin/sqlplus;确认 Oracle 客户端/软件已安装。
连接数据库失败:核对用户名/口令、实例 SID/服务名 、监听是否运行;用 tnsping 与 telnet 远程探测 1521 端口连通性。
命令长时间无响应:检查 SQL 语法与执行计划,评估 CPU/内存/I/O 资源;可用 SET TIMING ON 辅助定位。
权限不足:执行 GRANT 授予必要权限,或以具备权限的用户连接。
输出格式异常:用 COLUMN 调整列宽(如 COLUMN col FORMAT A20),用 SPOOL 导出结果。
四 常见 ORA 错误与内核参数
ORA-27125 无法创建共享内存段(Linux 错误 28: No space left on device ):多为 shmall/shmmax 过小或未启用大页。可按内存计算并设置:kernel.shmmax ≈ 物理内存×0.85 (字节);kernel.shmall ≈(物理内存×0.85 )/ 4096 ;执行 sysctl -p 生效。
ORA-00205 控制文件识别错误:检查 CONTROL_FILES 参数指向的控制文件是否存在、权限是否正确,查看 alert.log 获取具体文件路径与 I/O 错误。
ORA-01031 权限不足:以具备 SYSDBA 权限的用户连接(如 sqlplus / as sysdba),或为相应用户授予所需系统权限。
内核参数建议:除 shmmax/shmall 外,常见推荐包含 fs.aio-max-nr、fs.file-max、kernel.sem、net.core.rmem_default/wmem_default、net.core.rmem_max/wmem_max、vm.swappiness 等;设置后执行 sysctl -p 使配置生效。
五 快速排查清单与常用命令
环境核对:echo $ORACLE_HOME 、$ORACLE_SID 、$PATH ;确认当前用户为 oracle 。
监听与端口:lsnrctl status;firewall-cmd --list-ports;tnsping 目标;telnet 主机 1521 。
启停顺序:lsnrctl start;dbstart(确认 /etc/oratab 为 :Y );关闭时 dbshut;lsnrctl stop。
日志定位:安装日志 $ORACLE_BASE/oraInventory/logs ;数据库告警日志与后台转储目录可通过 SHOW PARAMETER background_dump_dest 等参数查看。
常见修复:ORACLE_SID 不一致导致找不到 init 文件;dbstart/dbshut 的 ORACLE_HOME_LISTNER 变量;依赖包缺失(特别是 libaio );必要时以 root 执行 runInstaller 或修复脚本。