news 2026/9/16 4:45:53

Oracle 19c Linux安装报错INS-06006/44000/32070排查指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 19c Linux安装报错INS-06006/44000/32070排查指南

INS-06006、INS-44000、INS-32070这三个编号,搁在Oracle 19c的Linux安装场景里,基本就是一套组合拳。我第一次把它们凑齐时,盯着安装界面愣了半天,第一反应是安装包解压坏了,白下载了几G的东西。后来排查完才发现,问题根本不在安装包,而是系统环境没收拾干净。这篇文章就把我踩过的坑和完整排查思路写出来,如果你正被这三个报错卡住,按顺序走一遍,大概率能直接装过去。

1. 这三个报错到底在说什么

1.1 先从现象看本质

很多人在Oracle 19c安装向导里看到几个INS错误码直接就懵了,因为它不告诉你具体哪一步出了问题,只给一个编号。我自己在实验环境里折腾过多次,总结下来这三个编号大概对应下面这些情况。

INS-06006按照Oracle的逻辑,是安装程序在做节点连通性检查时,没能建立到本机的免密SSH连接。我说"免密"你可能觉得奇怪,单机装数据库也要SSH?是的,Oracle Universal Installer在检查阶段会尝试用当前用户SSH连接到本机短主机名,用来确认节点的hostname解析和网络回环是通的。如果你的/etc/hosts没配好,或者oracle用户根本没有SSH密钥,这个检查就会失败,报出INS-06006。

INS-44000我遇到最多的情况,是监听器无法配置或启动。OUI在安装过程中会顺手帮你把1521端口的监听服务建起来,如果这个端口已经被别的进程占了,或者Oracle Net相关配置文件写不进去,就会触发这个错误。说句实话,这个错误码的覆盖面比较广,但核心还是"监听器创建/启动环节出了问题"。

INS-32070我和同事讨论过多次,最常见的原因是磁盘空间不足或目录权限不对。安装程序要把安装信息写进oraInventory、要把日志写到$ORACLE_BASE,如果这些地方空间不够、属主不是oracle用户,就会直接报错。我之前遇到过/tmp磁盘被日志塞满导致写入失败的情况,日志文件里明显能看到IOException。

1.2 它们为什么总是一起出现

你可能会好奇,这三个报错为什么会同时出现,是不是单纯运气差装一块了。其实不是,它们是典型的"连锁反应"。

OUI的检查是顺序执行的,前面一步挂了,后面步骤跟着遭殃。我先打个比方:你还没拿到房门钥匙,就没法进屋开灯,屋里黑漆漆的当然也找不到插座,最后可能连电视都打不开。这个比喻放到Oracle安装里就是——主机名解析失败(INS-06006)说明节点通信的前提不成立,监听器配置(INS-44000)自然会受影响;而目录权限和磁盘空间(INS-32070)如果本身也有问题,那整个安装过程就更没有成功的可能。

所以遇到这三个报错组合时,不要想着一个一个去解,先找共同根因。大多数情况下,把主机名解析、SSH免密、端口占用、目录权限这四个前置项全部过一遍,三个错误会一起消失。这也是我为什么一直强调"装Oracle先别急着点Next,先检查环境"的原因。

1.3 先看日志再动手,别瞎点

如果错误码已经出现了,第一件事不是重新点runInstaller,更不是直接删掉目录重来,而是先看日志。Oracle的安装日志虽然很长,但关键信息都在里面。

日志位置通常在/tmp/OraInstall<时间戳>/目录下,文件名一般是installActions<时间戳>.log。时间戳就是安装开始的时间,你按时间排一下就能找到。有一些发行版或自定义TMP目录的设置会让日志跑到别的地方,可以在/tmp下用 find 命令找一下:

find /tmp -maxdepth 1 -type d -name "OraInstall*" -mmin -30

找到日志目录后,直接搜索错误关键字,我一般这么做:

grep -niE "error|fail|exception|permission denied|no space" /tmp/OraInstall*/installActions*.log | tail -80

这样能快速定位到真正的失败点。很多人不看日志,反复重试安装,最后发现还是同样的问题,浪费时间还折腾心态。我的习惯是把日志先拷贝到另一个地方留存,防止重装时安装程序把日志清理掉,导致现场丢失。

2. 排查前置环境:八成问题出在系统层

2.1 /etc/hosts和主机名解析是第一大坑

每次遇到INS-06006,我第一件事就是看主机名和/etc/hosts。很多服务器的主机名没有写进hosts文件,或者只有127.0.0.1的映射,这就会导致OUI在做节点连接检查时,解析不到本机的真实IP。

先执行以下命令看清楚当前状态:

hostname cat /etc/hostname cat /etc/hosts

如果你机器的实际IP是192.168.1.10,主机名是oradb,那/etc/hosts至少要包含这么几行:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.10 oradb.example.com oradb

有几处必须注意。第一,主机名不要用localhost这种默认值;第二,hostname命令输出的结果必须和/etc/hosts里配置的短主机名一致;第三,真实IP那行不能省略到回环地址上,否则OUI会认为主机名解析到了127.0.0.1,检查照样失败。

改完hosts之后,建议顺手配一下SSH免密。虽然单机装库理论上不强制,但既然INS-06006明确指向SSH连通性,我干脆一次配好,省得在奇怪的地方又卡住:

su - oracle ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ssh localhost ssh `hostname`

执行ssh命令时如果不再提示输入密码,就说明免密通了。顺便确认一下防火墙没有拦截SSH相关端口,如果用的是云服务器或虚拟化环境,更要检查安全组策略。

2.2 依赖包和内核参数不过关,后面全是隐形炸弹

Oracle 19c在Linux上的预检查对系统包要求比较苛刻。缺少依赖包虽然不一定直接报那三个错误码,但会让安装过程变得极不稳定,监听器无法启动、实例无法启动之类的问题大多从这里来。

在CentOS 7或RHEL 7上,我一般先执行一次批量安装:

yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libXext libXtst libX11 libXau libXi libstdc++ libstdc++-devel libnsl make sysstat unixODBC unixODBC-devel

RHEL 8或Oracle Linux 8的场景会稍微不同,比如compat-libstdc++-33可能需要从EPEL源获取,而libnsl这个包在8系列里默认往往没有,必须手动安装。如果不装libnsl,安装过程里可能出现"cannot open shared object file"之类的库加载错误。我不想在这篇文章里把所有包的版本号都列出来,因为不同小版本差异很大,建议直接参考官方文档里对应操作系统版本的包清单,用一条循环命令逐个检查:

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libnsl libXext libXtst libX11 libXau libXi libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel

除了依赖包,内核参数也要提前写好。Oracle对共享内存、信号量、文件句柄都有建议值,配置不对的话,即使安装过程侥幸通过,后续启动实例也容易报ORA-27102之类的错误。我用的是这套配置,写入 /etc/sysctl.conf:

fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 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 net.ipv4.ip_local_port_range = 9000 65500

修改后执行sysctl -p让参数生效。同时还要给oracle用户设置资源限制,创建 /etc/security/limits.d/oracle-database-preinstall.conf:

oracle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768

我见过不少人在这一步偷懒,结果装到一半莫名其妙报错,回头再补这些配置就得全部重来。提前做好只需要几分钟,却能让后面的安装顺利得多。

2.3 磁盘空间、目录权限和临时目录,查一遍花不了两分钟

INS-32070这类错误,说到底是安装程序写不了东西。Oracle 19c数据库软件解压加安装大约需要7到8GB空间,加上安装过程中生成的日志和临时文件,建议给/u01至少预留15GB。/tmp分区也不能太小,如果/tmp挂载在tmpfs上并且内存本来就紧张,安装过程很容易写满。

检查命令很简单:

df -h /tmp /u01

看到使用率过高就赶紧清理。还有一个容易被忽略的问题:oracle用户对安装目录没有写权限。如果解压安装包时用了root用户,解压出来的文件属主就会变成root,后面oracle用户执行runInstaller时各种失败。所以正确的做法是用oracle用户解压,或者解压后统一修正属主。

目录结构我建议这样创建:

mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01 chmod -R 775 /u01

注意,oraInventory这个目录在安装时会自动创建,但提前创建并给好属主,能省掉后面很多麻烦。如果之前安装过Oracle但没装成功,这台机器上可能已经有残留的oraInventory,建议先备份再删除,具体清理步骤我放到下一节讲。

3. 清理旧环境和安装残留

3.1 不干净的残留是最大坑

很多人卡在这三个报错上走不出来,不是因为不会安装,而是因为之前已经失败过一次,环境里全是安装残留。Oracle安装不像普通的软件,装到一半失败后,会留下大量配置文件和目录,第二次运行时OUI检测到这些残留,反而更容易报各种奇怪的错。

残留主要分布在这些地方:/etc/oratab/etc/oraInst.loc/u01/app/oraInventory/var/tmp/.oracle/tmp/.oracle,以及$ORACLE_BASE下新生成的目录。如果还手动建过监听,/etc下可能还有监听相关配置文件。

3.2 卸载和清理步骤

如果之前已经建过数据库实例,先用DBCA删掉数据库,再用netca删除监听服务。如果库都没建成功,这一步可以跳过。接下来按顺序手动清理:

# 切换到ROOT用户执行 lsnrctl stop rm -f /etc/oratab rm -f /etc/oraInst.loc rm -rf /u01/app/oracle rm -rf /u01/app/oraInventory rm -f /etc/init.d/oracle rm -rf /var/tmp/.oracle rm -rf /tmp/.oracle

如果ORACLE_HOME不在/u01/app/oracle下,改成你的实际路径。删除前再确认一次这台机器上没有正在运行的业务库,千万别在别人的生产环境上执行这套命令。

3.3 清理后的验证

清理完别急着安装,先验证环境是不是真的干净了。我最常做的是检查端口和进程。

ss -lnp | grep 1521 ps -ef | grep -i oracle

如果1521端口还在监听,说明有一个残留的tnslsnr进程没有杀掉,用 ps 找到PID后kill -9处理。看到任何oracle相关进程也要一并清掉。之后重启一次系统,把共享内存和信号量全部清空,这样能避免很多玄学问题。

重启后确认oracle用户和组还在:

id oracle getent group oinstall getent group dba

如果之前误删了用户,重新创建用户和组。到这一步,环境才算真正还原到"全新的可安装状态"。

4. 重新执行安装:分步实操记录

4.1 创建用户、目录并设置环境变量

环境清理干净后,开始正式安装。先确认用户和目录,参考前面提到的命令把oracle用户和目录建好。然后在oracle用户的.bash_profile里写入环境变量:

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib export TMP=/tmp export TMPDIR=$TMP umask 022

环境变量设置完先执行source ~/.bash_profile让其生效,再执行echo $ORACLE_HOME确认路径没有写错。这里有个容易忽略的细节:ORACLE_HOME指的是数据库软件最终安装的目标目录,不是安装包解压目录。如果你直接把19c的zip包解压到了这个目录里,那这个目录既是解压位置也是安装目标,runInstaller会直接在当前位置执行。

4.2 执行runInstaller的关键选择

我习惯把安装包解压到ORACLE_HOME路径下再运行安装程序:

su - oracle cd /u01/app/oracle/product/19.3.0/dbhome_1 unzip -o /opt/soft/LINUX.X64_193000_db_home.zip ./runInstaller

如果你用的是图形界面,确保DISPLAY变量设置正确;如果用的是远程SSH工具,记得开启X11转发。

安装向导里有一个关键选项是"安装选项",这里我强烈建议选"仅安装数据库软件",而不是"创建并配置数据库"。为什么?因为把安装软件和建库拆成两步,一旦后面一步失败,排查范围会小很多。建库通过DBCA来做,它比OUI内置的建库操作更加透明,日志也更清晰。

接下来在"Oracle主目录用户"这一步选择"使用现有用户"并填oracle,然后一路Next。安装到快结束时,OUI会提示用root用户执行两个脚本,这是很容易被忽略的地方:

su - root /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.sh

这两个脚本不执行,后续DBCA建库时会有很大概率失败。我见过有人漏掉root.sh,结果监听起不来,数据库也注册不了服务,排查半天才想起来。所以看到"Execute Configuration Scripts"界面时,一定不要跳过。

4.3 监听器配置与DBCA建库的实操要点

软件安装完成后,先用netca配置监听器。$ORACLE_HOME/bin下的netca命令,图形界面直接运行:

cd $ORACLE_HOME/bin ./netca

选择"监听程序配置",端口保持默认1521。如果1521被占用,在这里改成其他端口,但后续所有连接串都要跟着变,建议还是把占用进程处理掉,坚持用1521。

监听器配置完成后,启动并验证:

lsnrctl start lsnrctl status

看到 "Service registered" 字样的内容,说明监听正常。然后新建数据库实例,我用DBCA静默方式比较多,命令行如下:

dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -sysPassword Oracle2024# \ -systemPassword Oracle2024# \ -datafileDestination /u01/app/oracle/oradata \ -storageType FS \ -characterSet AL32UTF8 \ -memoryPercentage 40 \ -emConfiguration NONE \ -recoveryAreaDestination /u01/app/oracle/fast_recovery_area \ -sampleSchema false

注意密码必须符合Oracle复杂度要求,至少8位、包含大小写和数字,最好再有特殊字符。静默建库执行过程中不要随便中断,日志输出在 $ORACLE_BASE/cfgtoollogs/dbca/orcl/ 下,如果某一步失败,直接看日志定位。

建库完成后,用下面的方式验证:

sqlplus / as sysdba

能够进入SQL命令行,说明实例已经起来了。再执行select name from v$database;能看到orcl库,整个安装流程就算跑通了。

5. 常见问题与排查技巧实录

5.1 问题速查表

整理了一份速查表,覆盖我遇到过的常见场景,可以直接对照排查:

报错或现象大概率原因处理方式
INS-06006/etc/hosts主机名解析错误、SSH免密未配置修正hosts,补齐ssh密钥
INS-440001521端口被占用、监听器配置失败ss -lnp定位进程,释放端口
INS-32070磁盘空间不足、目录属主不对df -h检查空间,修复属主权限
日志出现Permission deniedoracle用户对/u01无写权限chown -R oracle:oinstall /u01
日志出现cannot open shared object file缺少libnsl、libaio等依赖包按包清单安装依赖
日志出现ORA-27102内核参数shared memory配置不足修改kernel.shmmax、shmall
数据库能装好但监听起不来listener.ora配置错误或端口被占用netca重建监听

5.2 经验分享:几个容易被忽略的细节

安装Oracle 19c,很多坑其实是细节堆出来的。第一个小技巧是安装前把SELinux临时改成permissive模式,否则一些文件访问操作会被拦截,报错还很隐蔽。防火墙也要放行1521端口,或者直接在实验环境下临时关闭防火墙,等装完再恢复。

第二个细节是解压安装包时务必用oracle用户去做,不要用root解压完再切回oracle用户,否则文件属主全是root,后面各种脚本执行报错的概率非常大。如果已经解压成root属主了,安装前记得统一改回来。

第三个容易被忽视的问题是安装前检查共享内存残留。ipcs -m查看内存段,如果发现oracle相关且无用的段,用ipcrm -m 段ID删掉。这种残留会干扰新实例的共享内存申请,DBCA建库时报ORA-27102的概率会明显增加。

还有一点,ORACLE_HOME路径不能有空格和中文,目录层级也不要太深。之前见过有人把安装目录放到/home/下很深的一个带中文的目录里,结果OUI界面各种奇怪行为,后来改到/u01下一次就过了。

5.3 安装日志怎么看

日志是排查Oracle安装问题的最后一根救命稻草。装Oracle 19c时,主要看三类日志。

第一类是OUI安装日志,位置在/tmp/OraInstall*目录下。文件名类似installActions2025-01-01_10-00-00AM.log。排查时直接搜索SEVERE关键字,Oracle日志里用SEVERE表示致命错误,比ERROR更严重。实用命令:

grep -n "SEVERE" /tmp/OraInstall*/installActions*.log | tail -30

第二类是netca日志,位置在$ORACLE_BASE/cfgtoollogs/netca/目录下。监听器配置失败时,这个日志会告诉你具体是端口问题还是配置文件问题。第三类是DBCA日志,在$ORACLE_BASE/cfgtoollogs/dbca/orcl/目录下,建库失败时优先看它。

看日志时要习惯看"上下文",不要只盯着某一行错误看。Oracle的日志里经常是先出现一个WARNING,然后才是真正的SEVERE,两者往往相隔很多行。把报错前50行和后20行一起看,才能还原完整的过程。

根据我个人经验,INS-06006、INS-44000、INS-32070这三个错误码同时出现,九成是因为安装前环境没准备干净。我之前也犯过懒,觉得官方文档太长直接忽略前置检查,结果一次安装折腾了一下午。后来老老实实按"检查hosts和SSH、安装依赖包、设置内核参数、清理残留"这套流程走下来,再没出过组合报错。最后提醒一句,如果你在日志里看到的错误上下文和我描述的不完全一样,以日志为准,先把日志里最关键的那一行SEVERE找到,再对照速查表处理,比反复重试高效得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 4:44:48

MSTP多生成树协议原理与思科模拟器配置实战指南

交换机接多了之后&#xff0c;总会在某个深夜被环路问题折磨过。广播风暴、MAC地址漂移、CPU飙升、整个二层网络瘫痪…… 这类问题的幕后推手就是缺少一个靠谱的环路防护机制。STP&#xff08;生成树协议&#xff09;就是干这个的&#xff0c;但标准STP收敛太慢、链路利用率太低…

作者头像 李华
网站建设 2026/9/16 4:44:40

Git安装全攻略:国内镜像下载与环境配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 4:44:33

安全巡检AI落地:从目标检测到隐患闭环的完整实践框架

干过几个安全巡检AI项目后&#xff0c;我发现一个挺扎心的现象&#xff1a;很多团队把精力全砸在模型识别上&#xff0c;准确率刷到95%以上&#xff0c;项目一上线却发现隐患还是没管住。真正的问题不在识别&#xff0c;而在识别之后的闭环——从隐患被发现&#xff0c;到有人认…

作者头像 李华
网站建设 2026/9/16 4:43:10

Windows下Docker部署Coze接入DeepSeek完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 4:42:23

手把手教你安装配置Python与TensorFlow环境,避坑指南

第2篇笔记&#xff1a;手把手把Python和TensorFlow环境装明白&#xff0c;照着抄就行别的不说&#xff0c;AI开发这件事&#xff0c;第一道坎往往不是算法&#xff0c;而是环境。我见过太多人兴致勃勃打开教程准备跑模型&#xff0c;结果卡在import tensorflow报错、版本冲突、…

作者头像 李华
网站建设 2026/9/16 4:42:20

车辆二自由度模型传递函数推导与Python实现:横摆角速度与侧偏角分析

简介&#xff1a;资源包聚焦于车辆二自由度动态模型的搭建与分析&#xff0c;面向汽车工程及自动驾驶方向的开发者、研究人员。模型从状态空间方程出发&#xff0c;转换为传递函数形式&#xff0c;重点考察横摆角速度与车辆侧偏角对操控稳定性的影响。包体共2个文件&#xff0c…

作者头像 李华