KB4039089 - 修正: SQL Server で sys.sp_MScdc_capture_job ストアド プロシージャを実行するとエラー EXCEPTION_ACCESS_VIOLATIONが発生する

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2017 on Windows (all editions) SQL Server 2017 on Linux (all editions) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

現象

たとえば次のようなシナリオを考えてみます。

  • Microsoft SQL Server にパーティション分割されたテーブルがあり、それらが Change Data Capture (CDC) またはトランザクション レプリケーションの一部であるとします。 これらのテーブルからパーティションを切り替えまたは切り替えます。
  • パーティション切り替え後、データ操作言語 (DML) 操作を実行すると、 EXCEPTION_ACCESS_VIOLATION が発生してメモリ ダンプ ファイルが生成されることがあります。

注

日付/時刻 ***FilePath\FileName に送信されているスタック ダンプ
日付/時刻 SqlDumpExceptionHandler: プロセス プロセス ID が致命的な例外 c0000005 EXCEPTION_ACCESS_VIOLATION を生成しました。 SQL Server はこのプロセスを終了しています。
日付/時刻 * *******************************************************************************
日付/時刻 * 
日付/時刻 * スタック ダンプの開始:
日付/時刻 * 
日付/時刻 * 
日付/時刻 *
日付/時刻 * 
日付/時刻 * 例外アドレス = 000007FEE724BD80 module(sqllang+00000000015BBD80)
日付/時刻 * 例外コード = c0000005 EXCEPTION_ACCESS_VIOLATION
日付/時刻 * アクセス違反が発生しました 読み取りアドレス 000000000000002A
日付/時刻 * 入力バッファー 70 バイト
日付/時刻 * sys.sp_MScdc_capture_job
日付/時刻 *

注

日付/時刻 ***FilePath\FileName に送信されているスタック ダンプ
日付/時刻 SqlDumpExceptionHandler: プロセス PID によって致命的な例外が生成されました c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Server はこのプロセスを終了しています。
日付/時刻 * *******************************************************************************
日付/時刻 *
日付/時刻 * スタック ダンプの開始:
日付/時刻 * Date/TimeSPID
日付/時刻 *
日付/時刻 *
日付/時刻 * 例外アドレス = 000007FEE9D26640 module(sqllang+0000000001586640)
日付/時刻 * 例外コード = c0000005 EXCEPTION_ACCESS_VIOLATION
日付/時刻 * アクセス違反が発生しました 読み取りアドレス 000000000000002A
日付/時刻 * 入力バッファー 109 バイト -
日付/時刻 * 16 00 00 00 12 00 00 00 02 00 00 00 00 00 00 00 00 00
日付/時刻 * s p _ r e p 01 00 00 00 0b 00 73 00 70 00 5f 00 72 00 65 00 70 00
日付/時刻 * l c m d s & ô 6c 00 63 00 6d 00 64 00 73 00 00 00 00 00 26 04 04 f4
日付/時刻 * & & ÿ 01 00 00 00 00 26 04 04 00 00 00 00 00 00 26 04 04 ff
日時 * ÿÿÿ ¥ & ff ff ff 00 00 a5 0a 00 00 00 00 00 26 04 04 8f 13 00
日付/時刻 * & & 00 00 00 26 04 04 00 00 00 00 00 00 26 04 04 20 a1 07
日付/時刻 * 00

  • 宛先テーブルに対して次のクエリを実行すると、非クラスター化インデックスに対して is_replicated 列の値が '1' としてマークされることがありますが、これは正しくありません。

select index_id, partition_number,* from sys.system_internals_partition_columns pc with(nolock)

JOIN sys.partitions p with(nolock)

ON p.partition_id = pc.partition_id

where p.object_id = object_id ('PartitionTable')

order by 2

解決策

この問題は、次の SQL Server の累積的な更新プログラムで修正されています。

SQL Server 2017 の累積的な更新プログラム 1

SQL Server 2016 SP1 の累積的な更新プログラム 5

SQL Server 2014 SP2 の累積的な更新プログラム 8

SQL Server の累積的な更新プログラムについて:

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

SQL Server 2017 の最新の累積的な更新プログラム

SQL Server 2016 の最新の累積的な更新プログラム

SQL Server 2014 の最新の累積的な更新プログラム

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。