一次处理ORA-07445的历险记(转)

ORA-07445通常是Oracle调用操作系统的资源出错时出现的[@[email protected]]

事前没有任何征兆,下午5点左右某个关键应用的17台oracle数据库上的数据库实例陆续宕机,赶紧查看alert_log,发现此文件中记录了大量的0RA-07445错误代码:

ORA-07445: exception encountered: core dump [] [] [] [] [] []

也顾不得查找root cause,赶紧重新启动数据库,但更糟糕的是数据库实例居然启动失败,连续多次startup才能偶尔启动成功一次,而且很快又宕机,Listener也经常启动失败。第一感觉是服务器中了病毒,应用的环境是:oracle 10.2.0.1 和windows 2003 server。因为ORA-07445通常是Oracle调用操作系统的资源出错时出现的。查看了一下oracle的参数,吃惊的发现数据库居然运行在共享模式,赶紧把它们全部改到专用模式,相关语句如下:

alter system set dispatchers=‘ ;

alter system set shared_servers=0;

再重新启动数据库,已经可以启动了,但偶尔实例还会宕,不过马上重新启动就行了,就这样隔一会儿就重启一下数据库。终于熬到了下班,周围的电话也安静了下来,可以开始静下心来找root cause了。

从前面的症状分析,一个明显的感觉是OS出了问题,Oracle数据库在调用windows 2003 server的资源时出错,

因为专用模式减少了Oracle和OS之间的交互,所以减少了宕机的现象发生。

再到metalink上查找类似问题,找到了两个文档Doc ID: 422471.1和Doc ID: 405904.1。经过分析后,采取了实施了以下两个变更:

变更一:为减少和数据库和OS的交到,封锁OS登录数据库的认证:

在sqlnet.ora中,注释了下面的语句:

# SQLNET.AUTHENTICATION_SERVICES = (NTS)

变更二:为加快数据库对登录会话的响应,修改下面监听的参数

Sqlnet.ora中增加下面的语句

SQLNET.INBOUND_CONNECT_TIMEOUT = 0 ---默认是60秒

在listener.ora中增加

INBOUND_CONNECT_TIMEOUT_LISTENER =0 ---默认是60秒

有以下特点:

  • 有15台机器在第一天几乎同一个时间点都出现了svchost.exe的报错,以后再出现svchost.exe的报错也基本是多台机器同时产生的。
  • 和oracle的alert_log结合分析,在svchost.exe出错不久,数据库出现ora-07445的错误接着就宕机。
  • 错误模块 kernel32.dll,错误地址 0x0010568f。

在windows的下面两个网页中可以找到对这个漏洞的说明和解决办法。

http://www.microsoft.com/china/technet/security/bulletin/MS08-067.mspx

http://support.microsoft.com/kb/958644/zh-cn

经过分析,极有可能是 W32.downadup.B型蠕虫病毒,需要打上KB958644的补丁,打卡补丁后问题果然解决。

总结:内网某台机器中了病毒,不断地攻击同一网段的windows系统的svchost进程,造成Oracle宕机,通过调整Oracle的参数和给windows打补丁后解决。

参考文档:

Oracle metalink  Doc ID: 422471.1和Doc ID: 405904.1

Windows:

http://www.microsoft.com/china/technet/security/bulletin/MS08-067.mspx

http://support.microsoft.com/kb/958644/zh-cn

http://blog.itpub.net/7695891/viewspace-1040157/

时间: 2024-10-31 02:08:23

一次处理ORA-07445的历险记(转)的相关文章

讨厌麻烦的ora 01722无效数字

webservice开发过程中,数据库由原来的oracle改为现在的sql server.然后重新调试,结果报出ora 01722无效数字的错误. 由于连接oracle数据库的时候并没有问题,所以一开始我以为是数据库不同,导致部分数据类型差异,(但又觉得有点离谱,切换数据库,不至于会导致这种错误吧) 经过排查,总结得出如下: 1.对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;2.两个类型不匹配的值进行比较操作(例如,"=");3.to_number函数中的值

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的.除此之外,还可以对实例进行远程注册,以达到负载均衡的目的.这是通过一个参数remote_listener来实现. 有关Oracle 网络配置相关基础以及概念性的问题请参考:      配置ORACLE 客户端连接到数据库   配置非默认端口的动态服务注册   

oerr ora 000845解决方法是扩大/dev/shm空间

打开虚拟机发现实例起不来 [[email protected] ~]# su - oraclesq[[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 2 14:59:54 2016 Copyright (c) 1982, 2013, Oracle.  All rights reserved. Connected to an idle instance. [ema

tnsnames.ora文件说明

目录位置 unix:$ORACLE_HOME/network/admin WINDOW:%ORACLE_HOME%\network\admin 设置相应的环境变量:TNS_ADMIN tnsname.ora文件内容例子 --负载均衡,故障转移 sample2= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS_LIST= (SOURCE_ROUTE=yes) (ADDRESS=(PROTOCOL=tcp)(HOST=host1)(POR

在TNSNAMES.ORA文件中配置本机装的oracle

首先,感谢这两位网友:http://zhidao.baidu.com/link?url=eGYeoEa-EhQdVitSGqjE36uNfVmEsryXH1WUjPue6YvArDSx-Y1N9_rd9Hx6vh-NklyevkcCtAMh1X28fI1Hoq 引子: 我在Oracle SQL Developer工具中创建了一个名为"oa"的连接,然后登陆PLSQL Developer,从本地导入一张表"T_DEPT",打开Oracle SQL Developer,

ALERT.LOG for ASM Shows "WARNING: failed to online diskgroup resource ora.GI.dg (unable to communica

APPLIES TO: OracleDatabase - Enterprise Edition - Version 11.2.0.1 to 12.1.0.1 [Release 11.2 to12.1] Informationin this document applies to any platform. ***Checked for relevance on 03-Jul-2013*** SYMPTOMS If OCR is located on ASM diskgroup, followin

安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?

如果我们由于需要安装了多个Oracle的client,哪个客户端的tnsnames.ora会起作用呢? 答案是: 在安装好clinent端后,安装程序会把client的bin目录放到path里面,path中在前面的client会被首先搜索,其中的tnsnames.ora会起作用,后面的clinent就不起作用了. %ORACLE_HOME%\bin下面有一个oracle.key,指定用注册表中的哪一个oraclehome,注册表中的每一个oraclehome包含了所有的设置,包括NLS_LANG

oracle instant client,tnsping,tnsnames.ora和ORACLE_HOME

前段时间要远程连接oracle数据库,但是又不想在自己电脑上完整安装oracle客户端,于是到oracle官网下载了轻量级客户端instant client.这玩意没有图形界面,全靠sqlplus远程连接服务器,所以不占地方,正好满足我这种追求"简单就好"的强迫症患者需求. 但是呢,可能是服务器那边没开监听端口,我在自己的机子上尝试了各种配置,包括tnsnames.ora,sqlnet.ora等,远程连接均告失败.为了排查问题,我先ping了一下服务器的外网地址,发现没问题.网上说,光

expdp报错ora 39126

11.2.0.2,expdp报错: ORA-39126: Worker unexpected fatal error in KUPW$WORKER.GET_TABLE_DATA_OBJECTS []ORA-31642: the following SQL statement fails:BEGIN "SYS"."DBMS_CUBE_EXP".SCHEMA_CALLOUT(:1,0,1,'11.02.00.00.00'); END;ORA-06512: at &quo

Oracle配置文件tnsnames.ora新增链接后连接报错:ORA-12154: TNS:无法解析指定的标识符

另一个空格引发的血案竟然也被我碰到了:在tnsnames. ora文件中新加了一个配置,该配置估计当时是拷的别人的直接粘贴上去的,然后发现用pl/sql连接就一直报错了,后面排除了用户名和密码问题和后,仔细看了该文件才发现新加的配置第一行WLF前多了个不起眼的空格: WLF= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONTENT_DATA = (S