Microsoft は、Microsoft SQL Server 2008 Service Pack 2 (SP2) または Microsoft SQL Server 2008 R2 の修正プログラムを1つのダウンロード可能なファイルとして配布します。 修正プログラムは累積的であるため、新しいリリースごとに、以前の SQL Server 2008 SP2 または SQL Server 2008 R2 更新プログラムのリリースに含まれていたすべての修正プログラムとセキュリティ更新プログラムが含まれています。
現象
次のような状況で問題が発生します。
-
Microsoft SQL Server 2008 または Microsoft SQL Server 2008 R2 を実行しているコンピューターで、リンクサーバーを作成します。 リンクサーバーは、リモートサーバー上の OLE DB データソースを指します。
-
リンクサーバー上の一部のデータオブジェクトを使用する分散クエリを実行します。
-
リモートサーバーでいくつかの操作を実行したときに、操作によって、データオブジェクトでスキーマバージョンの更新が5つ以上発生する。 たとえば、リモートサーバー上のテーブルのインデックスを再構築して、リンクサーバー上のテーブルのスキーマバージョンを更新します。注: 次にクエリを実行する前に、操作を実行します。
-
リンクサーバー上で配布クエリをもう一度実行します。
このシナリオでは、クエリは再コンパイルされず、次のようなエラーメッセージが表示されます。
サーバー: Msg 7359、Level Level number、State state Number、行番号"リンクサーバー名" のOLE DB プロバイダー "プロバイダー名" は、コンパイル時 ("コンパイル時") と "実行時" ("実行時") のスキーマの変更を報告しました。
注:
-
プロバイダー名 は、OLE DB プロバイダーの名前のプレースホルダーです。
-
リンクされたテーブル名は、リンクサーバーで照会されるテーブルの名前のプレースホルダーです。
-
通常、次のステートメントは、スキーマのバージョンを変更します。
-
テーブルの変更
-
索引を作成する
-
索引の削除
-
DBCC REINDEX
-
原因
この問題は、クエリの再コンパイルの制限に達したために発生します。 スキーマに変更が加えられると、キャッシュ内の一部のオブジェクトが削除され、クエリで再コンパイル操作が必要になります。 ただし、スキーマバージョンを更新する変更が5件を超えると、再コンパイルに上限が適用されます。 そのため、「現象」セクションで説明されている問題が発生します。
解決方法
累積的な更新プログラムの情報
SQL Server 2008 R2
この問題の修正プログラムは、累積更新プログラム11で最初にリリースされました。SQL Server 2008 R2 用の累積的な更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2633145 SQL Server 2008 R2 の累積更新プログラムパッケージ11 注: ビルドは累積的であるため、各新しい修正プログラムには、以前の SQL Server 2008 R2 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
981356 SQL Server 2008 R2 のリリース後にリリースされた SQL Server 2008 R2 ビルド
SQL Server 2008 R2 Service Pack 1
この問題の修正プログラムは、SQL Server 2008 R2 Service Pack 1 の累積更新プログラム4で最初にリリースされました。この累積的な更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2633146 SQL Server 2008 R2 Service Pack 1 の累積更新プログラムパッケージ4注: ビルドは累積的であるため、各新しい修正プログラムには、以前の SQL Server 2008 R2 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2567616 SQL Server 2008 R2 Service Pack 1 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド
SQL Server 2008 Service Pack 3
この問題の修正プログラムは、SQL Server 2008 Service Pack 3 用の累積更新プログラム1で最初にリリースされました。この累積的な更新プログラムパッケージの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2617146 SQL Server 2008 Service Pack 3 の累積的な更新プログラムパッケージ1注: ビルドは累積的であるため、それぞれの新しい修正プログラムには、以前の SQL Server 2008 fix release に含まれていたすべての修正プログラムとセキュリティ修正プログラムが含まれています。 この修正プログラムを含む最新の修正プログラムを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2629969 SQL Server 2008 Service Pack 3 がリリースされた後にリリースされた SQL Server 2008 ビルド Microsoft SQL Server 2008 修正プログラムは、特定の SQL Server サービスパック用に作成されます。 Sql server 2008 Service pack 3 の修正プログラムは、SQL Server 2008 Service Pack 3 のインストールに適用する必要があります。 既定では、SQL Server service pack に含まれているすべての修正プログラムは、次の SQL Server service pack に含まれています。
SQL Server 2008 SP2 の累積的な更新プログラムパッケージ6
この問題の修正プログラムは、累積的な更新プログラムパッケージ6で最初にリリースされました。SQL Server 2008 SP2 用の累積更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2582285 SQL Server 2008 Service Pack 2 の累積更新プログラムパッケージ6注: ビルドは累積的であるため、新しい更新プログラムの各リリースには、以前の SQL Server 2008 SP2 更新プログラムに含まれていたすべての修正プログラムとセキュリティ更新プログラムが含まれています。 この修正プログラムを含む最新の更新プログラムのリリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2402659 SQL Server 2008 SP2 がリリースされた後にリリースされた SQL Server 2008 ビルド
回避策
この問題を回避するには、以下のいずれかの方法を使用します。
-
DBCC FREE・キャッシュ(' Plan_Handle ') ステートメントを実行します。Plan_Handleパラメーターの詳細については、次の MSDN web サイトを参照してください。
-
Sp_refreshViewの 'ViewName' ストアドプロシージャを実行します。注: このメソッドは、SQL Server 2008 SP2 の累積更新プログラムパッケージ3がインストールされている場合は動作しません。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。