
【第628回】 Data 360:Contact Point Email と Individual DMO 間で発生するエラーの原因と解消方法
私の Data 360 環境では、長い間、Contact Point Email DMO と Individual DMO が繰り返し ERROR 状態になる問題が発生していました。
一時的にエラーを解消することはできたものの、数分後には再び ERROR 状態に戻ってしまうため、根本的な解決には至っていませんでした。
今回、Salesforce サポートに調査していただいた結果、原因が判明し、修正方法も確認できましたので紹介します。
① 発生していた問題
Contact Point Email DMO と Individual DMO の両方で下記のようなエラーが発生し、自動的には正常にデータが反映されない状態が続いていました。


この問題には、少し特殊な動作がありました。
エラーが発生している状態でも、DMO の Edit 画面を開き、何も変更せずに保存すると、一時的に Ready 状態へ戻ります。
その間に、処理が滞っていた Individual DMO 向けのレコードも反映され、正常に利用できる状態になります。
しかし、約 5 分が経過すると、再び ERROR 状態に戻ってしまいます。
つまり、手動で Ready 状態に戻すことで一時的にデータを反映することはできるものの、恒久的な解決にはなりません。
さすがに毎日この操作を繰り返すわけにはいかないため、Salesforce サポートに原因を調査していただいたわけです。
② エラーの原因はリレーションシップの重複
調査の結果、原因は Contact Point Email DMO と Individual DMO の間に、同一のリレーションシップが 2 つ登録されていたことでした。
具体的には、以下のリレーションシップです。
Contact Point Email:ssot__PartyId
Individual:ssot__Id
この 2 つの項目を結ぶ同一のリレーションシップが、どちらも ACTIVE(有効) の状態で登録されていました。

本来、この関係を表すリレーションシップは 1 つでよいのですが、私の環境では同じ設定が重複して存在していました。
そして、この重複が DMO のエラーにつながっていたようです。なお、同一のリレーションシップが 2 つ登録されてしまった原因は不明です。
③ なぜリレーションシップの重複でエラーになるのか
Salesforce サポートからの説明によると、今回の環境では、Data 360 の同期処理時に以下の動作が発生していました。
Data 360 が Contact Point Email と Individual の間に、重複したリレーションシップが存在することを検出する。
同期処理の際に、重複しているリレーションシップの一方を非アクティブ化しようとする。
しかし、そのリレーションシップは Match and Reconciliation(照合と調整) で利用されているため、無効化できない。
その結果、リレーションシップの更新処理がエラーになる。
5 回の再試行(約 3 分間)を経て、Individual DMO と Contact Point Email DMO が ERROR 状態へ遷移する。
つまり、重複したリレーションシップを解消しようとしても、その一方が別の機能で使用されているため変更できず、結果として DMO 自体が ERROR 状態になっていたということです。
これで、手動で Ready 状態に戻しても、しばらくすると再び ERROR 状態になる理由が分かりました。
④ 重複したリレーションシップを修正する
原因が判明したため、Salesforce サポートから案内された方法で、重複したリレーションシップを修正します。
ここで注意したいのは、DMO のリレーションシップ画面からは、今回必要な修正ができなかったという点です。そのため、Data Lake Object(DLO)の Data Mapping 画面から操作します。
手順 1:Contact_Home DLO を開く
Data 360 の DLO 一覧から、今回のマッピング元となっている Contact_Home を開きます。
手順 2:Data Mapping を開く
DLO の詳細画面にある Data Mapping セクションから Review をクリックします。
手順 3:Edit Relationship を開く
マッピング画面の右側に表示されている Contact Point Email DMO から、Edit Relationship アイコンをクリックします。

手順 4:リレーションシップの編集画面を開く
以下の通り、リレーションシップが 2 つ登録されていることを確認します。
Contact Point Email | Party
Individual | Individual Id
表示された画面で Edit をクリックします。

手順 5:一方のリレーションシップを無効化する
重複した 2 つのリレーションシップのうち、一方を非アクティブに変更し、もう一方は ACTIVE のまま残します。
変更後、設定を保存します。

ただし、どちらのリレーションシップを無効化するかには注意が必要です。
無効化しようとしたリレーションシップが Match and Reconciliation で使用されている場合、保存時に以下のエラーが発生します。
Unable to delete the relationship as it is being used in Match and Reconciliation.
この場合は、いったん操作をキャンセルし、もう一方のリレーションシップを無効化してください。
なお、以下のような別のエラーが表示される場合もあります。
Unable to delete the relationship as it is being used in Segmentation/Activation/Shortcut.

これは、対象のリレーションシップが Segment、Activation、Shortcut などで利用されていることを示すメッセージです。
このエラーが表示された場合は、無理に変更を続けず、作業を中断して Salesforce サポートに確認して指示を受けてください。
私の場合は、すべての Activation を削除したことで解消しました。Activation を解除するということはそれに関連するフローなども削除する必要がありますので、注意が必要です。
重要:上記の書き方ですと、リレーションシップのどちらかが必ず削除できてめでたしめでたしになるように見えますが、私の場合は 両方とも Unable to delete the relationship as it is being used in Match and Reconciliation. のエラーが発生してしまい、リレーションシップを一切削除ができませんでした。そこで、最終手段で Salesforce サポートによる強制削除を行っていただきました。これは最終手段として覚えておいてください。
⑤ 修正後の確認
重複したリレーションシップを修正したら、以下を確認します。
Contact Point Email DMO と Individual DMO が Ready 状態になっていること。
データが正常に DMO へ反映されること。
5 分程度が経過しても再び ERROR 状態に戻らないこと。
Contact Point Email と Individual の間で、必要なリレーションシップが維持されていること。
今回の問題では、手動で Ready 状態に戻しても約 5 分後にエラーが再発していたため、修正直後だけではなく、一定時間経過後にも状態を確認することが重要です。
いかがでしたでしょうか。
今回のエラーは、Contact Point Email DMO と Individual DMO の間に、同じリレーションシップが重複して登録されていたことが原因でした。
特に厄介だったのは、手動で Ready 状態へ戻せるため、一見すると問題が解消したように見えることです。
しかし、同期処理が再び実行されると、重複したリレーションシップを解消しようとしてエラーが発生し、DMO が ERROR 状態に戻っていました。
今回のように、
Contact Point Email DMO と Individual DMO が繰り返し ERROR 状態になる。
Edit から保存すると一時的に Ready 状態へ戻る。
数分後に再び ERROR 状態になる。
という現象が発生している場合は、Contact Point Email と Individual の間に重複したリレーションシップが存在しないか確認してみる価値があります。
ただし、リレーションシップは Identity Resolution や Segment、Activation などでも利用されるため、既存の関係を不用意に削除・無効化しないよう注意してください。
今回は Salesforce サポートに原因と修正方法を確認できましたので、同様の問題が発生した際の参考になればと思います。
今回は以上です。