KB4039089 - FIX: 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 にパーティション テーブルがあり、変更データ Capture (CDC) またはトランザクション レプリケーションの一部であるとします。 これらのテーブルからパーティションを切り替えたり、切り替えたりします。
  • データ操作言語 (DML) 操作を実行するときにパーティション切り替え後、 EXCEPTION_ACCESS_VIOLATION が発生し、メモリ ダンプ ファイルが生成される場合があります。

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

日付/時刻 ***FilePath\FileName に送信されるスタック ダンプ
日付/時刻 SqlDumpExceptionHandler: プロセス PID によって生成された致命的な例外 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Serverはこのプロセスを終了しています。
日付/時刻 * *******************************************************************************
日付/時刻 *
日付/時刻 * BEGIN STACK DUMP:
日付/時刻 * Date/TimeSPID
日付/時刻 *
日付/時刻 *
日付/時刻 * 例外アドレス = 000007FEE9D26640 モジュール(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
Date/Time * s p _ r e p 01 00 00 0b 00 73 00 70 00 5f 00 72 00 65 00 70 00
Date/Time * 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 26 04 04 ff
日付/時刻 * ÿÿ ¥ & ff ff ff 00 00 a5 0a 00 00 00 00 00 00 04 04 8f 13 00
日付/時刻 * & & ○ 00 00 00 26 04 04 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 製品の問題であることを確認しました。

参考資料

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