zoukankan      html  css  js  c++  java
  • SQLSERVER WINDBG调试:mssqlwiki.com

    https://mssqlwiki.com/2012/10/16/sql-server-exception_access_violation-and-sql-server-assertion/

    SQL Server Exception , EXCEPTION_ACCESS_VIOLATION and SQL Server Assertion

    Posted by Karthick P.K on October 16, 2012

    I have got few request’s from  SQL Server DBA’s in past to blog about analyzing SQL Server exceptions and assertions . After seeing lot of DBA’s getting stuck when they get EXCEPTION_ACCESS_VIOLATION (or) Assertion in SQL ServersI decided to write this blog.

    This blog is published with intention to make DBA’s analyze and resolve EXCEPTION_ACCESS_VIOLATION and SQL Server Assertion before contacting Microsoft support.  Exception and assertion are two different things. SQL handles both assertions and exceptions by writing the current thread’s stack to the Error log and generating a dump.  In simple An exception is an event that occurs during the execution of a program, and requires the execution of code outside the normal flow of control and assertion is the check that the programmer inserted into the code to make sure that some condition is true, If it returns false an assert is raised. SQL handles both assertions and exceptions by writing the current thread’s stack to the Error log and generating a dump, so trouble shooting steps are similar. 

    You will find messages similar to one below in SQL Serve error logs when you get Exception or EXCEPTION_ACCESS_VIOLATION .

    {

    Error

    External dump process returned no errors.
    Using ‘dbghelp.dll’ version ’4.0.5′
    SqlDumpExceptionHandler: Process 510 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
    * *******************************************************************************
    * BEGIN STACK DUMP:
    *  Exception Address = 000000007752485C Module(ntdll+000000000002285C)

    *   Exception Code    = c0000005 EXCEPTION_ACCESS_VIOLATION

    *   Access Violation occurred reading address 0000041EA9AE2EF0

    * Input Buffer 510 bytes –

    ex_terminator – Last chance exception handling

    }

    You will find messages similar to one below in SQL Server error logs when you get an Assertion.

    {

    Error

    spid323     Error: 17065, Severity: 16, State: 1.

    spid323     SQL Server Assertion: File: < .cpp>, line = 2576 Failed Assertion = ‘fFalse’  This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted

    SQL Server Assertion: File: <   .cpp>, line=2040 Failed Assertion =

    }

    To analyze the dump download and Install Windows Debugger from This Link 

    Step 1 (Load the memory dump file to debugger):

    Open Windbg .  Choose File menu –> select Open crash dump –>Select the Dump file (SQLDump000#.mdmp)

    Note : You will find SQLDump000#.mdmp in your SQL Server error log when you get the Exception or assertion.

    Step 2 (Set the symbol path to Microsoft symbols server):

    on command window type

    .sympath srv*c:Websymbols*http://msdl.microsoft.com/download/symbols;

    Step 3 (Load the symbols from Microsoft symbols server):

    Type .reload /f and hit enter. This will force debugger to immediately load all the symbols.

    Step 4 (check if symbols are loaded):

    Verify if symbols are loaded for  SQL Server by using the debugger command lmvm

    0:002> lmvm sqlservr

    start             end                 module name

    00000000`01000000 00000000`03679000   sqlservr T (pdb symbols)          c:websymbolssqlservr.pdb21E4AC6E96294A529C9D99826B5A7C032sqlservr.pdb

        Loaded symbol image file: sqlservr.exe

        Image path: C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBinnsqlservr.exe

        Image name: sqlservr.exe

        Timestamp:        Wed Oct 07 21:15:52 2009 (4ACD6778)

        CheckSum:         025FEB5E

        ImageSize:        02679000

        File version:     2005.90.4266.0

        Product version:  9.0.4266.0

        File flags:       0 (Mask 3F)

        File OS:          40000 NT Base

        File type:        1.0 App

        File date:        00000000.00000000

        Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

    Step 5 (Switch to exception context):

    Type .ecxr

    Step 6(Get the stack of thread which caused exception or assertion):

    Type  kC  1000    //You will get the stack of thread which raised exception or assertion .

    I have pasted one of the sample stack below, from the exception dump which I worked recently.  First thing to identify from stack is who is raising the exception. In the below stack look at the portion which is highlighted in red (In each frame before the ! symbol), that is the module which raised the exception (Exe or DLL name ).

    If Exe/DLL name is Non Microsoft  module (Exe or DLL name ) then the exception is being caused by a third party component, you will need to work with the company that provided that component to get a solution. lmvmExe/DLL name will give you the company name. For example: lmvm wininet

    If Exe/DLL name is  SQLServr  (or) any other SQL Server modules then the exception is raised by SQL Server, In that case type kC 1000 and paste the stack in comments session of this blog (or) When you start thread in MSDN forums (or) In This face book group. If you don’t get any prompt reply from the community, you may need to open a support ticket with Microsoft.

    Note: When you get Assertion make sure you post message line which contains   SQL Server Assertion: File: <Filename.cpp>, line = 2576 Failed Assertion =  ”  

    0:000> kC 1000

    Call Site

    wininet!InternetFreeThreadInfo+0x26

    wininet!InternetDestroyThreadInfo+0x40

    wininet!DllMain_wininet+0xb5

    wininet!__DllMainCRTStartup+0xdb

    ntdll!LdrShutdownThread+0x155

    ntdll!RtlExitUserThread+0x38

    msvcr80!_endthreadex+0x27

    msvcr80!_callthreadstartex+0x1e

    msvcr80!_threadstartex+0x84

    kernel32!BaseThreadInitThunk+0xd

    ntdll!RtlUserThreadStart+0x1d

    If you liked this post, do like us on Facebook at https://www.facebook.com/mssqlwiki and join our Facebook group https://www.facebook.com/mssqlwiki#!/groups/454762937884205/

    Related posts:

    Thank you,

    Karthick P.K |My Facebook Page |My SiteBlog spaceTwitter

     
    Disclaimer

    The views expressed on this website/blog are mine alone and do not reflect the views of m

  • 相关阅读:
    Python_时间,日期,时间戳之间转换
    VirtualBox虚拟机网络设置
    Java_IO流
    获取ElasticSearch索引列表
    关闭ElasticSearch动态创建mapping
    关于elasticsearch输出默认限制最多一万条记录的问题
    linux下ElasticSearch安装及集群搭建
    linux下NFS远程目录挂载
    linux centos7 防火墙及端口开放相关命令
    linux命令
  • 原文地址:https://www.cnblogs.com/zengkefu/p/6938051.html
Copyright © 2011-2022 走看看