インスタンスデータレプリケーション (IDR) FAQ<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: block; max-width: ; width: auto; height: auto; } } 内容: IDR はプラットフォーム (無料プラグイン) の一部ですか?IDR を使用して、あるインスタンスから別のインスタンスにデータを一度コピーできますか。プロデューサーとコンシューマーが同じビルド上にある必要がありますか?データ同期の遅延があります。プロデューサーを更新すると、コンシューマーレコードの更新に時間がかかります。心配すべきでしょうか?IDR は親子テーブル階層をどのように処理しますか?ビジネスルールや ACL などの非 IDR ルールが原因で更新できないコンシューマー側のレコードは、IDR でどのように処理されますか?データがコンシューマーにレプリケートされるときに、プロデューサーからの元の [sys_created*] と更新された [sys_updated*] の値は保持されますか?ターゲットテーブル/列がコンシューマーインスタンスに存在する必要がありますか?トラブルシューティングの際には、コンシューマーインスタンスで受信した生データにアクセスする必要があります。これは可能ですか?コンシューマーインスタンスのフィールドが更新されていません。エラーや警告はありません。この問題の原因は何ですか?1 つのシードアクションで実行できるレコード数に制限はありますか? 1.IDR はプラットフォーム (無料プラグイン) の一部ですか? IDR はライセンスが必要な有料製品です。 2.IDR を使用して、あるインスタンスから別のインスタンスにデータを一度コピーできますか。 はい、これは IDR 内の「シード」機能です。この 公式ドキュメント の「IDR の制限と IDR を使用しない場合」セクションを確認して、あるインスタンスから別のインスタンスにデータをコピーするこの方法が適切かどうかを確認してください。 あるインスタンスから別のインスタンスにデータをコピーするためのもう 1 つのオプションは、インポートセットです。詳細については、インポートセット 公式ドキュメント を参照してください。 3.プロデューサーとコンシューマーが同じビルド上にある必要がありますか? プロデューサーとコンシューマーが同じバージョンである必要はありませんが、強くお勧めします。たとえば、一部の機能が機能するには、プロデューサーとコンシューマーが同じビルドで実行されている必要があります。例えば: カスタム結合機能をサポートするには、コンシューマーとプロデューサーの両方が Tokyo リリース以降を実行している必要があります。公式ドキュメント。同時ジョブ実行をサポートするには、コンシューマーとプロデューサーの両方が Tokyo リリース以降を実行している必要があります。公式ドキュメント。 4.データ同期の遅延があります。プロデューサーを更新すると、コンシューマーレコードの更新に時間がかかります。心配すべきでしょうか? まず、あなたの期待が正しいかどうかを判断します。コンシューマーレコードは、プロデューサーレコードが更新されてから 30 秒から 1 分後に更新されることを想定しています。遅延がこの時間付近にある場合は、問題はなく、遅延が予想されます。 遅延が 1 分を超える場合は、遅延が発生する可能性があります。シードが行われている場合は、この遅延も予想される場合があることに注意してください。シードが完了するとすぐに遅延が通常に戻ります。 5.IDR は親子テーブル階層をどのように処理しますか? IDR は高度に構成可能です。つまり、複製する内容はユーザーが非常に明示的に指定する必要があります。特定のテーブルを複製する場合は、レプリケーションセットの一部としてそのテーブルのレプリケーションエントリが必要です。ServiceNow 内では、データは階層のあるテーブルに編成されます。ユーザーは階層のどの部分でレプリケートするかを明示する必要があります。 たとえば、cmdb_ci_computer (cmdb_ci_hardware の子) のすべてのデータをレプリケートする場合は、cmdb_ci_computerテーブルのレプリケーションエントリを作成する必要があります。 一般に、子テーブルは親テーブルから列を継承します。つまり、子テーブルには列は存在しますが、親テーブルには存在しません。この例では、ユーザーがcmdb_ci_hardwareテーブルをレプリケートすることにした場合、その子テーブルであるcmdb_ci_computerの完全なデータはレプリケートされません。ただし、これは有効なユースケースであり、ユーザーがcmdb_ci_hardwareテーブルからすべてのデータを複製したいが、特に子テーブルのデータには興味がない場合があります。このため、レプリケートされたテーブルが明示的に定義されていることが重要です。 この特異性のため、レプリケートするテーブルを選択することで、データをレプリケートする場所が IDR に明示的に指示されます。レプリケーションエントリで示されるテーブルは、IDR がデータの複製を試みる場所を定義します。ユーザーがレプリケーション用にcmdb_ci_hardwareテーブルを選択すると、cmdb_ci_hardwareテーブルにレプリケートされます。ユーザーがフィルター (レプリケーションエントリ:cmdb_ci_hardware、フィルター:クラス = コンピューターなど) を指定した場合でも、子テーブル (cmdb_ci_computer) ではなく、cmdb_ci_hardwareテーブルからデータが複製されます。これは、IDR が 2 つのインスタンス間でデータの特定のサブセットの同期を維持するという主な目的で使用される場合に、非常に理にかなっています。必要とされる特異性は、使用の鍵となります IDR を使用して膨大な数の CMDB データを移行する場合、各子テーブルにレプリケーションエントリが必要になり、データが目的の場所に確実に移動するようにするため、これは当然のことながら不便です。しかし、IDRはこの目的のために設計されていません 詳細については、 公式ドキュメント を参照してください。 6.ビジネスルールや ACL などの非 IDR ルールが原因で更新できないコンシューマー側のレコードは、IDR でどのように処理されますか? ビジネスルールや ACL などの非 IDR の適用により、コンシューマーインスタンスで INSERT/UPDATE を実行できない場合があります。これが発生すると、ログ [syslog] エラーレコードが作成され、次のメッセージが表示されます。 Error while inserting payload into consumer {"table_name": ... <complete payload here> ... fLabelParameters":{}}: com.snc.db.data_replicate.replicator.DataReplicationLoader$DataReplicationLoaderException: Error loading UPDATE: com.snc.db.data_replicate.replicator.DataReplicationLoader.updateOrThrow(DataReplicationLoader.java:221) 7.データがコンシューマーにレプリケートされるときに、プロデューサーからの元の [sys_created*] と更新された [sys_updated*] の値は保持されますか? レプリケーションエントリには、元の値を保持するか、プロデューサーの値に置き換えるかを顧客が決定するチェックボックスがあります。 8.ターゲットテーブル/列がコンシューマーインスタンスに存在する必要がありますか? 技術的には、コンシューマーインスタンスにこれらのテーブルは必要ありません。コンシューマーインスタンスにこれらのテーブル/列がない場合は、既存のテーブル/列に変換するために、コンシューマーインスタンスで変換をセットアップする必要があります。 9.トラブルシューティングの際には、コンシューマーインスタンスで受信した生データにアクセスする必要があります。これは可能ですか? 要。デバッグシステムプロパティ idr.debug=true および glide.data_replicate.debug=true を有効にして、各レコードの生の XML を強制的に localhost ログに出力します。 インスタンスに複数のノードがある場合は、この要求を処理するノードの localhost ログを取得する必要があります。したがって、最初にトランザクションテーブルに移動して、要求を処理したトランザクションを見つける必要があります (シード要求の場合、このジョブは「JOB: IDRSeedingConsumerJob」などです)。トランザクションレコードの [システム] フィールドには、どのノードが要求を処理したかがわかります。 「DEBUG: ReplicationPayloadDeserializer」行には、プロデューサーから受信した正確なコンテンツが含まれています。 「DEBUG: KeyValueEntryTransformer」行には、コンシューマーのターゲットテーブルにプッシュ/変換されたコンテンツが含まれています。 このデータは、IDR 更新に関連する MySQL binlogs の INSERT/UPDATE アクションを介して取得することもできます。 10.コンシューマーインスタンスのフィールドが更新されていません。エラーや警告はありません。この問題の原因は何ですか? レプリケーションエントリが同期していない可能性があります。これを修正するには、コンシューマーインスタンスのコンシューマーレプリケーションセットで [レプリケーションエントリを同期 (Synchronize Replication Entries)] 関連リンクを押します。 11.1 つのシードアクションで実行できるレコード数に制限はありますか? はい、シード制限はレプリケーションセット当たり 300 万レコードです。300 万件を超えるレコードをシードする必要がある場合は、データをバッチに分割します。 .