適用先
SQL Server 2008 Service Pack 3 SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

現象

Microsoft SQL Server 2008、SQL server 2012、SQL Server 2008 R2、または SQL Server 2014 で、テーブルに対してNOLOCKヒントと共に複雑な更新ステートメントを実行すると、非クラスター化インデックスが壊れることがあります。 さらに、次のエラーメッセージが SQL Server のエラーログに記録される場合があります。

<date><Time> spid # エラー: 8646、Severity:21、状態: 1。 <日付><spid # データベース '> DATABASENAME <' で、テーブル2102402659のインデックス ID 3 のインデックスエントリが見つかりません。 示されているインデックスが破損しているか、現在の更新プランで問題が発生しています。 DBCC CHECKDB または DBCC CHECKTABLE を実行します。 問題が解決されない場合は、製品サポートにお問い合わせください。 <日付><時間> spid # を使用して、 <の日付><spid # * * Dump THREAD-Spid = 0, EC = 0x0000000BD70624C0> date<time><spid # * * * Y:\MSSQL\MSSQL10. に送信されました。MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt><2 Date><Time> spid # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <Timedate><time> spid # * <date><> <><><><spid # *> date<><> spid # * cperindexmetaqs:: @ Date<Time><spid # * cperindexの場合::-----: errorabort-インデックスの破損><0日付><時刻> spid # *

注:NOLOCKヒントをステートメント内のソーステーブルに適用することができます。 ただし、ステートメント内のテーブルのターゲットとして NOLOCK ヒントを適用することはできません。

原因

この問題は、クエリによって同じ値が複数回読み取られた場合に、 NOLOCK ヒントによってクエリが誤ってテーブルの値を読み取るために発生します。

SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。