2012-07-16 48 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