IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析
问题描述:系统不定期报出Oracle“未处理的内部错误(-2)”,严重时IIS会Crash
典型异常日志如下:
Exception type: System.AccessViolationException
Message: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
InnerException: <none>
StackTrace (generated):
SP IP Function
000000000C388FE0 0000000000000001 System_Data_OracleClient_ni!System.Data.Common.UnsafeNativeMethods.OCILobCreateTemporary(System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, UInt16, CHARSETFORM, LOB_TYPE, Int32, DURATION)+0x2
000000000C3890F0 000007FEF4627DEF System_Data_OracleClient_ni!System.Data.OracleClient.TracedNativeMethods.OCILobCreateTemporary(System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, UInt16, CHARSETFORM, LOB_TYPE, Int32, DURATION)+0xef
000000000C3891A0 000007FEF464FC82 System_Data_OracleClient_ni!System.Data.OracleClient.OracleLob..ctor(System.Data.OracleClient.OracleConnection, System.Data.OracleClient.OracleType)+0xc2
000000000C389210 000007FEF463ED33 System_Data_OracleClient_ni!System.Data.OracleClient.OracleParameterBinding.CreateTemporaryLobForValue(System.Data.OracleClient.OracleConnection, System.Data.OracleClient.OracleType, System.Object)+0x63
000000000C389260 000007FEF463FE68 System_Data_OracleClient_ni!System.Data.OracleClient.OracleParameterBinding.PrepareForBind(System.Data.OracleClient.OracleConnection, Int32 ByRef)+0x178
000000000C3892D0 000007FEF46322A1 System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.Execute(System.Data.OracleClient.OciStatementHandle, System.Data.CommandBehavior, Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef, System.Collections.ArrayList ByRef)+0x381
000000000C3893C0 000007FEF46328C6 System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef)+0xa6
000000000C389450 000007FEF46327DE System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.ExecuteNonQuery()+0x10e
。。。。。。。。。。。
。。。。。。。。。。。
000000000C38E590 000007FEF8FCF8A6 mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x286
000000000C38E6F0 000007FEF8FCF60A mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0xa
000000000C38E720 000007FEF8F7B220 mscorlib_ni!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+0x70
000000000C38E770 000007FEF8F7B82B mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch()+0x1eb
Nested exception -------------------------------------------------------------
Exception object: 0000000182836198
Exception type: System.InvalidOperationException
Message: 未处理的内部错误(-2)。
InnerException: <none>
StackTrace (generated):
SP IP Function
000000000C38DDD0 000007FEF469DE51 System_Data_OracleClient_ni!System.Data.OracleClient.OracleConnection.CheckError(System.Data.OracleClient.OciErrorHandle, Int32)+0x71951
000000000C38DE10 000007FEF463244B System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.Execute(System.Data.OracleClient.OciStatementHandle, System.Data.CommandBehavior, Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef, System.Collections.ArrayList ByRef)+0x52b
000000000C38DF00 000007FEF4631F14 System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.Execute(System.Data.OracleClient.OciStatementHandle, System.Data.CommandBehavior, System.Collections.ArrayList ByRef)+0x24
000000000C38DF50 000007FEF4633E00 System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.ExecuteReader(System.Data.CommandBehavior)+0x130
000000000C38E010 000007FEF46326B9 System_Data_OracleClient_ni!System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(System.Data.CommandBehavior)+0x9
000000000C38E040 000007FEF60C67A5 System_Data_ni!System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(System.Data.CommandBehavior)+0x15
000000000C38E070 000007FEF60AA555 System_Data_ni!System.Data.Common.DbDataAdapter.FillInternal(System.Data.DataSet, System.Data.DataTable[], Int32, Int32, System.String, System.Data.IDbCommand, System.Data.CommandBehavior)+0x145
000000000C38E120 000007FEF60AA394 System_Data_ni!System.Data.Common.DbDataAdapter.Fill(System.Data.DataSet, Int32, Int32, System.String, System.Data.IDbCommand, System.Data.CommandBehavior)+0x1a4
000000000C38E1D0 000007FEF60AA196 System_Data_ni!System.Data.Common.DbDataAdapter.Fill(System.Data.DataSet)+0x116
原因分析:
查阅资料发现使用DBLink查询时,oracle会开启隐式分布式事务,进而会引发ORA-24784和内部错误(-2)的异常。
与业务组同事交流,项目上确实使用了DBLink;
分析服务器的事件查看器和业务系统日志,也发现了ORA-24784的Exception,如下:
{"code":24784,"ClassName":"System.Data.OracleClient.OracleException","Message":"ORA-24784: 事务处理已存在\u0000","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":"
System.Data.OracleClient.OciEnlistContext.Join(OracleInternalConnection internalConnection, Transaction indigoTransaction)\r\n
System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment)\r\n
System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction)\r\n
System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)\r\n
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)\r\n
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)\r\n
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)\r\n
System.Data.OracleClient.OracleConnection.Open()\r\n
Demo验证:
经过分析测试验证,使用DBLink的查询确实会开启一个隐式的事务,该数据库连接被重用后如果再显示的开启一个分布式事务时,系统会产生ORA-24784: 事务处理已存在的错误。
问题结论
在并发的混合场景下,通过抓取first chance Exception dump,发现ORA-24784与(-2)、IIS Crash相伴而生,具有很强的关联性。
代码排查所有DBLink的使用,DBLink查询后增加显式的commit调用,以提交因oracle DBLink产生的隐式事务。
相关资料:
oracle官方文档:http://files.cnblogs.com/files/zhaoguan_wang/ORA-24784_Oracle_XA%E6%96%87%E6%A1%A3_ID_1271726.1.pdf
IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析的更多相关文章
- 11i REP-3000: 启动 Oracle Toolkit 时发生内部错误.
+---------------------------------------------------------------------------+ 应用对象程序库: Version : 11. ...
- (转)设置了RemoveIPC=yes 的RHEL7.2 会crash掉Oracle asm 实例和Oracle database实例
设置了RemoveIPC=yes 的RHEL7.2 会crash掉Oracle asm 实例和Oracle database实例,该问题也会在使用Shared Memory Segment (SHM ...
- undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致
本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...
- 12C RAC中的一个数据库实例自动crash并报ORA-27157、ORA-27300等错误
rhel7.2上安装12C RAC数据库后,其中一个数据库实例经常会自动crash.查看alert日志发现以下错误信息: Errors in file /d12/app/oracle/diag/rdb ...
- Oracle split分区表引起ORA-01502错误
继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...
- 转:数据库实例自动crash并报ORA-27157、ORA-27300等错误
rhel7.2上安装12C RAC数据库后,其中一个数据库实例经常会自动crash.查看alert日志发现以下错误信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Errors ...
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误
IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...
- 大并发连接的oracle在Linux下内存不足的问题的分析
大并发连接的oracle在Linux下内存不足的问题的分析 2010-01-28 20:06:21 分类: Oracle 最近一台装有Rhel5.3的40G内存的机器上有一个oracle数据库,数据库 ...
- 关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案
[转]关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案 昨天下载安装了navicat 9.0 Premium(高级英文版),连接mysql正常,看到他 ...
随机推荐
- UINavigationController的使用(多视图控制器)
一,重点 当视图控制器控制多视图时,所有页都有导航栏,如果我们有的页面不希望有导航栏咋办?网上没有搜索到结果,我探索到之后发表于此: [super navigationController].navi ...
- IOS 作业项目(4)步步完成 画图 程序(上)
先上流程图
- 20145210实验五《Java网络编程》
20145210实验五<Java网络编程> 实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码, ...
- LeetCode Sort Colors (技巧)
题意: 一个数组只可能含有3种数据,分别为1,2,3,请将数组排序(只能扫一遍). 思路: 如果扫两遍的话,用个桶记录一下,再赋值上去就行了. class Solution { public: voi ...
- Think Python - Chapter 18 - Inheritance
In this chapter I present classes to represent playing cards, decks of cards, and poker hands.If you ...
- LK 光流法简介
前言 若假定一个局部区域的像素运动是一致的,则可以用这个新的约束条件替代前文中提到的全局速度平滑约束条件.这种光流算法就叫做 LK 光流法. LK 光流法的推导 首先,需要推导出光流约束方程. 这一步 ...
- hdu 1542 Atlantis
求矩形的面积之和. 线段树+离散话+扫描线 #include<iostream> #include<cstdio> #include<cstdlib> #inclu ...
- jsonp跨域请求数据实例——手机号码查询
前言 网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php等,仅仅通过js怎么解决跨域的问题呢?或许jsonp是个不错的选择. 知识准备 上篇博客 ...
- 357. Count Numbers with Unique Digits
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...
- Codeforces Round #280 (Div. 2) A B C 暴力 水 贪心
A. Vanya and Cubes time limit per test 1 second memory limit per test 256 megabytes input standard i ...