KB2498796 - 修正:在 2008 SQL Server 或 2008 R2 中啟用並停用某表的衝突偵測後,更新資料表統計資料時,可能會發生存取違規SQL Server

套用到
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard

Microsoft 將 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2008 修正案作為一個可下載檔案發佈。 由於修補是累積性的,每個新版本都包含了先前 SQL Server 2008 R2 或 SQL Server 2008 修補釋版本中包含的所有熱修補與安全修補。

症狀

請考慮以下案例:

  • 你在電腦上安裝 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2008。
  • 你要設定點對點交易複製,然後在資料表上啟用衝突偵測。
  • 之後,你關閉點對點交易複製的衝突偵測。
  • 你更新表格的統計數據。

在這種情況下,更新失敗,你會收到以下錯誤訊息:

注意

訊息 0,11 級,狀態 0,0 行

當前指令發生嚴重錯誤。 如果有結果,應該被丟棄。

此外,會發生存取違規例外,並在 SQL Server 錯誤日誌資料夾中產生一個迷你傾印檔案。

原因

此問題發生是因為資料庫引擎試圖載入懸空統計資料。 當啟用 P2P 衝突偵測時,會將 MDColumnIdP2pCdId 系統欄位加入資料表的基底索引列集。 與複製相關的查詢可能會自動在系統欄位建立統計資料。 當 P2P 衝突偵測被停用時,系統欄位會從表格中移除。 然而,相關統計數據依然存在。 因此,更新統計資料會導致存取違規例外發生,因為統計資料無法加入資料表。

解決方式

累積更新資訊

SQL Server 2008 R2 Service Pack 1

                
此問題的修正最初於 SQL Server 2008 R2 Service Pack 1 的累積更新 4 中發布。 欲了解更多如何取得此累積更新套件的資訊,請點擊以下文章編號以查看 Microsoft 知識庫中的文章:

2633146 2008 R2 服務包 1 SQL Server 累積更新包 注意:由於建置是累積式,每個新修正版本都包含了前一版 2008 R2 版本中包含的所有熱修正與安全修正SQL Server。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 在 SQL Server 2008 R2 Service Pack 1 發行之後所發行的 SQL Server 2008 R2 組建 (機器翻譯)

SQL Server 2008 R2

                
此問題的修正最初於累積更新 9 中釋出。 欲了解更多如何取得 SQL Server 2008 R2 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2567713 2008 R2 累積更新包 9 SQL Server 備註 由於建置是累積性的,每個新修正版本都包含SQL Server了先前 2008 年 R2 修正釋版本中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在 SQL Server 2008 R2 發行之後所發行的 SQL Server 2008 R2 組建 (機器翻譯)

SQL Server 2008 Service Pack 2

此問題的修正最初於 SQL Server 2008 Service Pack 2 的累積更新 3 中釋出。 欲了解更多關於此累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2498535 2008 服務包 2 SQL Server累積更新包 注意:由於建置是累積式的,每個新修正版本都包含了 2008 SQL Server 修正版本中所有的熱修補與安全修補。 Microsoft 建議你考慮套用包含此熱修補的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2402659 2008 服務包 2 發布後SQL Server 2008 SQL Server版本Microsoft SQL Server 2008 熱修補程式是針對特定SQL Server服務包所製作。 您必須對安裝 SQL Server 2008 Service Pack 2 熱修補SQL Server套用。 預設情況下,SQL Server 服務包中提供的任何熱修正會包含在下一個 SQL Server 服務包中。

此問題的修正最初於 SQL Server 2008 R2 的累積更新套件 6 中釋出。 欲了解更多如何取得此累積更新套件的資訊,請點擊以下文章編號以查看 Microsoft 知識庫中的文章:

2489376 2008 年SQL Server R2 累積更新包 由於建置是累積式,每個新修正版本都包含了前一 SQL Server 2008 R2 修正釋版本中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在 SQL Server 2008 R2 發行之後所發行的 SQL Server 2008 R2 組建 (機器翻譯)

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

更多資訊

欲了解如何透過配置點對點拓撲嚮導來配置及維護點對點複製拓撲,請造訪以下 Microsoft 開發者網絡 (MSDN) 網站:

如何:配置點對點交易複製 (SQL Server Management Studio) 欲了解更多衝突偵測資訊,請造訪以下 MSDN 網站:

點對點複製中的衝突偵測 欲了解更多軟體更新術語,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

824684 描述用於描述Microsoft軟體更新的標準術語