如何解决ORA-00845内存不足_shmfs共享内存挂载大小调整
2026/4/21 0:37:00 网站建设 项目流程

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 命令里用 size=2G 这种写法)临时生效用 sudo mount -o remount,size=2G /dev/shm,但重启后失效永久生效要改 /etc/fstab,加一行:tmpfs /dev/shm tmpfs size=2G 0 0fstab 修改后重启没生效?检查挂载顺序和覆盖项/dev/shm 是内核自动挂载的,如果 /etc/fstab 写得不对,系统可能跳过或被其他挂载覆盖。常见坑是:参数写成 defaults 而没显式写 size,或者用了 noauto、bind 这类干扰项。执行 cat /proc/mounts | grep shm,确认输出里 size=2097152k(即 2G)这类参数真实存在如果看到 size=65536k,说明 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智研社是一个专注于人工智能领域的综合性平台

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询