現象
Microsoft SQL Server 2016 または 2017 には DTC_SUPPORT=PER_DB の AlwaysOn 可用性グループが少なくとも 1 つあると仮定します。 少なくとも 1 つの可用性グループ データベースが関係するデータベース間トランザクションを含む SQL Server トリガーを実行すると、アサーション エラーが発生する可能性があります。 SQL Server エラー ログには、次のアサーション失敗メッセージが報告されます。
DateTime spid20s * *******************************************************************************
DateTime spid20s * スタック ダンプの開始:
DateTime spid20s * 場所: FileName:3880
DateTime spid20s * Expression: m_state == BaseXact::XACT_PREPARED ||m_state == BaseXact::XACT_COMMITTED
DateTime spid20s * SPID: 20
DateTime spid20s エラー: 17066、重大度: 16、状態: 1。
DateTime spid20s SQL Server Assertion: file: <FileName>, line=LineNumber Failed Assertion = 'm_state == BaseXact::XACT_PREPARED || m_state == BaseXact::XACT_COMMITTED'. このエラーはタイミングに関連している可能性があります。 ステートメントを再実行してもエラーが解決しない場合は、DBCC CHECKDB を使用してデータベースの構造的整合性をチェックするか、サーバーを再起動してメモリ内データ構造が破損していないことを確認します。
DateTime spid20s エラー: 3624、重大度: 20、状態: 1。
DateTime spid20s システム アサーション チェックに失敗しました。 詳細については、SQL Server エラー ログを確認してください。 通常、アサーション失敗はソフトウェアのバグまたはデータの破損によって発生します。 データベースの破損をチェックするには、DBCC CHECKDB の実行を検討してください。 セットアップ中にダンプを Microsoft に送信することに同意した場合は、ミニ ダンプが Microsoft に送信されます。 更新プログラムは、Microsoft から最新の Service Pack で入手できるか、テクニカル サポートから提供される修正プログラムで入手できる場合があります。
また、以下のようなエラー メッセージが表示されることがあります。
DateTime サーバー エラー: 19407、重大度: 16、状態: 1。
DateTimeサーバー: 可用性グループ 'GroupName' と Windows Server フェールオーバー クラスター間のリースが期限切れになっています。 SQL Server のインスタンスと Windows Server フェールオーバー クラスターの間で接続の問題が発生しました。 可用性グループが正常にフェールオーバーしているかどうかを確認するには、Windows Server フェールオーバー クラスター内の対応する可用性グループ リソースをチェックします。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
解決策
累積的な更新プログラムの情報:
この問題は、次の SQL Server の累積的な更新プログラムで修正されています。
SQL Server の累積的な更新プログラムについて:
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
オンデマンドの修正プログラム情報:
この問題は、次の SQL Server 用のオンデマンド修正プログラムで修正されています。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。