バグ: #50003826 (SQL 修正プログラム)
マイクロソフトでは、Microsoft SQL Server 2008 の修正を 1 つのダウンロード可能なファイルとして配布しています。 修正は累積的であるため、新しいリリースの修正には、以前のリリースの SQL Server 2008 の修正に含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれます。
現象
SQL Server 2008 では、一時テーブルにデータを挿入するクエリを実行します。 insert ステートメントには、同じ一時テーブルを参照するサブクエリが含まれています。 クエリを実行すると、次のようなエラー メッセージが表示される場合があります。
注
メッセージ 605、レベル 21、状態 3、行 1
データベース 2 で論理ページ (1:225) をフェッチしようとして失敗しました。 504403158513025024ではなく、割り当て単位281474980315136に属します。
クエリをもう一度実行すると、次のようなエラー メッセージが表示されます。
注
- メッセージ 824、レベル 24、状態 2、行 1
- SQL Serverが、論理整合性ベースの I/O エラーを検出しました: 不正なチェックサム (予想:0x50758180、実際:0x15658bfc)。 ファイル 'C:\Program Files\Microsoft SQL Server\MSSQL10' のオフセット 0x000000002a0000 にあるデータベース ID 2 のページ (1:336) の読み取り中に発生しました。SQL2008\MSSQL\DATA\tempdb.mdf' です。 SQL Server エラー ログまたはシステム イベント ログの追加メッセージにより詳細な情報が示される場合があります。 これは、データベースの整合性を脅かす重大なエラー状態であり、直ちに修正する必要があります。 完全なデータベース整合性チェック (DBCC CHECKDB) を完了します。 このエラーは、多くの要因によって発生する可能性があります。詳細については、SQL Server Books Online を参照してください。
場合によっては、次のようなエラー メッセージが表示されることもあります。
注
メッセージ 601、レベル 12、状態 3、手順 procedure name、行 番号
データの移動のため、NOLOCK でスキャンを続行できませんでした。
これらのエラーの原因として考えられるクエリ構造は次のとおりです。
insert #table1
select s.col1, s.col2
from #table2 s inner loop join #table1 t
on s.col3 = t.col3
解決策
この問題の修正プログラムは、累積的な更新プログラム 3 で最初にリリースされました。 SQL Server 2008用のこの累積的な更新プログラムパッケージを入手する方法の詳細についてはをクリックして以下「サポート技術情報」(Microsoft サポート技術情報)資料を参照。
960484 SQL Server 2008 用の累積的な更新プログラム パッケージ 3 注: ビルドは累積的であるため、新しくリリースされた各修正プログラムには、以前の SQL Server 2008 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
956909 SQL Server 2008 以降にリリースされた SQL Server 2008 ビルドこの累積的な更新プログラム パッケージをインストールした後は、トレース フラグ 4135 を有効にする必要があります。 これを行うには、スタートアップ パラメーター -T4135 を追加できます。 または、特定のセッションに対して dbcc traceon(4135) ステートメントを使用することもできます。
回避策
この問題を回避するには、クラスター化主キーと ID プロパティの両方を持つ列を一時テーブルに追加します。 たとえば、次のステートメントを実行して一時テーブルを変更します。
ALTER TABLE #TempTable
ADD id integer IDENTITY(1,1) CONSTRAINT id PRIMARY KEY CLUSTERED
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
追加情報
エラー メッセージ 824 または 605 が表示されても、データベースは破損しません。 また、これらのエラー メッセージは tempdb データベースからのページを参照しています。
変更されるファイル、およびこの「サポート技術情報」 (Microsoft サポート技術情報) の資料に記載されている修正プログラムが含まれる累積的な更新プログラム パッケージを適用するための必要条件の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
960484 SQL Server 2008 用の累積的な更新プログラム パッケージ 3
SQL Server 2008 R2 BPA 情報
SQL Server 2008 R2 ベスト プラクティス アナライザー (SQL Server 2008 R2 BPA) には、累積的な更新プログラムまたはこの問題に対処するためのトレース フラグが有効になっていない状況を検出するルールが用意されています。 SQL Server 2008 R2 BPA は、SQL Server 2008 と SQL Server 2008 R2 の両方をサポートしています。
BPA ツールを実行し、"データベース エンジン - tempdb エラーの修正またはトレース フラグがありません" という警告が表示された場合は、SQL Server のバージョンと、この修正プログラムを有効にするように構成されているトレース フラグをチェックする必要があります。
参考資料
| ルール ソフトウェア | ルール タイトル | ルール識別子 |
|---|---|---|
| SQL Server 2008 R2 BPA 規則 | TempDB エラーの修正またはトレース フラグがありません | RID3808 |
注: この修正プログラムを有効にするには、トレース フラグ 4135 またはトレース フラグ 4199 を有効にします。 トレース フラグ 4135 は、SQL Server 2008 用の累積的な更新プログラム パッケージ 3 で導入されました。 トレース フラグ 4135 は、SQL Server 2008 Service Pack 1、SQL Server 2008 Service Pack 2、および SQL Server 2008 R2 でも使用できます。 トレース フラグ 4199 は、SQL Server 2008 の累積的な更新プログラム パッケージ 7、SQL Server 2008 Service Pack 1 の累積的な更新プログラム パッケージ 7、および SQL Server 2008 R2 の累積的な更新プログラム パッケージ 1 で導入されました。 トレース フラグ 4199 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
974006 トレース フラグ 4199 が追加され、複数のトレース フラグの下で以前に行われた複数のクエリ オプティマイザーの変更を制御できます この問題の修正には、特定の修正プログラム ビルドと、修正を有効にするためのトレース フラグの組み合わせが必要になるため、さまざまなシナリオと、各シナリオに対して実行するべき推奨アクションを示すために、次の表を含んでいます。
最新の SQL Server ビルドの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
957826 最新の SQL Server ビルドに関する情報を入手する場所
参考資料
SQL Server 2008 のリリース以降に利用可能なビルドの一覧の詳細については、以下のサポート技術情報番号をクリックしてください。
956909 SQL Server 2008 のリリース以降にリリースされた SQL Server 2008 のビルド
SQL Server の増分サービス モデルの関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
935897 報告された問題に対する修正プログラムを提供する SQL Server チームの増分サービス モデル (ISM) について
SQL Server の更新プログラムの命名方式の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
822499 Microsoft SQL Server ソフトウェア更新プログラム パッケージの新しい命名スキーマソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明