定期tns-12531:TNS:无法分配内存

时间:2017-07-28 20:42:14

标签: oracle database-administration

我有一个困扰我一年左右的问题。我的机器上安装了Oracle 12.1.x.x.一两天后,监听器停止响应,listener.log包含一堆TNS-12531消息。如果我重新启动,问题就会消失,我可以再过一两天。我很懒,我讨厌重新启动,所以我决定最终追踪它,但我没有运气。由于替代方案是做我真正不想做的工作,我将把所有时间花在研究上。

一些注意事项:

  • Windows 10 Pro
  • 64位
  • 32 GB RAM
  • 一般情况下,发生错误时大约可以释放20GB
  • 我有几个数据库,无论哪个数据库正在运行
  • 重新启动数据库无济于事
  • 重新启动侦听器无济于事
  • 只有重新启动才能解决问题
  • 当我设置TRACE_LEVEL_LISTENER = 16时,我没有得到更多信息。跟踪文件不会写入
  • 如果我绕过监听器(即设置ORACLE_SID=xxx并且没有数据库标识符连接),我可以连接到数据库。
  • 在侦听器停止后,所有其他网络交互似乎都能正常工作
  • lsnrctl status挂起并向listener.log添加另一个TNS-12531
  • 我在家里的配置大致相同,但这不会发生

以下是listener.log文件的示例:

Fri Jul 28 14:21:47 2017
System parameter file is D:\app\user\product\12.1.0\dbhome_1\network\admin\listener.ora
Log messages written to D:\app\user\diag\tnslsnr\LJ-Quad\listener\alert\log.xml
Trace information written to D:\app\user\diag\tnslsnr\LJ-Quad\listener\trace\ora_24288_14976.trc
Trace level is currently 16

Started with pid=24288
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=LJ-Quad)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Listener completed notification to CRS on start

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
28-JUL-2017 14:22:06 * 12531
TNS-12531: TNS:cannot allocate memory
28-JUL-2017 14:22:47 * 12531
TNS-12531: TNS:cannot allocate memory
28-JUL-2017 14:26:24 * 12531
TNS-12531: TNS:cannot allocate memory

非常感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:1)

第1期

在非英语Windows安装上运行时,大约在通过侦听器建立了2048个连接后,可能会发生此错误。

修复问题1

在listener.exe所在的计算机上创建名为 Administrators 的Windows用户组。这可以解决听众死亡的问题。

参考: 我会在找到第一个问题的链接时立即发布

第2期

桌面应用程序堆太小的Windows 64位系统上也会发生此错误。

修复问题2

  

尝试在位于

中的Windows中增加桌面应用程序堆注册表
HKLM\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
     

正如请注意,不要自己添加此值,您必须依赖文档。

基本上搜索注册表项并更改键SharedSection=1024,20480,1024的第三个值。这是一种反复试验的方法,但似乎可以改善听众的稳定性和记忆问题。

参考: TNS:cannot allocate memory - is there limit to the num databases on one box(Oracle开发人员社区)