2012-07-16 47 views
2

使用数据库的应用程序突然中断。我开始调查,发现一个简单的计数查询如何在SQL Server 2008上调试EXCEPTION_ACCESS_VIOLATION

SELECT count(uberdataid) FROM [Alexander].[dbo].[UberData] 

创建SQL Server中的错误:

Msg 0, Level 11, State 0, Line 0 A severe error occurred on the current command. The results, if any, should be discard

的一点想法:

  • 当我检查出错误的堆栈跟踪它说有一个EXCEPTION_ACCESS_VIOLATION。该异常的名称使我认为查询中可能存在权限问题。但是,我在许多不同的用户帐户上得到了完全相同的错误(这些错误都可以在没有问题的情况下查询数据库)。

  • 关于SO的这个讨论(Exception Access Violation in SQL)让我觉得这个查询可能会造成持续的记录锁定,但我已经重启了服务器,所以看起来不太可能。

在其他留言板上还有一些其他未解决的讨论在线。

任何想法?

Stackoverflow不会让我发布整个跟踪(太长),但我很高兴发布相关部分,如果人们需要看到他们。我不知道哪些痕迹是最重要的。

+0

没有发布这个答案,因为我对SQL Server一无所知。访问冲突表示SQL Server正在发生分段错误。那将是一件坏事。有可能你的桌子被损坏了。您可以尝试从问题出发之前进行旧备份,以查看问题是否未经历过。除此之外,如果这很容易重现,您可能会发现一个错误。 – Wug 2012-07-16 20:19:34

+0

什么是SQL Server的构建(SELECT @@ VERSION)?大多数访问违规都是错误,大部分都已修复,但除了在AV发生的环境中,它们很难进行测试和证明。 – 2012-07-16 20:19:45

+0

@AaronBertrand Microsoft SQL Server 2008(SP3) - 10.0.5500.0(X64)Sep 21 2011 22:45:45 Copyright(c)1988-2008 Windows NT 6.0上的Microsoft Corporation企业版(64位)(内部版本6002: Service Pack 2) – bernie2436 2012-07-16 21:54:33

回答

2

这看起来像一个SQL Server错误。 EXCEPTION_ACCESS_VIOLATION表示SQL Server内部的代码尝试访问“无效”内存(例如,取消引用NULL指针)。它与SQL Server安全设置无关。

即使这可能是一个错误,我建议你有问题的数据库上运行

DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS 

。可能存在触发SQL Server错误的损坏。

+0

运行该检查会出现此错误:Msg 1823,Level 16,State 2,Line 1无法创建数据库快照,因为它无法启动.Msg 7928,Level 16,State 1,Line 1数据库快照在线检查无法创建。原因在前面的错误中给出,或者其中一个基础卷不支持稀疏文件或备用流。试图获得脱机运行检查的独占访问权限。 – bernie2436 2012-07-17 14:07:10

+0

消息5030,级别16,状态12,行1 无法专门锁定数据库以执行操作。 消息7926,级别16,状态1,行1 检查语句中止。由于无法创建数据库快照而无法锁定数据库或表,因此无法检查数据库。请参阅联机丛书以了解何时需要此行为以及存在哪些解决方法的详细信息。有关更多详细信息,请参阅以前的错 – bernie2436 2012-07-17 14:07:36

+0

您可以先将数据库置于单用户模式(ALTER DATABASE DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE)吗?这将允许锁被采取。 – usr 2012-07-17 15:46:05