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

Oracle 定期tns-12531:tns:无法分配内存,oracle,database-administration,Oracle,Database Administration,我有一个困扰我大约一年的问题。我的机器上安装了Oracle 12.1.x.x。一两天后,侦听器停止响应,listener.log包含一堆TNS-12531消息。如果我重新启动,问题就会消失,我还能再活一两天。我很懒,我讨厌重新启动,所以我决定最终找到它,但我没有运气。因为另一种选择是做我真的不想做的工作,所以我会把所有的时间都花在研究上 一些注意事项: Windows10Pro 64位 32 GB内存 一般来说,发生错误时大约有20GB的空闲空间 我有几个数据库,运行哪个数据库并不重要 重新启

我有一个困扰我大约一年的问题。我的机器上安装了Oracle 12.1.x.x。一两天后,侦听器停止响应,listener.log包含一堆
TNS-12531
消息。如果我重新启动,问题就会消失,我还能再活一两天。我很懒,我讨厌重新启动,所以我决定最终找到它,但我没有运气。因为另一种选择是做我真的不想做的工作,所以我会把所有的时间都花在研究上

一些注意事项:

  • Windows10Pro
  • 64位
  • 32 GB内存
  • 一般来说,发生错误时大约有20GB的空闲空间
  • 我有几个数据库,运行哪个数据库并不重要
  • 重新启动数据库没有帮助
  • 重新启动侦听器没有帮助
  • 只有重新启动才能清除问题
  • 当我设置TRACE\u LEVEL\u LISTENER=16时,我没有得到更多的信息。跟踪文件不会写入到
  • 如果绕过侦听器,我可以连接到DB(即,设置
    ORACLE\u SID=xxx
    并在没有DB标识符的情况下连接)
  • 在侦听器停止后,所有其他网络交互似乎都可以正常工作
  • lsnrctl状态挂起,并向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 在非英语Windows安装上运行时,大约在通过侦听器建立2048个连接之后,会发生此错误

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

参考:我会在找到第一期的链接后立即发布


问题2 在Windows 64位系统上,如果桌面应用程序堆太小,也会发生此错误

修正问题2 尝试在位于的windows中增加桌面应用程序堆注册表

HKLM\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
正如注意不要自己添加这个值一样,您必须依赖文档

基本上搜索注册表项并更改项的第三个值
SharedSection=10242048001024
。这是一种尝试和错误的方法,但似乎可以改善听者的稳定性和记忆问题

参考:(Oracle开发人员社区)