SQLServer2008 存储过程执行出错导致 数据库服务停止。。

时间:2022-08-01 07:17:59
环境是WindowServer2008  SQLServer2008 R2 SP2 和Oracle 11g
存储过程执行的时候要实现的是从SQL服务器里通过LinkServer更新Oracle表的数据。
存储过程一执行,看不到任何错误信息的情况下,SQLServer的服务就会出错然后自动停止了。
看OS的日志是ntdll.dll出错了。
现在来看很有可能是 SQL和Oracle的连接出现问题。
这个可能是什么原因引起的,或者从什么地方开始考虑?

16 个解决方案

#1


sqlserver报什么错呢?能引起服务停止的错误级别相当严重啊

#2


这个存储执行了很长时间没有执行完,然后强行关掉了。没有看出什么错误来。

#3


SQLServer的错误日志是否有记录?

#4


2013-04-06 09:45:49.32 spid53      Using 'xpstar.dll' version '2009.100.1600' to execute extended stored procedure 'xp_instance_regread'. This is an informational message only; no user action is required.
2013-04-06 09:48:57.75 spid55      Using 'dbghelp.dll' version '4.0.5'
2013-04-06 09:48:57.76 spid55      ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\SQLDump0009.txt
2013-04-06 09:48:57.76 spid55      SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
2013-04-06 09:48:57.76 spid55      * *******************************************************************************
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      * BEGIN STACK DUMP:
2013-04-06 09:48:57.76 spid55      *   04/06/13 09:48:57 spid 55
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *   Exception Address = 00000000774F386A Module(ntdll+000000000005386A)
2013-04-06 09:48:57.76 spid55      *   Exception Code    = c0000005 EXCEPTION_ACCESS_VIOLATION
2013-04-06 09:48:57.76 spid55      *   Access Violation occurred reading address 0000000000000000
2013-04-06 09:48:57.76 spid55      * Input Buffer 510 bytes -
2013-04-06 09:48:57.76 spid55      *             EXEC Up_AA     @in_Slipno = 
2013-04-06 09:48:57.76 spid55      *  '1'    ,@in_DemandID = 1    ,@in_S = '1'    ,@In_Reqdat
2013-04-06 09:48:57.76 spid55      *  eFrom = '2013/03/11',@In_ReqdateTo = '2013/03/11'    ,@in_WID = 
2013-04-06 09:48:57.76 spid55      *  117    ,@in_AutherID = '10047488'    ,@in_MachineCD = '002007'    ,@in_A
2013-04-06 09:48:57.76 spid55      *  ppID = '130803'    ,@in_NeedConfirmInfo = '1,4901001000012,2;2,490100100
2013-04-06 09:48:57.76 spid55      *  0289,3;3,4901001003570,4;4,4901001003594,5' 
2013-04-06 09:48:57.76 spid55      *  
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *  MODULE                          BASE      END       SIZE
2013-04-06 09:48:57.76 spid55      * sqlservr                       00000000004D0000  00000000040E1FFF  03c12000
2013-04-06 09:48:57.76 spid55      * ntdll                          00000000774A0000  0000000077648FFF  001a9000
2013-04-06 09:48:57.76 spid55      * kernel32                       0000000076DC0000  0000000076EDEFFF  0011f000
・・・・・・・・・・・・
下面还有很长

#5


EXEC那部分直接执行就停服务?

#6


是的  EXEC Up_AA 就是这个存储过程执行的时候   

#7


查一下存储过程大表。估计大表把内存吃完了。这个错误楼主还没有贴完,前面的报错比较主要,还没有贴出来

#8


从下面两点(并且从MODULE的stackcall可以看出这个是SQL SERVER自身的BUG,如果是第三方程序的BUG,那第一个的MODULE的名字应该是第三方DLL的名字)可以看出,这应该是SQL SERVER一个BUG。

1,"SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process."

2,MODULE    
sqlservr                      

对了,你运行一下SELECT @@version ,然后贴出结果来看看。             

#9


前面? 前面的应该都是系统自带的了,我是在服务重新启动之后立刻执行的。 
这些是前面的

2013-04-06 09:45:28.57 spid10s     Starting up database 'tempdb'.
2013-04-06 09:45:28.75 spid13s     The Service Broker protocol transport is disabled or not configured.
2013-04-06 09:45:28.75 spid13s     The Database Mirroring protocol transport is disabled or not configured.
2013-04-06 09:45:28.83 spid13s     Service Broker manager has started.
2013-04-06 09:45:28.85 spid6s      Recovery is complete. This is an informational message only. No user action is required.
2013-04-06 09:45:49.31 spid53      Attempting to load library 'xpstar.dll' into memory. This is an informational message only. No user action is required.
2013-04-06 09:45:49.32 spid53      Using 'xpstar.dll' version '2009.100.1600' to execute extended stored procedure 'xp_instance_regread'. This is an informational message only; no user action is required.
2013-04-06 09:48:57.75 spid55      Using 'dbghelp.dll' version '4.0.5'
2013-04-06 09:48:57.76 spid55      ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\SQLDump0009.txt
2013-04-06 09:48:57.76 spid55      SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
2013-

#10


另外,你是否可以share一下,你的DUMP文件? 
有时间可以帮你DEBUG一下。

#11


SELECT @@version 

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)   Jun 28 2012 08:36:30   Copyright (c) Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 

#12


我看了一下,问一下,你有没有在存储过程使用比如--那样的注释呀?

#13


如果是LINKED SERVER使用的Provider DLL,可以考虑将LINKED SERVER Provider Allow in process 设置为FALSE.

#14


dump error 最好直接联系微软

#15


引用 14 楼 hyrongg 的回复:
dump error 最好直接联系微软


怎么联系?

#16


引用 13 楼 SmithLiu328 的回复:
如果是LINKED SERVER使用的Provider DLL,可以考虑将LINKED SERVER Provider Allow in process 设置为FALSE.


这个设置是什么意思呢?

#1


sqlserver报什么错呢?能引起服务停止的错误级别相当严重啊

#2


这个存储执行了很长时间没有执行完,然后强行关掉了。没有看出什么错误来。

#3


SQLServer的错误日志是否有记录?

#4


2013-04-06 09:45:49.32 spid53      Using 'xpstar.dll' version '2009.100.1600' to execute extended stored procedure 'xp_instance_regread'. This is an informational message only; no user action is required.
2013-04-06 09:48:57.75 spid55      Using 'dbghelp.dll' version '4.0.5'
2013-04-06 09:48:57.76 spid55      ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\SQLDump0009.txt
2013-04-06 09:48:57.76 spid55      SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
2013-04-06 09:48:57.76 spid55      * *******************************************************************************
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      * BEGIN STACK DUMP:
2013-04-06 09:48:57.76 spid55      *   04/06/13 09:48:57 spid 55
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *   Exception Address = 00000000774F386A Module(ntdll+000000000005386A)
2013-04-06 09:48:57.76 spid55      *   Exception Code    = c0000005 EXCEPTION_ACCESS_VIOLATION
2013-04-06 09:48:57.76 spid55      *   Access Violation occurred reading address 0000000000000000
2013-04-06 09:48:57.76 spid55      * Input Buffer 510 bytes -
2013-04-06 09:48:57.76 spid55      *             EXEC Up_AA     @in_Slipno = 
2013-04-06 09:48:57.76 spid55      *  '1'    ,@in_DemandID = 1    ,@in_S = '1'    ,@In_Reqdat
2013-04-06 09:48:57.76 spid55      *  eFrom = '2013/03/11',@In_ReqdateTo = '2013/03/11'    ,@in_WID = 
2013-04-06 09:48:57.76 spid55      *  117    ,@in_AutherID = '10047488'    ,@in_MachineCD = '002007'    ,@in_A
2013-04-06 09:48:57.76 spid55      *  ppID = '130803'    ,@in_NeedConfirmInfo = '1,4901001000012,2;2,490100100
2013-04-06 09:48:57.76 spid55      *  0289,3;3,4901001003570,4;4,4901001003594,5' 
2013-04-06 09:48:57.76 spid55      *  
2013-04-06 09:48:57.76 spid55      *
2013-04-06 09:48:57.76 spid55      *  MODULE                          BASE      END       SIZE
2013-04-06 09:48:57.76 spid55      * sqlservr                       00000000004D0000  00000000040E1FFF  03c12000
2013-04-06 09:48:57.76 spid55      * ntdll                          00000000774A0000  0000000077648FFF  001a9000
2013-04-06 09:48:57.76 spid55      * kernel32                       0000000076DC0000  0000000076EDEFFF  0011f000
・・・・・・・・・・・・
下面还有很长

#5


EXEC那部分直接执行就停服务?

#6


是的  EXEC Up_AA 就是这个存储过程执行的时候   

#7


查一下存储过程大表。估计大表把内存吃完了。这个错误楼主还没有贴完,前面的报错比较主要,还没有贴出来

#8


从下面两点(并且从MODULE的stackcall可以看出这个是SQL SERVER自身的BUG,如果是第三方程序的BUG,那第一个的MODULE的名字应该是第三方DLL的名字)可以看出,这应该是SQL SERVER一个BUG。

1,"SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process."

2,MODULE    
sqlservr                      

对了,你运行一下SELECT @@version ,然后贴出结果来看看。             

#9


前面? 前面的应该都是系统自带的了,我是在服务重新启动之后立刻执行的。 
这些是前面的

2013-04-06 09:45:28.57 spid10s     Starting up database 'tempdb'.
2013-04-06 09:45:28.75 spid13s     The Service Broker protocol transport is disabled or not configured.
2013-04-06 09:45:28.75 spid13s     The Database Mirroring protocol transport is disabled or not configured.
2013-04-06 09:45:28.83 spid13s     Service Broker manager has started.
2013-04-06 09:45:28.85 spid6s      Recovery is complete. This is an informational message only. No user action is required.
2013-04-06 09:45:49.31 spid53      Attempting to load library 'xpstar.dll' into memory. This is an informational message only. No user action is required.
2013-04-06 09:45:49.32 spid53      Using 'xpstar.dll' version '2009.100.1600' to execute extended stored procedure 'xp_instance_regread'. This is an informational message only; no user action is required.
2013-04-06 09:48:57.75 spid55      Using 'dbghelp.dll' version '4.0.5'
2013-04-06 09:48:57.76 spid55      ***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\SQLDump0009.txt
2013-04-06 09:48:57.76 spid55      SqlDumpExceptionHandler: Process 55 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
2013-

#10


另外,你是否可以share一下,你的DUMP文件? 
有时间可以帮你DEBUG一下。

#11


SELECT @@version 

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)   Jun 28 2012 08:36:30   Copyright (c) Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 

#12


我看了一下,问一下,你有没有在存储过程使用比如--那样的注释呀?

#13


如果是LINKED SERVER使用的Provider DLL,可以考虑将LINKED SERVER Provider Allow in process 设置为FALSE.

#14


dump error 最好直接联系微软

#15


引用 14 楼 hyrongg 的回复:
dump error 最好直接联系微软


怎么联系?

#16


引用 13 楼 SmithLiu328 的回复:
如果是LINKED SERVER使用的Provider DLL,可以考虑将LINKED SERVER Provider Allow in process 设置为FALSE.


这个设置是什么意思呢?