修复: 访问冲突和"此代码时应引发任何异常"错误发生在使用 SQL Server 2012年或 SQL Server 2014

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3042135
症状
假定您使用 Microsoft SQL Server 2012年或 SQL Server 2014年。在 SQL Server 中发生了死锁时, 您会收到下面的访问冲突引起的死锁监控:
sqldk!CSlotGroup::PshRelease
sqldk!CSlotPageMgr::Release
sqllang! commondelete
sqllang! 删除]
sqllang!CTraceDataSTVF::InternalReleaseResources
sqllang!TTableBase<CTraceDataSTVFInfo>:: ReleaseResources</CTraceDataSTVFInfo>
sqllang!CTraceDataSTVF:: {dtor}
sqllang!CTraceDataSTVF:: 标量删除析构函数
sqlmin!CSTVFInternal::Release
sqlmin!CQueryExecContext:: ~ CQueryExecContext
sqlmin!CQueryInstance::ShutdownQueryExecContext
sqlmin!CQueryScan::ShutdownQueryExecContext
sqlmin!CQueryScan::DestroyQueryOnException
sqllang!CXStmtQuery::ShutdownOnException
sqllang!CXStmtQuery::FinishOnExceptionImp
sqllang!GetInterruptTicks
sqllang!InterruptTicks<unsigned __int64="">:: LoadTicks</unsigned>
sqllang!SOS_Ticks<><unsigned __int64="">、-3 >:: LoadTicks</unsigned>
sqllang! CMsqlExecContext::FExecute::"1":: 捕获 3 美元
msvcr100! _CallSettingFrame
msvcr100! __CxxCallCatchBlock
ntdll!RcFrameConsolidation
sqllang!CMsqlExecContext::FExecute
sqllang!CSQLSource::Execute
sqllang!CStmtExecProc::XretLocalExec
sqllang!CStmtExecProc::XretExecExecute
sqllang!CXStmtExecProc::XretExecute
sqllang!CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn
sqllang!CMsqlExecContext::ExecuteStmts<1,0></1,0>
sqllang!CMsqlExecContext::FExecute
sqllang!CSQLSource::Execute
sqllang!ExecuteSql
sqllang!CSpecProc::ExecuteSpecial
sqllang!CSpecProc::Execute
sqllang! process_request
sqllang! process_commands
sqldk!SOS_Task::Param:: 执行
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::ProcessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::ProcessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart
之后访问冲突、 SQL Server 错误日志中收到以下错误消息:
日期>时间> spid标识> 使用 dbghelp.dll 版本"4.0.5"
日期>时间> spid标识> * * 转储线程-spid =标识>,EC = 0X0000007F8608E160
日期>时间> spid标识> *** 堆栈转储发送到文件路径>\转储文件名>.txt
日期>时间> spid标识> * *******************************************************************************
日期>时间> spid标识> *
日期>时间> spid标识> * 开始堆栈转储:
日期>时间> spid标识> *日期>时间> spid标识>
日期>时间> spid标识> *
日期>时间> spid标识> * 位置: qxcntxt.cpp:1143
日期>时间> spid标识> * 表达式:!"此代码应引发无例外"
日期>时间> spid标识> * SPID:标识>
日期>时间> spid标识> * 进程 ID: 3556
日期>时间> spid标识> *
日期>时间> spid标识> * 37 个字节的输入缓冲区
日期>时间> spid标识> * 16 00 00 00 12 00 00 00 02 00 00 00 00 00 00 00 00 00
日期>时间> spid标识> * ÿÿ & 01 00 00 00 ff ff 0c 00 00 00 00 00 26 04 04 05 00 00
日期>时间> spid标识> * 00
日期>时间> spid标识> *
日期>时间> spid标识> *
...
日期>时间> spid标识> 堆栈转储签名是 0x000000014202549F
日期>时间> spid标识> [信息] 标识开始结束 |状态结果错误推测准备的 LazyCommit 只读 |事务数据库 ThreadId |ReadSet WriteSet ScanSet 保存点 LogSizeRq |CommitDep TotalComm 依赖 0 依赖 1 依赖 2 依赖 3 依赖 4 从属 5 相关 6 依赖 7 |区域位置 |
日期>时间> spid标识> 等待外部转储进程 11800 超时。

日期>时间> spid标识> 第 17066 错误: 严重: 16 日状态: 1。
日期>时间> spid标识> SQL Server 断言: 文件: <qxcntxt.cpp>,行 = 1143年失败肯定 = '!"没有例外情况应由下面的代码引发"。此错误可能是与计时相关。如果重新运行该语句后仍然出现错误,使用 DBCC CHECKDB 来检查数据库中结构的完整性、 或重新启动服务器以确保内存中的数据结构不会被破坏。</qxcntxt.cpp>

解决方案

累积更新信息

第一次修复该问题的SQL Server累积更新包

建议: 设置 SQL Server 的累积更新
SQL Server 的每个新累积更新包含所有修补程序和所有安全修复程序是附带在以前的累积更新。我们建议您下载并安装最新的累积更新 SQL Server:
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。

属性

文章 ID:3042135 - 上次审阅时间:06/22/2015 16:04:00 - 修订版本: 2.0

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Service Pack 1

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB3042135 KbMtzh
反馈