ORA-609:疑似MEMORY_TARGET设置过大导致的宕机

本文记录了一次数据库频繁出现ORA-609错误导致宕机的现象及解决方案。通过对内存设置的调整,成功避免了系统资源耗尽引发的故障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORA-609:疑似MEMORY_TARGET设置过大导致的宕机

现象:
客户的数据库最近发生好几次忽然宕机事件,查看alert日志:
Thu Oct 10 10:47:50 2013
ORA-609 : opiodr aborting process unknown ospid (834_47932399713424)
Thu Oct 10 10:47:50 2013
ORA-609 : opiodr aborting process unknown ospid (740_47613956914320)
Thu Oct 10 10:47:53 2013
ORA-609 : opiodr aborting process unknown ospid (755_47556191542416)
Thu Oct 10 10:47:53 2013
ORA-609 : opiodr aborting process unknown ospid (761_47545590688912)
Thu Oct 10 10:47:54 2013
ORA-609 : opiodr aborting process unknown ospid (859_47653507185808)
Thu Oct 10 10:47:58 2013
ORA-609 : opiodr aborting process unknown ospid (904_47121713061008)
Thu Oct 10 10:48:08 2013
ORA-609 : opiodr aborting process unknown ospid (918_47924605709456)
Thu Oct 10 10:48:16 2013
ORA-609 : opiodr aborting process unknown ospid (965_46996288695440)
Thu Oct 10 10:48:16 2013
ORA-609 : opiodr aborting process unknown ospid (984_47202090368144)
Thu Oct 10 10:49:06 2013
ORA-609 : opiodr aborting process unknown ospid (1103_47027913133200)
Thu Oct 10 10:49:08 2013
Thu Oct 10 10:49:08 2013
ORA-609 : opiodr aborting process unknown ospid (1064_47991325715600)
ORA-609 : opiodr aborting process unknown ospid (1150_47885260754064)
Thu Oct 10 10:50:02 2013
Process W000 died, see its trace file
Thu Oct 10 10:50:17 2013
Process W001 died, see its trace file
Thu Oct 10 10:54:19 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:54:31 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:54:43 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:54:55 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:55:07 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:55:19 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 10:55:31 2013
Process W000 died, see its trace file
Process W000 died, see its trace file
Process W000 died, see its trace file
Thu Oct 10 11:02:06 2013
Thread 2 advanced to log sequence 18269
 Current log# 15 seq# 18269 mem# 0: +UNIDG/uni/onlinelog/group_15.295.796513629
Thu Oct 10 11:02:08 2013
SUCCESS: diskgroup UNIDG was mounted
Thu Oct 10 11:02:18 2013
SUCCESS: diskgroup UNIDG was dismounted
Thu Oct 10 11:03:40 2013
Process m001 died, see its trace file
Thu Oct 10 11:04:23 2013
Process m001 died, see its trace file

分析:
查看启动时的参数设置,发现客户的系统启用了自动内存管理:
memory_target = 21G <-------------Automatic Memory Management feature is used.
free -g查看内存为23G
怀疑主机资源耗尽导致系统宕机,建议客户memory_target设置为16-18G。
调小memort_target之后,之前的自动宕机现象消失。

附:分析了如下日志。
$CRS_HOME/log/<nodename>/*.log
$CRS_HOME/log/<nodename>/crsd/*.log
$CRS_HOME/log/<nodename>/cssd/*.log
/etc/oracle/oprocd/*.log.* or /var/opt/oracle/oprocd/*.log.*
<think>好的,我现在需要帮助用户解决在CentOS 7虚拟机上安装Oracle 11g时遇到的ORA-00845错误。用户提到这个错误是“MEMORY_TARGET not supported”,我需要详细分析可能的原因和解决方法。 首先,ORA-00845错误通常与Oracle的自动内存管理(AMM)相关,尤其是MEMORY_TARGET参数的设置。根据Oracle文档,这个错误发生的原因可能是系统没有足够的共享内存或tmpfs分区的小不足。我需要回忆一下MEMORY_TARGET的工作原理,它依赖于/dev/shm(即tmpfs)的小。如果用户设置MEMORY_TARGET超过了/dev/shm的可用空间,就会导致这个错误。 接下来,我需要考虑用户的环境:CentOS 7虚拟机。虚拟机的内存分配和物理机不同,可能存在资源限制。用户可能在安装时没有正确配置共享内存或交换空间。例如,MEMORY_TARGET的值如果超过了tmpfs的小,或者tmpfs本身没有正确挂载,就会触发这个错误。 然后,我需要回顾之前的对话。用户之前询问过在CentOS 7上安装Oracle 11g的基本参数设置,我提到了内存分配和交换空间的配置,可能用户按照建议设置MEMORY_TARGET为可用内存的70%,但可能没有正确配置/dev/shm的小。因此,现在的问题可能是如何调整tmpfs的小或修改MEMORY_TARGET参数。 可能的解决步骤包括: 1. 检查当前/dev/shm的小,确认是否足够。 2. 调整tmpfs的小,使其至少等于MEMORY_TARGET的值。 3. 修改Oracle的内存参数,例如改用手动内存管理(SGA和PGA分开设置)。 4. 确保/etc/fstab中的tmpfs配置正确,避免重启后失效。 5. 检查交换空间是否足够,因为Oracle可能依赖交换空间来支持内存分配。 此外,可能需要用户提供具体的错误信息和当前系统配置,比如MEMORY_TARGET设置值,以及df -h /dev/shm的输出,以进一步诊断问题。不过,用户没有提供这些细节,所以需要给出通用的解决方案。 还需要注意Oracle 11g在虚拟化环境中的兼容性问题,比如某些内核参数是否需要调整,或者是否使用了正确的Oracle版本(32位 vs 64位)。例如,用户提到的引用是32位的安装指南,但CentOS 7通常是64位系统,可能导致兼容性问题,但用户的问题可能与此无关,因为错误更直接相关于内存设置。 最后,总结解决步骤,分点说明,并建议用户如何验证每个步骤是否成功,比如通过重启实例或重新挂载tmpfs。同时,提醒用户如果问题持续,可能需要进一步检查其他配置,如内核参数或Oracle的安装日志。</think>### **ORA-00845 错误分析与解决方案** **错误原因**: 当 Oracle 11g 的 `MEMORY_TARGET` 参数值超过系统 `/dev/shm`(共享内存/tmpfs 文件系统)的可用空间时,会触发此错误[^1]。`MEMORY_TARGET` 是 Oracle 自动内存管理(AMM)的核心参数,依赖 `/dev/shm` 存储内存管理信息。 --- ### **具体解决步骤** #### **1. 检查当前 `/dev/shm` 小** ```bash df -h /dev/shm ``` - 默认小通常为物理内存的 **50%** - 若输出显示不足(例如 `1G`),需扩展其容量 --- #### **2. 临时调整 `/dev/shm` 小** ```bash mount -t tmpfs shmfs -o size=<新小> /dev/shm ``` - **示例**: ```bash mount -t tmpfs shmfs -o size=2G /dev/shm # 调整为 2 GB ``` - **验证**: ```bash df -h /dev/shm ``` --- #### **3. 永久修改 `/dev/shm` 配置** 编辑 `/etc/fstab` 文件,添加以下行: ```bash tmpfs /dev/shm tmpfs defaults,size=<新小> 0 0 ``` - **示例**: ```bash tmpfs /dev/shm tmpfs defaults,size=2G 0 0 ``` **生效命令**: ```bash mount -o remount /dev/shm ``` --- #### **4. 调整 Oracle 内存参数** 若仍报错,可尝试以下两种方案: **方案一:禁用 AMM,改用手动内存管理** ```sql ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE; ALTER SYSTEM SET SGA_TARGET=<SGA小> SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=<PGA小> SCOPE=SPFILE; ``` - **示例**(分配 1.5 GB 内存): ```sql ALTER SYSTEM SET SGA_TARGET=1200M SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=300M SCOPE=SPFILE; ``` **方案二:降低 `MEMORY_TARGET` 值** 修改 `SPFILE` 或 `init.ora` 文件: ```sql ALTER SYSTEM SET MEMORY_TARGET=<新值> SCOPE=SPFILE; ``` - **新值需小于 `/dev/shm` 可用空间** --- #### **5. 重启 Oracle 实例** ```bash sqlplus / as sysdba SQL> shutdown immediate; SQL> startup; ``` --- ### **附加验证** 1. **检查交换空间是否充足**: ```bash free -m # 确保交换空间 ≥ 物理内存 ``` 2. **确认 `/dev/shm` 挂载参数**: ```bash mount | grep shm ``` --- ### **关键原因总结** | 问题根源 | 解决方法 | |----------|----------| | `/dev/shm` 容量不足 | 扩展 tmpfs 小 | | 虚拟内存(交换空间)不足 | 增加交换文件或分区 | | `MEMORY_TARGET` 设置过高 | 调整参数或改用 SGA/PGA 手动管理 | [^1]: Oracle AMM 要求 `/dev/shm` 至少能容纳 `MEMORY_MAX_TARGET` 或 `MEMORY_TARGET` 参数值 [^2]: 虚拟环境中需确保宿主机资源充足,避免过度分配 --- ### **相关问题** 1. **如何为 Oracle 11g 创建额外的交换文件?** 2. **在虚拟机中如何优化 Oracle 内存分配?** 3. **Oracle 手动内存管理(SGA/PGA)与自动管理的性能差异?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值