如何解决ORA-00845内存不足_shmfs共享内存挂载大小调整

张开发
2026/4/21 0:37:01 15 分钟阅读

分享文章

如何解决ORA-00845内存不足_shmfs共享内存挂载大小调整
ORA-00845报错根本原因是/dev/shm大小小于memory_target或memory_max_target需通过df -h /dev/shm确认再用mount临时调整或修改/etc/fstab永久生效并排查SELinux、容器限制及ksm干扰。ORA-00845 报错时 /dev/shm 空间确实不够这个错误不是 oracle 在“瞎报”而是它启动时检查 /dev/shm 大小发现低于 memory_target 或 memory_max_target 值就直接拒绝启动。linux 默认挂载的 /dev/shm 通常是 64mb而现代 oracle 实例动辄要 2gb 共享内存不调必报错。关键判断点不是看物理内存剩多少而是看 /dev/shm 这个 tmpfs 挂载点的大小。用 df -h /dev/shm 看如果显示 64M 或远小于你的 memory_target就是它了。改之前先确认 Oracle 参数查 show parameter memory_target 和 show parameter memory_max_target目标值必须 ≥ 两者中较大者单位是字节但 mount 命令里用 size2G 这种写法临时生效用 sudo mount -o remount,size2G /dev/shm但重启后失效永久生效要改 /etc/fstab加一行tmpfs /dev/shm tmpfs size2G 0 0fstab 修改后重启没生效检查挂载顺序和覆盖项/dev/shm 是内核自动挂载的如果 /etc/fstab 写得不对系统可能跳过或被其他挂载覆盖。常见坑是参数写成 defaults 而没显式写 size或者用了 noauto、bind 这类干扰项。执行 cat /proc/mounts | grep shm确认输出里 size2097152k即 2G这类参数真实存在如果看到 size65536k说明 fstab 没生效检查是否漏了 tmpfs 类型字段或行尾多了空格/注释符号某些发行版如 RHEL 7/CentOS 7会通过 systemd-tmpfiles 自动重置 /dev/shm此时需同时禁用sudo systemctl mask dev-shm.mount改完 fstab 后别只 reboot先 sudo umount /dev/shm sudo mount /dev/shm 测试是否能立刻挂上新大小Oracle 启动仍报 ORA-00845检查是不是 SELinux 或容器环境即使 /dev/shm 大小正确SELinux 的策略或容器Docker/Podman默认限制也会导致 Oracle 无法使用全部空间。这不是 Oracle 的 bug是底层隔离机制在“拦路”。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台

更多文章