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

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

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

現象

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

<タイム スタンプ> spid98 Replication-Replication Transaction-Log リーダー サブシステム: エージェント logreadername が失敗しました。 プロセスが 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。 <タイム スタンプ> spid258 エラー: 14151、重大度: 18、状態: 1。 <タイムスタンプ> spid258 Replication-Replication Transaction-Log リーダー サブシステム: エージェント logreadername に失敗しました。 プロセスが 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。

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

  • 18805/18836 LogReader がレプリケートされたコマンド <タイム スタンプ> の状態を構築できませんでした: 0、コード: 20011、テキスト: 'プロセスが '<サーバー名>' で 'sp_replcmds' を実行できませんでした。'。 <タイム スタンプ> プロセスが 'サーバー名>' で '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 constructed command from LSN {00150725:00014316:009d}.'。 <タイム スタンプ>の状態: 0、コード: 22037、テキスト: "プロセスは 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。

  • 18805/18836 LogReader がレプリケートされたコマンド <タイム スタンプ> の状態を構築できませんでした: 0、コード: 20011、テキスト: 'プロセスが '<サーバー名>' で 'sp_replcmds' を実行できませんでした。'。 <タイム スタンプ> プロセスが 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。 <タイム スタンプ> Repl エージェントの状態: 6 <タイムスタンプ> 状態: 0、コード: 18805、テキスト: "ログ リーダー エージェントは、ログ シーケンス番号 (LSN) {00033a89:0000969c:000a} からレプリケートされたコマンドを作成できませんでした。 パブリケーション データベースをバックアップし、カスタマー サポート サービスに問い合わせてください。'。 <タイム スタンプ>の状態: 0、コード: 22037、テキスト: "プロセスは 'サーバー名>' で '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 execute 'sp_replcmds' on '<Publisher name>'. プロセスで 'Publisher name>' で 'sp_replcmds' を<実行できませんでした。 Repl Agent Status: 5 Status: 2、code: 0、text: 'Timeout expired'。 パブリッシャー '<Publisher name>' からの切断 エージェントが "再試行" 状態で失敗しました。 後でエージェントを実行してみてください。

  • アサーション <タイム スタンプ>の状態: 0、コード: 20011、テキスト: 'プロセスは 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。 <タイム スタンプ> プロセスが 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。 <タイム スタンプ> の状態: 0、コード: 18773、テキスト: ""ClientPreferences"列のテキスト情報レコードが見つかりませんでした。コマンドの作成中に ID 30。 <タイム スタンプ>の状態: 0、コード: 3624、テキスト: 'システム アサーション チェックが失敗しました。 詳細については、SQL Serverエラー ログを確認してください。 通常、アサーションエラーはソフトウェアのバグまたはデータの破損によって発生します。 データベースの破損をチェックするには、DBCC CHECKDB の実行を検討してください。 セットアップ中に Microsoft にダンプを送信することに同意した場合は、ミニ ダンプが Microsoft に送信されます。 更新プログラムは、最新の Service Pack またはテクニカル サポートの QFE で Microsoft から入手できる場合があります。 '. <タイム スタンプ>の状態: 0、コード: 22037、テキスト: "プロセスは 'サーバー名>' で 'sp_replcmds' を<実行できませんでした。

トラブルシューティング

  • エラー メッセージ 1: "18805/18836 LogReader がレプリケートされたコマンドの構築に失敗しました"

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

    • コード 18836 は、オブジェクトを見つけることができるページの ID を提供します。

      注:

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

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

      dbcc Log(master, 3, 'lsn', '0x00000208:000000a0:0004', 'numrecs', 1)
      
  • エラー メッセージ 2: "18805/18836 LogReader がレプリケートされたコマンドの構築に失敗しました"

    エラー メッセージ 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 (0) に設定します。

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

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