この記事では、SQL Server ミラーリング アーキテクチャを使用するときにパートナー サーバーで発生する可能性がある Microsoft SQL Server アサーション エラーについて説明します。
元の製品バージョン: SQL Server 2014、SQL Server 2012、SQL Server 2008 R2、SQL Server 2008
元の KB 番号: 2729953
症状
SQL Server ミラーリング アーキテクチャでは、パートナー (ミラー) サーバーで SQL Server アサーション チェックエラーが発生する可能性があります。 このような場合は、SQL Server エラー ログで詳細を確認してください。 ログには、次のメッセージのようなエラー メッセージが表示されます。 このエラーは、通常、ミラー ペアを再構築する必要があることを意味します。
SQL Server アサーション: ファイル: loglock.cpp、line=834 Failed Assertion = 'result == LCK_OK' です。 このエラーは、タイミングに関連している可能性があります。 ステートメントの再実行後もエラーが解決しない場合は、DBCC CHECKDB を使用してデータベースの構造の整合性を確認するか、サーバーを再起動してメモリ内のデータ構造が破損しないようにします。
エラー: 3624、重大度: 20、状態: 1。
通常、アサーションの失敗はソフトウェアのバグまたはデータの破損が原因で発生します。 データベースの破損を確認するには、 DBCC CHECKDB
の実行を検討してください。 セットアップ中に Microsoft にダンプを送信することに同意すると、ミニダンプが Microsoft に送信されます。 また、Microsoft から提供される最新の Service Pack や製品サポート サービスから提供される QFE に、更新プログラムが含まれている場合もあります。
注
この問題が発生すると、SQL Server エラー ログ フォルダーにミニダンプ ファイルが生成されます。 このファイルには、 SQLDumpnnnn.mdmp ファイル名に似た名前が付いています。
原因
この問題は、さまざまなシナリオで発生する可能性があります。 各シナリオには異なる原因と解決策があり、各シナリオで同じエラー メッセージとアサーションエラーが発生する可能性があります。
注
- エラーシグネチャは非常に具体的なようですが、実際のエラーは失敗したアサーションによって発生します。 たとえば、このエラーは、SQL Server コード内で正常な状態を検証するためのプロアクティブなチェックを行うアサーションによって発生する可能性があります。このアサーションは、プロセス全体のクラッシュを引き起こすのではなく、可能な限りクリーンに失敗することを目的としています。
- 実際の原因を簡単に特定することはできません。 通常、Microsoft カスタマー サポート サービスによって原因が決まります。 これは通常、プリンシパル データベースの完全バックアップ ファイルと、問題の時刻をカバーするトランザクション ログ バックアップを収集することによって行われます。 さらに、特定の設定で問題を再現するには、ミラーの完全なプロセス ダンプ ファイルが必要になる場合があります。
解決策
この問題を解決するには、お使いのバージョンの SQL Server の最新の修正プログラムを入手してください。 詳細については、次の表を参照してください。
原因 | ナレッジベース記事 | 最初の固定 |
---|---|---|
プライマリとミラーの間で異なるロック動作 | 2938828 修正: SQL Server 2012 または SQL Server 2014 で、データベース ミラーリングがアサートにヒットし、ミラーリング セッションが中断状態を示す | 2931693 SQL Server 2014 用の累積的な更新プログラム 1、2931078 SQL Server 2012 SP1 の累積的な更新プログラム 9 |
Check_Constraints OFF での一括挿入/BCP | SQL Server 2012 | |
暗号化キーの変更: データベース マスター キー、サーバー インスタンス マスター キー | SQL Server 2012 |
注
- 前の表の最後の列には、修正プログラムを含む最初のビルドのみが一覧表示されています。 SQL Server ビルドは累積的であるため、SQL Server 2014 SP1 などの後のビルドにはこれらの修正プログラムが含まれています。 ただし、これらのビルドは表に一覧表示されません。
- SQL Server のバージョンの最新のサービス パックを取得する方法の詳細については、「 バージョン、エディション、および更新レベルを決定する」を参照してください。 BCP/一括挿入シナリオは、SQL Server 2008 および SQL Server 2008 R2 で依然として修正されていない一般的なシナリオであり、これらのバージョンでlck_okアサーションが発生する最も可能性の高い原因です。 この問題は、SQL Server 2012 で最初に修正されました。 以前のバージョンでこれを修正しない理由は、SQL Server トランザクション ログ内部の再アーキテクチャが必要であるためです。 このような変更は、SQL Server のメジャー リリースにのみ含めることができます。