ORA-09890: osnTXtt malloc failed 怎么修复?远程怎么处理?

文章导读
解决方案:检查服务器内存使用情况,清理不必要的进程,重启数据库实例。如果是内存不足,增加swap空间或物理内存。远程处理:通过SSH登录服务器,执行free -m查看内存,kill掉高占用进程,然后重启监听器lsnrctl stop/start。
📋 目录
  1. 来源1
  2. 来源2
  3. 来源3
  4. 来源4
  5. 来源5
  6. 来源6
A A

解决方案:检查服务器内存使用情况,清理不必要的进程,重启数据库实例。如果是内存不足,增加swap空间或物理内存。远程处理:通过SSH登录服务器,执行free -m查看内存,kill掉高占用进程,然后重启监听器lsnrctl stop/start。

来源1

这个错误是因为内存不足导致的malloc失败。osnTXtt是Oracle内部函数申请内存失败。修复方法:1. 查看top命令,杀掉占用内存大的进程。2. 增加临时表空间。3. 重启实例。远程的话,用putty连上去,su - oracle,然后sqlplus / as sysdba,shutdown immediate; startup;

来源2

ORA-09890: osnTXtt: malloc failed. 这是Linux下Oracle监听器启动失败,内存申请不到。解决:df -h 检查磁盘,free -g 看内存,如果swap用光了,增加swap。远程处理:ssh root@host,echo '/dev/zero' | dd if=/dev/zero of=/swapfile bs=1024 count=2097152,mkswap /swapfile,swapon /swapfile。

来源3

遇到这个问题,重启服务器最快,但不是根治。检查ulimit -a,确保内存限制够大。Oracle 11g常见,升级到12c少见。远程:用plink或ssh脚本自动化,ps -ef |grep oracle杀进程,然后启动监听。

来源4

在AIX系统上也报这个,内存碎片问题。用dbshut全关,然后dbstart。远程用expect脚本模拟交互:spawn ssh user@host,send "su - oracle\r" 等。

ORA-09890: osnTXtt malloc failed 怎么修复?远程怎么处理?

来源5

修复步骤:1. lsnrctl status看监听状态。2. strace -p listener_pid 跟踪malloc失败。3. 调大SGA参数。远程:用ansible playbook批量处理多机。

来源6

简单方法:echo 3 > /proc/sys/vm/drop_caches 释放缓存,然后重试启动监听。远程直接ssh执行。

FAQ
Q: 为什么会出现这个错误?
A: 内存不足,malloc申请失败。
Q: 不重启能修复吗?
A: 可以,杀进程释放内存或加swap。
Q: Windows上怎么处理?
A: 类似,任务管理器杀进程,重启服务。
Q: 预防方法?
A: 监控内存,设置告警。