Oracle 12c启动报错ORA-00845 调整/dev/shm共享内存大小解决
ORA-00845因共享内存小于MEMORY_TARGET的1 2倍引发。永久解决:修改 etc fstab,设置size不小于1 5倍较大内存。注意容器需指定--shm-size,SELinux开启virt_use_shm,禁用ksm,确保挂载早于Oracle启动。
遇到ORA-00845错误时,查阅官方文档会发现解释其实很简单:/dev/shm这个tmpfs挂载点的可用空间,小于MEMORY_TARGET或MEMORY_MAX_TARGET两者中的较大值。但这并不意味着Oracle配置有误,而是AMM(自动内存管理)在启动时检测到内存分配条件不满足,直接选择拒绝加载实例。
从实际数据来看,当你设置了几十GB的MEMORY_TARGET,而/dev/shm只有64MB或512MB时,系统会直接报错。这个坑我在多台机器上都踩过,几乎无一幸免。

确认 /dev/shm 当前大小和 Oracle 内存参数
先别急着动手修改。通过以下两条命令快速确认一下,是否正好掉进了这个常见陷阱:
- 执行
df -h /dev/shm——如果显示结果为64M、512M,或者明显小于你的MEMORY_TARGET,那么问题就在这里。 - 以
sysdba身份登录后,运行show parameter memory_target和show parameter memory_max_target,记录下这两个参数值(单位为字节,对比时直接看GB更为直观)。 - 一个关键要点:Oracle实际需要的
/dev/shm空间,大约等于1.2倍max(MEMORY_TARGET, MEMORY_MAX_TARGET)。“刚好相等”往往是不够用的。
永久修改 /etc/fstab 才是唯一可靠的方式
不少文章会教你临时挂载:mount -o remount,size=4G /dev/shm。但这个方法重启后就失效了。原因在于Oracle启动的时机通常早于systemd的mount单元,很容易在重新挂载之前就读取到旧尺寸。
唯一可靠的解决方案,还是修改/etc/fstab:
- 编辑
/etc/fstab,添加或修正这一行配置:tmpfs /dev/shm tmpfs size=4G,mode=1777 0 0(将4G替换为你的目标值,建议设置为≥1.5倍较大内存参数)。 - 注意:这里不能写成
defaults。tmpfs的defaults不包含size=参数,结果仍然会是默认的64MB或2GB(具体取决于发行版)。 - 修改完成后立即验证:
sudo umount /dev/shm && sudo mount /dev/shm,然后执行df -h /dev/shm和mount | grep shm确认size已经生效。 - 在某些RHEL/CentOS/Oracle Linux 7+的环境中,
systemd-tmpfiles可能会覆盖fstab中的设置。需要同步执行:sudo systemctl mask dev-shm.mount。
容器、SELinux和ksm是隐形的拦路虎
即使df -h /dev/shm显示的大小已经正确,Oracle仍然报ORA-00845错误,这时就需要考虑底层机制在“看不见的地方”卡住了:
- Docker/Podman容器内的Oracle:在宿主机上修改
/dev/shm完全不起作用。必须在启动容器时显式添加--shm-size=4G参数。 - SELinux启用状态下,Oracle可能被禁止访问扩展后的shm。检查方法:
getsebool virt_use_shm。如果显示为off,执行setsebool -P virt_use_shm on启用。 - Oracle Linux上如果启用了ksm(内核同页合并),可能会干扰大页共享内存的分配。临时禁用方法:
echo 0 | sudo tee /sys/kernel/mm/ksm/run。 - 权限也需要核实:
ls -ld /dev/shm应显示drwxrwxrwt,且oracle用户属组需要具备写入权限。如果手动执行过chown,记得要复位。
最容易被忽略的是挂载时机。/dev/shm必须在Oracle实例启动之前完成挂载。cloud-init、minimal systemd配置或者某些容器初始化流程可能导致它延迟挂载,结果Oracle读取到的是空的或者极小的shm。可以查看systemd-analyze blame | grep shm,如果挂载耗时排在oracle.service之后,就需要调整依赖关系,或者通过Before=oracle.service显式声明启动顺序。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
自增主键值从何而来?深入理解原理,告别只会auto_increment
KingbaseES推荐使用serial、bigserial、显式sequence或identity列实现自增主键。serial创建integer并关联序列,bigserial对应bigint;显式sequence可自定义起始值等参数;identity有generatedbydefault(允许指定值)与always(禁止)两种模式。
Linux下瀚高数据库授权文件过期及替换解决方案
在银河麒麟系统下,瀚高数据库hgdb-4 5试用授权20天到期后需替换正式授权文件。正确操作:停止服务,备份旧文件,将授权文件复制到 opt highgo hgdb-4 5 etc lic 并命名为hgdb lic,设置权限600和属主highgo:highgo,再启动服务。禁止直接修改data目录下的license info文件。
Oracle BLOB实时同步的5大技术挑战与难点解析
OracleBLOB实时同步面临分片组装、多列隔离、长事务跨窗口、事务回滚及大对象资源控制等技术挑战,必须在日志中精确还原完整字段值,才能保证源端与目标端数据完全一致,这对同步系统的稳健性提出了高要求。
MySQL禁用redo日志导致全备失败
MySQL全量备份失败是由于数据定义语言操作触发排序索引构建,禁用重做日志导致XtraBackup无法获取一致性备份。测试验证表明,优化表语句即使无数据也会触发该问题。根本原因在于排序索引构建过程跳过了重做日志记录,破坏了备份的一致性。
Kafka架构图优化与改进的全面详细步骤与实践指南
Kafka作为实时数据流处理的核心中间件,其底层架构虽已相当成熟,但在实际生产环境中,要充分发挥其性能潜力,仍需落实到具体的调优与架构改造上。核心目标可归纳为三点:如何承载更高的吞吐量、如何保障数据不丢失、以及故障发生时如何快速恢复。本文将从这几个关键方向出发,深入探讨如何真正榨干Kafka集群的性
- 热门数据榜
相关攻略
2026-07-25 22:22
2026-07-25 22:22
2026-07-25 22:22
2026-07-25 20:35
2026-07-25 20:35
2026-07-25 20:35
2026-07-25 20:35
2026-07-25 19:38
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

