Oracle ORA-27102的解决办法(out of memory)

Oracle ORA-27102:out of memory 错误解决办法(简单粗暴,100%能解决内存占用问题)

-前置:

当遇到这个问题,笔者也是一脸的茫然,然后就是查资料,在笔者查阅了很多相关资料后发现什么优化、配置sysctl.conf内存最大最小值后发现也都没啥太大的作用(笔者的/etc/sysctl.conf已经配置与内存同样大小),最终还是通过比较简单粗暴的方式将问题解决,直接结束现有进程。

-原因:

由于Linux下运行的进程占用物理内存过多虚拟内存过大虚拟内存不释放导致系统内存不足,这是问题的根本!

-那么,怎么解决?

解决方案:

一、Linux系统:
1.查看Linux进程内存占用情况:

  (1)使用top命令:$ top -u oracletop -10

2.筛选结果(如结果显示PID144524java进程占用了1.9G的物理内存):

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
3440root200132m27m1056S7.30.11511:06phdaemon
102435root200154281724948R0.70.00:00.04top
144524root20015.2g1.9g7156S0.76.19:17.07java
2277root20015.2g1.6g13mS0.35.22:02.41java
9312root200102m2168992S0.30.02:52.20oraysl

3.根据PID结束进程命令:
  (1)如果不想结束整个java进程,还可以使用ps命令:$ ps -ef|grep java
  (2)找到可以结束的进程PID,在使用kill命令:$ kill -9 144524
  (3)直到再次登录。
  
内容解释:
  PID:进程的ID

  USER:进程所有者

  PR:进程的优先级别,越小越优先被执行

  NInice:值

  VIRT:进程占用的虚拟内存

  RES:进程占用的物理内存

  SHR:进程使用的共享内存

  S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数

  %CPU:进程占用CPU的使用率

  %MEM:进程使用的物理内存和总内存的百分比

  TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

  COMMAND:进程启动命令名称

常用命令:
  P:按%CPU使用率排行

  T:按MITE+排行

  M:按%MEM排行


























注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!


持续更新中…

如有对思路不清晰或有更好的解决思路,欢迎与本人交流,QQ群:273557553,个人微信:
你遇到的问题是小编创作灵感的来源!


### Windows系统中ORA-27102 out of memory错误的解决方案 在Windows系统中,当遇到Oracle ORA-27102 out of memory错误时,通常是由于内存配置不当或系统资源不足导致的。以下是一些可能的解决方法: #### 1. 检查并优化共享内存设置 在Windows系统中,虽然不像Linux那样需要手动配置`/etc/sysctl.conf`文件,但仍然可以通过调整Oracle实例的初始化参数来优化共享内存的使用。确保`SGA_MAX_SIZE`和`SHARED_POOL_SIZE`等参数设置合理[^3]。如果这些参数过大,可能会导致内存分配失败。 ```sql ALTER SYSTEM SET SGA_MAX_SIZE=4G SCOPE=SPFILE; ALTER SYSTEM SET SHARED_POOL_SIZE=1G SCOPE=SPFILE; ``` 重启数据库后检查是否解决了问题。 #### 2. 增加系统可用物理内存 如果服务器的物理内存不足,可能会导致Oracle无法分配足够的内存来启动实例。建议增加物理内存或释放其他应用程序占用的内存资源。可以通过任务管理器查看内存使用情况,并关闭不必要的程序以释放更多内存。 #### 3. 调整操作系统内存限制 在Windows系统中,可以尝试调整操作系统的内存限制。通过修改注册表中的相关键值来增加Oracle进程的内存分配上限[^4]。具体步骤如下: - 打开注册表编辑器(`regedit`)。 - 定位到路径:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`。 - 修改`PagedPoolSize`和`NonPagedPoolSize`的值为更大的数值(单位为字节)。 #### 4. 结束占用内存过高的进程 如果某些进程占用了过多的系统内存,可能会导致Oracle无法正常启动。可以使用任务管理器或命令行工具结束这些进程。例如,使用以下命令列出所有Oracle相关的进程并结束它们: ```cmd tasklist | findstr oracle taskkill /F /PID <PID> ``` 其中`<PID>`是需要结束的进程ID。 #### 5. 检查控制文件和数据文件路径 确保控制文件和数据文件路径正确无误,避免因路径问题导致的内存分配失败。可以通过以下SQL语句检查控制文件路径: ```sql SHOW PARAMETER control_files; ``` 如果路径不正确或文件缺失,需重新配置或恢复相关文件[^4]。 ```sql ALTER SYSTEM SET control_files='C:\oracle\oradata\control01.ctl','C:\oracle\oradata\control02.ctl' SCOPE=SPFILE; ``` #### 6. 使用简单粗暴的方式解决问题 如果上述方法均无效,可以考虑直接结束现有Oracle进程并重新启动数据库服务。这种方式虽然简单,但应作为最后的选择[^1]。 ```cmd net stop OracleService<InstanceName> net start OracleService<InstanceName> ``` ### 示例代码 以下是一个简单的批处理脚本,用于停止和启动Oracle服务: ```batch @echo off echo Stopping Oracle Service... net stop OracleServiceXE echo Starting Oracle Service... net start OracleServiceXE echo Done. pause ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值