一、故障发现
操作系统:window server 2008R2
数据库版本:11.2.0.4
客户告警系统推送“连接某数据库实例失败”,登录主机后查看Windows服务,发现数据库服务已停止,随即先启动数据库服务,待数据库正常后查看日志:
1、数据库alert日志
检查数据库alert日志时发现,日志在21:12数据库服务停止时没有报错信息,21:48数据库启动后开始刷新日志:
2、操作系统事件
检查alert日志无果,于是再去“事件查看器”检查windows日志,发现Windows诊断出虚拟内存不足:
根据报错信息咨询专家并查阅相关资料后判断是由于oravssw.exe内存泄漏导致的故障。
二、解决方案
根据MOS中的相关文档,有以下两个解决方案:
1、临时方案
在“服务”找到“Oracle DBNAME VSS Writer Service”,停止或重新启动此服务以释放分配的内存。
vss服务重启前占用了2G多的内存:
重启服务:
重启后释放内存,vss只占用9M内存:
2、补丁方案
在11.2.0.4.16补丁:20583364中已解决了该bug。
下载该补丁时提示该补丁号已被取代且需要口令,因此暂时未采用该方案,有需要的可以申请下载该补丁或下载最新的补丁。
三、总结
1、VSS服务
VSS编写器服务是对Oracle API提供的Windows卷影复制服务(VSS)的补充,以允许访问打开的Oracle数据库。
以上是VSS的简介,关于VSS的原理和作用笔者并不了解,有感兴趣的参考https://www.handybackup.net/backup_terms/oracle-vss-writer-service.shtml
或者直接查看官方文档。
2、参考文档
Bug 19835650 - Windows: VSS oravssw.exe memory leak (文档 ID 19835650.8)
适用于 Microsoft Windows 平台的 Oracle 11.2.0.x DB Bundle Patches 中修复的错误(文档 ID 1114533.1)
VSS Provider Memory Leak (文档 ID 2224789.1)