SQL Server2009/10/16 00:01

SQL Server 2000 에서 c0000005 Access violation(액세스 위반) 오류가 발생하며 서비스가 재시작 된 사례가 있어 아래와 같이 정리하였습니다. crash 발생 시 생성된 mdmp 파일을 windbg 로 확인한 사례입니다.


[환경]
SQL Server 2000 SP4

 
[현상]
SQL Server 가 비정상적으로 예기치 않은 오류로 서비스가 종료된 원인 분석 


[원인]
Oracle client library C:\ORANT\BIN\NLNT.DLL 모듈에 의해서 접근할 수 없는 메모리 번지를 참조하여 Access violation 이 발생하였습니다.


[Action Plan]
참조된 NLNT, SQLTNSNT, ORA73 모두 Oracle client module이며 파일이 모두 1997년 버전(7.3.4)으로 매우 오래된 버전임을 확인할 수 있습니다. Oracle Client 모듈 업데이트를 권장합니다.


[분석결과]
1. call stack 분석

PROCESS_NAME:  sqlservr.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

EXCEPTION_PARAMETER1:  00000001
EXCEPTION_PARAMETER2:  00000000
WRITE_ADDRESS:  00000000

FOLLOWUP_IP:
NLNT+140ca
07f040ca 8900            mov     dword ptr [eax],eax


NTGLOBALFLAG:  0
FAULTING_THREAD:  00000c94
PRIMARY_PROBLEM_CLASS:  NULL_POINTER_READ
BUGCHECK_STR:  APPLICATION_FAULT_NULL_POINTER_READ_NULL_POINTER_WRITE
LAST_CONTROL_TRANSFER:  from 07f00a08 to 07f040ca

STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong.
1a50b7d4 07f00a08 190d0e4c 1a50bf10 07e6d99c NLNT+0x140ca
1a50b7ec 07efea28 190d0e4c 1a50c8ed 07e6d99c NLNT+0x10a08
1a50bf6c 07e47bca 190d0e4c 1a50c294 1a50bf94 NLNT+0xea28
1a50c91c 07e45519 190d0e4c 00001803 00000000 SQLTNSNT+0x7bca
1a50e498 07e41063 1a50f634 0000000d 078a0ffc SQLTNSNT+0x5519
1a50e4cc 0785e96c 1a50f634 0000000d 078a0ffc SQLTNSNT+0x1063
1a50f970 0786990d 1a50f634 0000000d 00001803 ORA73+0xe96c
1a50fae4 07877089 0aa96a60 05f5fbd8 0000000d ORA73+0x1990d
1a50fb10 078770c8 0aa96a60 05f5fbd8 0000000d ORA73+0x27089
1a50fb34 0787aeee 0aa96a60 05f5fbd8 0000000d ORA73+0x270c8
1a50fe24 0787ca62 0aa96a60 0aa91958 00000007 ORA73+0x2aeee
1a50fe68 07864050 0aa96a60 0aa91958 ffffffff ORA73+0x2ca62
1a50feb4 0785dd67 0aa96a60 0aa91958 ffffffff ORA73+0x14050
1a50feec 07841e3b 0aa6f5c0 0aa96a60 0aa91958 ORA73+0xdd67
1a50ff48 07801e2d 00000016 00000009 1a0ae764 OCIW32+0x1e3b
1a50ff84 77b6b530 05f61be8 00000000 00000000 msdaora!COci7Session::WorkerThread+0x58
1a50ffb8 7c826063 190b61d0 00000000 00000000 msvcrt!_endthreadex+0xa3
1a50ffec 00000000 77b6b4bc 190b61d0 00000000 kernel32!BaseThreadStart+0x34
SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  NLNT+140ca
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: NLNT
IMAGE_NAME:  NLNT.DLL
DEBUG_FLR_IMAGE_TIMESTAMP:  342970ca

STACK_COMMAND:  ~288s; .ecxr ; kb
FAILURE_BUCKET_ID:  NULL_POINTER_READ_c0000005_NLNT.DLL!Unknown
BUCKET_ID:  APPLICATION_FAULT_NULL_POINTER_READ_NULL_POINTER_WRITE_NLNT+140ca

Followup: MachineOwner
---------

0:288> .exr 0xffffffffffffffff
ExceptionAddress: 07f040ca (NLNT+0x000140ca)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 00000000
Attempt to write to address 00000000

0:288> lmvm NLNT
start    end        module name
07ef0000 07f0b000   NLNT     T (no symbols)          
    Loaded symbol image file: NLNT.DLL
    Image path: C:\ORANT\BIN\NLNT.DLL
    Image name: NLNT.DLL
    Timestamp:        Thu Sep 25 04:58:02 1997 (342970CA)
    CheckSum:         00000000
    ImageSize:        0001B000
    File version:     0.0.0.0
    Product version:  0.0.0.0
    File flags:       0 (Mask 0)
    File OS:          0 Unknown Base
    File type:        0.0 Unknown
    File date:        00000000.00000000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4


작성자 : Lai Go / 작성일자 : 2009.10.14

저작자 표시 비영리 변경 금지
Posted by Lai Go