ins-35172错误与网络心跳/延迟完全无关,它仅由linux系统中/dev/shm tmpfs挂载空间不足引发;该错误明确指向oracle安装时sga内存需求超过/dev/shm当前size值(如df -h /dev/shm所示),需通过remount或修改/etc/fstab永久扩容至足够大小(如size=2g)并确保oracle用户可写。
ins-35172 错误和网络心跳/延迟无关,它只反映本地 /dev/shm 空间不足。这个错误常被误判为集群或网络问题,但实际是单机共享内存配置缺陷。
为什么 INS-35172 和网络心跳完全不相关
该错误信息明确指出:[INS-35172] Target database memory (XXMB) exceeds the system's available shared memory ({0}MB)。这里的“available shared memory”特指 Linux 上 /dev/shm tmpfs 文件系统的挂载大小,不是 kernel.shmmax,也不是节点间通信带宽或延迟。
Oracle 19c 安装器在预检阶段会尝试分配 SGA 内存(哪怕只是模拟),而 Oracle 默认使用 /dev/shm 作为 POSIX 共享内存后端。若该目录挂载 size 小于 memory_target 或安装预设值(如 945MB),立刻触发此错 —— 与是否配置 RAC、是否有多网卡、ping 延迟多少毫秒都无任何关系。
- 检查命令
df -h /dev/shm返回的数值,一定等于错误中括号里的{0}MB - 运行
mount | grep shm可确认当前挂载参数,常见默认值是size=64M或size=128M - RAC 场景下各节点独立校验自身
/dev/shm,不会跨节点读取或比对
如何快速验证并修复 /dev/shm 大小
不要改内核参数、不要调网络、不要查 ping 或 traceroute —— 直接操作 /dev/shm:
- 临时扩容(立即生效,重启失效):
sudo mount -o remount,size=2G /dev/shm - 若提示
device is busy,先执行sudo fuser -km /dev/shm强制释放占用进程(通常是旧 Oracle 实例或未退出的安装进程) - 永久生效:编辑
/etc/fstab,找到含/dev/shm的行,改为类似:tmpfs /dev/shm tmpfs defaults,size=2G 0 0 - 修改后运行
sudo mount -a重载 fstab,再用df -h /dev/shm确认结果
容易被忽略的关键细节
很多人修复后仍报错,往往栽在这几个点上:
- 没确认 Oracle 用户能否写入
/dev/shm:执行sudo -u oracle touch /dev/shm/test,失败则需检查挂载选项是否含noexec或权限限制 - 在容器或云主机(如 AWS EC2)中,
/dev/shm可能被 Docker 或 systemd 默认限制为 64MB,需在启动时显式传参--shm-size=2g或修改宿主机配置 - 某些 CentOS/RHEL 7+ 系统启用了
systemd-private-xxx挂载,导致mount -a不生效,应优先用systemctl restart systemd-tmpfiles-setup.service - Windows 环境根本不存在
/dev/shm,所以 Windows 上绝不会出现 INS-35172 —— 若你在 Win7/Win10 看到它,说明你正在用 WSL 或 Cygwin 等类 Linux 层,此时要修的是那个子系统里的/dev/shm











