FIX: 您可能會收到存取違規錯誤訊息,當您在 SQL Server 2005 中執行平行執行計劃

Extended support for SQL Server 2005 ended on April 12, 2016

If you are still running SQL Server 2005, you will no longer receive security updates and technical support. We recommend upgrading to SQL Server 2014 and Azure SQL Database to achieve breakthrough performance, maintain security and compliance, and optimize your data platform infrastructure. Learn more about the options for upgrading from SQL Server 2005 to a supported version here.

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:912885
本文已封存。本文係以「現狀」提供且不會再更新。
Bug #: 420246 (SQLBUDT)
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2005 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。
結論
本文將告訴您下列關於此 Hotfix 版本:
  • Hotfix 套件所修正的問題
  • 安裝 Hotfix 套件的先決條件
  • 是否您必須重新啟動電腦安裝 Hotfix 套件之後
  • 是否 Hotfix 套件就會取代任何其他 Hotfix 套件
  • 您必須在是否做任何登錄變更
  • 包含在 Hotfix 套件中的檔案
徵狀
在 Microsoft SQL Server 2005 中可能會收到存取違規錯誤訊息,當下列情況成立時:
  • 您建立之 IGNORE_DUP_KEY 選項用於資料表的索引。
  • 您執行插入新的資料列到此索引的 INSERT 陳述式。
  • INSERT 陳述式計劃是平行的。
  • 藉由使用參數提供一個 IGNORE_DUP_KEY 選項的索引鍵資料行值。
此外,您可能會收到類似下列的錯誤訊息:
目前的命令,將會發生伺服器錯誤。 結果如果有任何,應該會被捨棄。
解決方案

Hotfix 資訊

Microsoft 提供支援的 Hotfix。不過,此 Hotfix 旨在修正本文中所述隨問題。只會發生此特定問題的系統套用此 Hotfix。這個 Hotfix 可能會接受額外的測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個包含此 Hotfix 的軟體更新。

如果此 Hotfix 可供下載,您可在本知識庫文件的頂端找到「 可用的 Hotfix 下載 」區段。如果本節 Does Not Appear 請連絡[ Microsoft 客戶服務 ] 和 [ 支援 ] 以取得此 Hotfix。

附註如果發生其他問題,或如果需要任何疑難排解,您可能必須建立個別的服務要求。和此 Hotfix 無關的額外支援問題適用一般的支援費用。如需 Microsoft 客戶服務支援部門電話號碼的完整清單或要建立個別的服務要求,請造訪下列 Microsoft 網站:附註「 下載 Hotfix 」 表單會顯示此 Hotfix 會出現,以供使用的語言。如果您沒有看到您的語言,是因為此 Hotfix 是不適用您的語言。

必要條件

這個 Hotfix 沒有先決條件。

重新啟動資訊

您沒有套用此 Hotfix 之後重新啟動電腦。

登錄資訊

您沒有變更登錄。

檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 並未包含必須將產品完整更新至最新版組建的所有檔案。

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間 中項目控制台中的 [時區] 索引標籤]。
為 x x86 型系統的 SQL Server 2005
檔案名稱檔案版本檔案大小日期時間平台
Msvcp80.dll8.0.50727.42548,8642005 年十月 14 日06: 26x86
Msvcr80.dll8.0.50727.42626,6882005 年十月 14 日06: 26x86
Sqldiscoveryapi.dll2005.90.1518.0527,0642006 年一月 21 日00: 11x86
SQL Server 2005 x 64 版本
檔案名稱檔案版本檔案大小日期時間平台
Msvcp80.dll8.0.50727.421,097,7282005 年十月 14 日18: 46x64
Msvcr80.dll8.0.50727.42822,7842005 年十月 14 日18: 46x64
Sqldiscoveryapi.dll2005.90.1518.0745,6882006 年一月 21 日04: 14x64
SQL Server 2005 的 Itanium 系統
檔案名稱檔案版本檔案大小日期時間平台
Msvcp80.dll8.0.50727.421,385,4722005 年十月 14 日18: 35IA 64
Msvcr80.dll8.0.50727.421,484,8002005 年十月 14 日18: 35IA 64
Sqldiscoveryapi.dll2005.90.1518.01,924,3122006 年一月 21 日03: 30IA 64
其他可行方案
如果要解決這個問題,請依照下列步驟執行:
  1. 判斷有問題的 INSERT 陳述式會造成存取違規。
  2. 強迫查詢最佳化器產生序列計劃有問題的 INSERT 陳述式。因此,陳述式在一個執行緒上執行。
附註如果您不能判斷有問題的 INSERT 陳述式會造成存取違規,您可以使用如果要解決這個問題的方法 3 中所述的方法。

如果要判斷有問題的 INSERT 陳述式會造成存取違規,請依照下列步驟執行:
  1. SQL Server 錯誤記錄檔中找出存取違規錯誤訊息]。
  2. 存取違規錯誤訊息頂端附近找出輸入的緩衝區資訊。
  3. 找出後面輸入的緩衝區資訊的批次資訊。

    附註批次包含有問題的 INSERT 陳述式會造成存取違規。
  4. 如果批次中包含只有一個 INSERT 陳述式這個陳述式是確實有問題的 INSERT 陳述式。如果批次中包含多個 INSERT 陳述式執行以下操作,以判斷有問題的 INSERT 陳述式:
    1. 在 SQL Server 分析工具中建立對 SQL Server 2005 的執行個體的追蹤。
    2. 在 [錯誤和警告 事件類別目錄,選取 注意事項 事件類別及 例外狀況 事件類別。

      附註您可以使用這些事件類別來判斷最後一個陳述式開始執行之前發生存取違規。

      如果批次包含只 Transact-SQL 陳述式,選取下列額外的事件類別 TSQL 事件分類下:
      • SQL:BatchStarting
      • SQL:BatchCompleted
      • SQL:StmtStarting
      • SQL:StmtCompleted
      如果批次包含預存程序發生存取違規,選取 預存程序 事件分類下下列的其他事件類別:
      • SP: 開始
      • SP: 已完成
      • SP:StmtStarting
      • SP:StmtCompleted
    3. 從用戶端應用程式執行相同的批次。

      您執行這個步驟重現存取違規。然後,您可以判斷有問題的 INSERT 陳述式。您在執行批次時確定正在執行追蹤。

      如果用戶端應用程式不是 SQL Server 管理 Studio,您就可以在 SQL Server 管理 Studio,也以手動方式執行相同的批次。但是,您可能不取得相同的執行計劃為原始的執行計劃出造成問題。如果 SQL Server 2005 recompiles 批次中有問題的 INSERT 陳述式,藉由使用不同的執行計劃或使用不同的參數,就會發生這個問題。
    4. 停止追蹤,然後再分析追蹤結果以判斷造成問題的 INSERT 陳述式。若要判斷有問題的 INSERT 陳述式,判定的 SPID,發生存取違規和,中斷用戶端應用程式。然後上 [SPID, 發現 INSERT 陳述式符合下列需求:
      • INSERT 陳述式會啟動。
      • 相同的 INSERT 陳述式不會完成。
若要強制查詢最佳化器來產生有問題的 INSERT 陳述式序列計劃,使用下列方法之一。

方法 1

附註如果您可以存取有問題的 INSERT 陳述式,請使用這個方法。

選項 (MAXDOP 1) 運算式新增到有問題的 INSERT 陳述式。下列是新的 INSERT 陳述式的範例。
INSERT INTO MyTable (Col1, Col2)SELECT Col1, Col2 FROM OtherTableOPTION (MAXDOP 1) 
如需有關 MAXDOP 查詢提示的詳細資訊,請參閱下列 Microsoft 開發 o 人 h 員 û 工 u 具 ã 網路 (MSDN) 網站上的使用 MAXDOP 一節:

方法 2

附註如果您不能存取有問題的 INSERT 陳述式,請使用這個方法。 比方就說有問題的 INSERT 陳述式是從用戶端應用程式。但是,您不能重新設定用戶端應用程式,或您不能重新編譯用戶端應用程式新增 OPTION (MAXDOP 1) 運算式。或有問題的 INSERT 陳述式正在預存程序。不過,已加密預存程序。您無法變更預存程序中的陳述式。

使用 sp_create_plan_guide 預存程序,對有問題的 INSERT 陳述式。藉由執行此動作您強制 OPTION (MAXDOP 1) 運算式,可能會發生問題的 INSERT 陳述式上。以下是如何使用 sp_create_plan_guide 預存程序的範例。
sp_create_plan_guide @name = N'planguide_for_MyFailingProc', -- Arbitrary name@stmt = N'INSERT INTO MyOneFailingStatementTable VALUES (@a,@b,@c)', -- The problematic INSERT statement@type = N'OBJECT', @module_or_batch = N'dbo.MyFailingProc', -- The name of the stored procedure that contains the problematic INSERT statement@params = NULL, @hints = N'OPTION (MAXDOP 1)'-- Query hint to prevent parallelism
如需有關 sp_create_plan_guide 預存程序的詳細資訊,請造訪下列 MSDN 網站:

方法 3

附註如果其中一種下列情況成立時,則為 True,就使用這種方法:
  • 動態產生有問題的 INSERT 陳述式。
  • 您無法判斷 INSERT 陳述式會造成存取違規。
重要此方法可以讓一個執行緒上執行的 SQL Server 2005 的執行個體上的所有查詢。我們不建議使用這個方法。這個方法可能會造成效能問題上其他執行個體執行的查詢。

執行下列的 Transact-SQL 陳述式。
sp_configure 'show advanced options', 1;GORECONFIGURE WITH OVERRIDE;GOsp_configure 'max degree of parallelism', 1;GORECONFIGURE WITH OVERRIDE;GO
如需有關 [最大平行度] 選項的詳細資訊,請造訪下列 MSDN 網站:
狀況說明
Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。
其他相關資訊
如 SQL Server 更新命名的結構描述的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
822499Microsoft SQL Server 軟體更新套件的新命名結構描述
如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

內容

文章識別碼:912885 - 最後檢閱時間:01/17/2015 12:58:15 - 修訂: 3.5

Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium-based Systems Community Technology Preview

  • kbnosurvey kbarchive kbmt kbautohotfix kbsql2005engine kbsql2005presp1fix kbhotfixserver kbfix kbbug kbsqlserv2005fix kbqfe kbpubtypekc KB912885 KbMtzh
意見反應