レプリケーション ログ リーダー エージェントが失敗した場合の SQL Server での 20011 エラー メッセージ

この記事では、SQL Server でレプリケーション ログ リーダー エージェントが失敗した後に発生する問題の解決に役立つ可能性のあるトラブルシューティング手順について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 2892635

現象

Microsoft SQL Server でレプリケーション ログ リーダー エージェントが失敗すると、SQL Server ログに次のようなエラー メッセージが表示されます。

<タイム スタンプ> spid98 Replication-Replication Transaction-Log Reader Subsystem: agent logreadername failed. プロセスで 'sp_replcmds' を '<Server name>' で実行できませんでした。 <タイムスタンプ> spid258 エラー: 14151, 重大度: 18, 状態: 1. <タイム スタンプ> spid258 Replication-Replication Transaction-Log Reader Subsystem: agent logreadername failed. プロセスで 'sp_replcmds' を '<Server name>' で実行できませんでした。

さらに、次のような 1 つ以上のエラー メッセージが表示される場合があります。

  • 18805/18836 LogReader Failed to Construct Replicated Command <Time stamp> Status: 0, code: 20011, text: 'the process could not execute 'sp_replcmds' on '<Server name>'. <タイム スタンプ> プロセスで '<Server name>' に対して 'sp_replcmds' を実行できませんでした。 <タイムスタンプ> 状態: 0、コード: 18836、テキスト: 'UpdateText の無効なテキスト情報ブロック: m_pHead->GetType() : 1, m_TextDataType: 0、m_TextOpType: 3、ti:{RowsetId 7746362867712、{TextTimeStamp 480235880448、{RowId {PageId 2680944、FileId 1}、SlotId 21 }} 、coloffset -1、textInfoFlags 0x4、textSize 177、offset 177、oldSize 0、newSize 0}'。 <タイムスタンプ> 状態: 0、コード: 18805、テキスト: 'Logreader failed to construct replicated command from LSN {00150725:00014316:009d}.'。 <タイム スタンプ> 状態: 0、コード: 22037、テキスト: '<Server name>' で 'sp_replcmds' を実行できませんでした。'

  • 18805/18836 LogReader Failed to Construct Replicated Command <Time stamp> Status: 0, code: 20011, text: 'the process could not execute 'sp_replcmds' on '<Server name>'. <タイム スタンプ> プロセスで '<Server name>' に対して 'sp_replcmds' を実行できませんでした。 <タイム スタンプ> Repl Agent Status: 6 <Time stamp> Status: 0, code: 18805, text: 'The Log Reader Agent failed to constructed command from log sequence number (LSN) {00033a89:0000969c:000a}. パブリケーション データベースをバックアップし、カスタマー サポート サービスにお問い合わせください。'。 <タイム スタンプ> 状態: 0、コード: 22037、テキスト: '<Server name>' で 'sp_replcmds' を実行できませんでした。'

  • LogReader タイムアウト エージェントが実行されています。 レプリケーション モニターを使用して、このエージェント セッションの詳細を表示します。 Repl Agent Status: 3 Publisher: {call sp_repldone ( 0x0000172a0002ac900001, 0x0000172a0002ac900001, 0, 0)} Publisher: {call sp_replcmds (500, 0)} Status: 2, code: 0, text: 'the process could not execute 'sp_replcmds' on '<Publisher name>'. プロセスで 'sp_replcmds' を '<Publisher 名>' で実行できませんでした。 Repl Agent 状態: 5 状態: 2, コード: 0, テキスト: 'タイムアウトが切れました'. パブリッシャー '<Publisher 名>' から切断すると、エージェントは "再試行" 状態で失敗しました。 後でエージェントを実行してみてください。

  • Assertion <Time stamp> Status: 0,code: 20011, text: 'the process could not execute 'sp_replcmds' on '<Server name>'. <タイム スタンプ> プロセスで '<Server name>' に対して 'sp_replcmds' を実行できませんでした。 <タイム スタンプ> 状態: 0、コード: 18773、テキスト: 'Could not locate text information records for the column "ClientPreferences", ID 30 during command construction.'. <タイム スタンプ> 状態: 0、コード: 3624、テキスト: 'システム アサーション チェックが失敗しました。 詳細については、SQL Server エラー ログを確認してください。 通常、アサーションの失敗はソフトウェアのバグまたはデータの破損が原因で発生します。 データベースが破損していないかどうかを確認するには、DBCC CHECKDB の実行を検討してください。 セットアップ中、ダンプを Microsoft に送信することに合意した場合は、ミニ ダンプが Microsoft に送信されます。 また、Microsoft から提供される最新の Service Pack や製品サポート サービスから提供される QFE に、更新プログラムが含まれている場合もあります。 '. <タイム スタンプ> 状態: 0、コード: 22037、テキスト: '<Server name>' で 'sp_replcmds' を実行できませんでした。'

トラブルシューティング

  • エラー メッセージ 1: "18805/18836 LogReader Failed to Construct Replicated Command"

    このメッセージから、ログにトランザクションを作成したオブジェクトと変更を確認できます。 これを行うには、次の情報を使用します。

    • コード 18836 では、オブジェクトを検索できるページの ID が提供されます。

      DBCC ページを使用する方法を使用して、データベース ページの内容を表示できます。

    • コード 18805 では、オブジェクトを提供できるログ シーケンス番号 (LSN) が提供されます。

      dbcc Log(master, 3, 'lsn', '0x00000208:000000a0:0004', 'numrecs', 1)
      
  • エラー メッセージ 2: "18805/18836 LogReader Failed to Construct Replicated Command"

    エラー メッセージ 1 とエラー メッセージ 2 の主な違いは、エラー 2 にステータス メッセージが含まれていないか、"textinfo" 列を指していない点です。 この既知の問題は、 Microsoft SQL Server 2008 Service Pack 3 (SP3) 用の累積的な更新プログラム パッケージ 11 で修正されています。

この問題は、バイナリ ラージ オブジェクト (BLOB) データ型の列があり、アーティクルがレプリケートのためにパラメーター化されたコマンドを使用していないテーブルでのみ発生します。 この問題を解決するには、次の手順に従ってください。

  1. アーティクルがパラメーター化されたコマンドを使用しているかどうかを確認します。 これを行うには、次のクエリを実行します。

    SELECT STATUS, NAME FROM sysarticles WHERE NAME =''
    
  2. 状態の値をバイナリ形式に変換します。 たとえば、状態値が 41 の場合、バイナリ値は101001され、右側の 5 番目のビット (状態ビットとも呼ばれます) は ON になります。 ステータス ビットが 1 の場合は、既に設定されています。 ステータス ビットが 0 の場合、設定されません。 そのため、パラメーター化されたコマンドを構成するには、 sp_changearticle を実行する必要があります。 状態ビットを変更するには、次のコマンドを実行します。

    sp_changearticle 'ConstituentRequest_ETL_Trans', 'CRProfile', 'status', 'parameters'
    
  • エラー メッセージ 3: LogReader タイムアウト

    この問題を解決するには、次の方法のいずれかを使用してください。

    • ログ リーダー エージェントの QueryTimeout パラメーターの値を大きくします。

      既定では、このパラメーターの値は 1,800 秒 (30 分) です。

    • タイムアウトを無効にするには、 QueryTimeout パラメーターの値をゼロ (0) に設定します。

    • ログ リーダー エージェントの ReadBatchSize パラメーターの値を小さくします。

エラー ログのアサーションが、これらのサポート技術情報の記事の問題と一致する場合は、適切な修正プログラムをインストールします。