KB2530913-修正:如果使用並存執行方案,當您在 SQL Server 2008 R2 中建立已分區的非叢集索引時,就會發生「錯誤:17066」

適用於: Microsoft SQL Server 2008 R2 Service Pack 1SQL Server 2008 R2

Microsoft 將 Microsoft SQL Server 2008 R2 發佈為一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 R2 修正程式版本中所包含的所有修復程式及所有安全性修正程式。

徵狀


當您使用並存執行方案嘗試在 Microsoft SQL Server 2008 R2 中建立已分區的非叢集索引時,會發生下列問題:
  • [SQL Server 錯誤記錄] 中記錄下列錯誤訊息:
    <日期時間> spid<n> 錯誤:17066、嚴重性:16、State: 1. <日期時間> spid<n> SQL Server Assertion: File: <sobuild. c>、line = 3392 失敗斷言 = ' CompareRow (rightPageRow、* m_pSEBindings、keyCnt、* pHobtAccess、PAGE_LEAF_LEVEL)」。 此錯誤可能是與時間有關的。 如果在重新執行語句後發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新開機伺服器以確保記憶體中資料結構未損毀。
  • 並存執行方案不會建立索引。
  • 傳送 CREATE INDEX 語句的用戶端應用程式可能會收到 SQL Server 例外狀況。
  • 用戶端與伺服器之間的連線是關閉的。
注意:
  • 並存執行方案可能會在下列情況中使用:
    • 您將 MAXDOP 查詢提示選項設定為大於 1的值。
    • 您將 [ 最大並行度 ] 選項設定為 [ 0 ],或設定為 [伺服器設定] 中大於 1 的值。
  • 這個問題不會發生在 Microsoft SQL Server 2008。

原因


之所以發生這個問題,是因為兩個或多個 SQL Server 平行線程會針對重疊的分區範圍執行索引建立。

解決方案


累積更新資訊

SQL Server 2008 R2 Service Pack 1

此問題的修正程式是在 SQL Server 2008 R2 Service Pack 1 的累積更新1中第一次發行。如需如何取得此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2544793 SQL Server 2008 R2 Service Pack 1 的累積更新套件1
注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2567616 在發行 SQL Server 2008 R2 Service Pack 1 之後發行的 SQL Server 2008 R2 組建

SQL Server 2008 R2

此問題的修正程式是在累積更新8中第一次發行。如需有關如何取得 SQL Server 2008 R2 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2534352 SQL Server 2008 R2 的累積更新套件8
注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
981356 在發行 SQL Server 2008 R2 之後發行的 SQL Server 2008 R2 組建

因應措施


若要解決這個問題,請使用下列其中一個方法:
  • 在建立索引前,請先在伺服器設定中將 [ 最大並行度 ] 選項設定為 1
  • 當您建立索引時,請將 MAXDOP 查詢提示選項設定為 1

狀態


Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。

其他相關資訊


如需 建立索引 語句的詳細資訊,請造訪下列 MSDN 網站: 如需 建立分區函數 語句的詳細資訊,請造訪下列 MSDN 網站: