SQL Server 啟動時出現錯誤 17066 或 17310

套用到
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Express Edition

症狀

在 Microsoft SQL Server 啟動時,你會立即注意到資料庫復原完成且用戶端連線啟用後,立即出現以下一項或多項症狀。

徵兆 1

你會在 SQL Server 錯誤日誌中收到類似以下錯誤訊息與斷言:

注意

2014-12-13 08:03:34.85 spid24s 使用 'dbghelp.dll' 版本 '4.0.5'
2014-12-13 08:03:34.85 spid24s **棄置串 - spid = 0,EC = 0x0000000082274B20
2014-12-13 08:03:34.85 spid24s ***堆疊傾印正在傳送到 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt
2014-12-13 08:03:34.85 spid24s * *******************************************************************************
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * 開始堆疊傾倒:
2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 SPID 24
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * 地點:ghost.cpp:1742
2014-12-13 08:03:34.85 spid24s * 表達式:tcln1 != NULL
2014-12-13 08:03:34.85 spid24s * SPID:24
2014-12-13 08:03:34.85 spid24s * 程序編號:35444
2014-12-13 08:03:34.85 spid24s *

2014-12-13 08:03:35.47 spid24s 誤差:17066,嚴重程度:16,狀態:1。
2014-12-13 08:03:35.47 spid24s SQL Server 斷言:檔案:<ghost.cpp>,行=1742 斷言失敗 = 'tcln1 != NULL'。 這個錯誤可能與時間有關。 若重執行該陳述式後錯誤依舊,請使用 DBCC CHECKDB 檢查資料庫結構完整性,或重啟伺服器以確保記憶體內的資料結構未損壞。

症狀二

您會在您的 SQL Server 錯誤日誌中收到類似以下錯誤訊息與例外的訊息:

注意

2014-12-13 12:38:30.25 spid51 使用 'dbghelp.dll' 版本 '4.0.5'
2014-12-13 12:38:30.25 spid51 ***堆疊傾印正在傳送到 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
2014-12-13 12:38:30.25 spid51 SqlDumpExceptionHandler:Process 51 產生致命異常 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Server 正在終止這個流程。
2014-12-13 12:38:30.25 spid51 * *******************************************************************************
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * 開始堆疊傾倒:
2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 51
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * 例外位址 = 00000000030D47C 模組 (sqlservr+000000000000FD47C)
2014-12-13 12:38:30.25 spid51 * 例外代碼 = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-12-13 12:38:30.25 spid51 * 存取違規發生 正在閱讀地址 FFFFFFFFFFFFFFFF
2014-12-13 12:38:30.25 spid51 * 輸入緩衝區 54 位元組 -
2014-12-13 12:38:30.25 spid51 * 執行usp_select1

2014-12-13 12:38:30.77 伺服器錯誤:17310,嚴重度:20,狀態:1。
2014-12-13 12:38:30.77 伺服器,來自 SPID 51 會話的使用者請求產生致命異常。 SQL Server 正在終止此會話。 請聯絡產品支援服務,提供日誌目錄中產生的轉儲資料。

存取違規將包含以下呼叫堆疊:

sqlservr!TaskGhostCleanup::IsHashed+0x8d
sqlservr!TaskGhostCleanup::Enqueue+0x32
sqlservr!索引行掃描器::下一頁的移動行+0x9c
sqlservr!IndexDataSetSession::GetNextRowValuesInternal+0x11cb

症狀三

在您收到前述症狀章節中提到的訊息後,您會在 SQL Server 錯誤日誌中收到以下訊息:

注意

2014-12-13 08:04:53.37 伺服器程序 0:0:0 (0x23c8) 排程器 23 上工作者0x000000002880C1A0似乎無法讓步。 串程建立時間:13062953007877。 約執行緒 CPU 使用量:核心 0 ms,使用者 0 ms。 流程利用率 0%。 系統閒置率 88%。 間隔:70013毫秒。
2014-12-13 08:04:53.37 伺服器程序 0:0:0 (0x71d8) 排程器 30 上工作者0x000000002A8D21A0似乎無法讓步。 線程建立時間:13062953007891。 約執行緒 CPU 使用量:核心 0 ms,使用者 0 ms。 流程利用率 0%。 系統閒置率 88%。 間隔:70013毫秒。
2014-12-13 08:04:53.38 伺服器 ***無法取得 spid 0 的執行緒上下文
2014-12-13 08:04:53.38 伺服器 * *******************************************************************************
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * 開始堆疊傾倒:
2014-12-13 08:04:53.38 伺服器 * 12/13/14 08:04:53 spid 29488
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * 無法交付的排程器
2014-12-13 08:04:53.38 伺服器 *
2014-12-13 08:04:53.38 伺服器 * *******************************************************************************
2014-12-13 08:04:53.38 該備份的伺服器堆疊簽名已0x0000000000000341
2014-12-13 08:04:55.43 伺服器外部傾倒處理回傳代碼 0x20000001。 外部傾印程序沒有回傳錯誤。
2014-12-13 08:04:55.43 伺服器程序 0:0:0 (0x9358) 排程器 4 上工作者0x0000000081CE41A0似乎無法讓步。 串建立時間:13062953009701。 約執行緒 CPU 使用量:核心 0 毫秒,使用者 15 毫秒。 流程利用率 0%。 系統閒置率 88%。 間隔:70011毫秒。

SQL Server 此時可能對使用者請求沒有反應。 如果是這樣,你必須重新啟動服務來修正這個狀況。

原因

此問題發生於使用者查詢嘗試使用此流程尚未完全初始化的幽靈清理佇列。

解決方式

服務包資訊

為了解決此問題,請取得 SQL Server 2014 的服務包 1。

欲了解更多關於 SQL Server 2014 服務包 1 (SP1) 的資訊,請參閱 SQL Server 2014 服務包 1 中已修復的錯誤

SQL Server 2008 SP4 的熱修正

為解決此問題,請套用知識庫 3034373:2008 SP4 SQL Server需熱修正套件

SQL Server 2008 R2 SP3 熱修正

為解決此問題,請應用知識庫 3033860:2008 R2 SP3 SQL Server提供按需熱修正套件

累積更新資訊

此功能改進是在 SQL Server 的後續累積更新中引入的。

2014 SQL Server 累積更新 6 /en-us/help/3031047

2012 SQL Server SP2 的累積更新 4 /en-us/help/3007556

2012 SQL Server SP1 累積更新 14 /en-us/help/3023636

關於 SQL Server 的累積更新

每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:

      

因應措施

若要解決此問題,請依照下列步驟執行:

  1. 設定 -T669 作為啟動參數。 此追蹤標記防止使用者查詢將請求排隊至幽靈清理程序。
  2. 設定一個 SQL Server Agent 警示,觸發 SQL Msg 3408 上的一個工作。 例如,設置以下警示:
    復原已經完成。 這只是一則資訊訊息。 不需要使用者操作。
  3. 在此工作中,執行 TSQL 腳本等待 5 到 10 分鐘,然後執行 DBCC TRACEOFF (669,-1) 指令。

此程序確保此追蹤旗標僅在 SQL Server 啟動時啟用。 使用此追蹤標誌不會影響背景幽靈清理程序的正常運作。

狀態

Microsoft 已確認這是 SQL Server 的問題,目前正調查解決方法。 本知識庫文章將隨著更多資訊更新。

參考資料

儲存引擎內部:幽靈清理深度解析
        
         提醒
        
         sp_add_alert (Transact-SQL)
        
         DBCC TRACEOFF (Transact-SQL)
        
         追蹤標誌
        
         資料庫引擎啟動選項