一括挿入または BCP ステートメントを実行しようとするとアサーション エラーが発生するSQL Server
この記事は、または BCP
操作を実行しようとしたときに発生する問題をBULK INSERT
解決するのに役立ちます。
元の製品バージョン: SQL Server 2008 R2 Enterprise、SQL Server 2008 Enterprise
元の KB 番号: 2700641
現象
次のような状況で問題が発生します。
サーバー A とサーバー B は、Microsoft SQL Server 2008 または SQL Server 2008 R2 を実行しています。
サーバー A とサーバー B の間でデータベース ミラーリングを設定します。
プリンシパル データベースで
BULK INSERT
またはBCP
ステートメントを実行します。注:
既定では、 または
BCP
ステートメントをCHECK_CONSTRAINTS
実行BULK INSERT
すると、 オプションは off に設定されます。データベース ミラーリングが切断され、データベース ミラーリング セッションが SUSPENDED 状態になります。
このシナリオでは、アサーションがミラー サーバーで発生します。 そのため、ミニダンプ ファイルは、SQL Server ログ フォルダーに作成されます。 さらに、ミラー サーバーのSQL Server エラー ログに次のエラーが表示されます。
注:
この問題を解決するには、データベース ミラーリングを再初期化する必要があります。
原因
この問題は、プリンシパル データベースのトランザクション ログのロック互換性情報がミラー サーバーに転送されないために発生します。
回避策
この問題を回避するには、 オプションを BULK INSERT
使用してプリンシパル データベースで or BCP
ステートメントを CHECK_CONSTRAINTS
実行します。
注:
このオプションを CHECK_CONSTRAINTS
使用すると、パフォーマンスが低下します。 ただし、ミラー サーバーのロック アサートは発生しません。
詳細
BULK INSERT
または BCP
操作中に、子トランザクションはオプションをCHECK_CONSTRAINTS
オフにします。 この子トランザクションでは、親トランザクション ロックと互換性のあるロックが使用されます。 互換性情報は、プリンシパル データベースのトランザクション ログに格納されます。 そのため、子トランザクション ロック要求はプリンシパル データベースに対して付与されます。
ただし、この互換性情報はミラー サーバーに転送されません。 したがって、子トランザクション ロック要求は、ミラー サーバー上の親トランザクション ロックと互換性がありません。 このシナリオでは、ミラー サーバーでアサートが発生します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示