仕事で役に立ったノウハウなどをつらつらと

お仕事メモ

Salesforce

Salesforceのデータ削除時のエラー対処

投稿日:

SalesforceでBulkAPIを使用してデータを削除(特に大量データの削除)の際に発生するエラーの対処方法をまとめました。

  1. 参照されているレコードは削除できない
  2. タイムアウト
  3. ロック
  4. カスケード削除による削除レコードが多い


1.参照されているレコードは削除できない

メッセージ

DELETE_FAILED: [Name1]は、次の[Object]に関連しているため、削除できません。: [Name2]

エラー内容

削除対象のレコードが別のオブジェクトから参照されているため、エラーになっている。

参照項目の「参照レコードが削除された場合の対処方法」が「参照関係に含まれる参照レコードは削除できません。」の場合に発生する。

[Name1]は削除対象レコードのName
[Object]は参照しているオブジェクト
[Name2]は参照しているレコードのName

対処方法

  • 参照されているレコードを先に削除する。
  • 参照されているレコードの参照項目をクリアする。
  • 「参照レコードが削除された場合の対処方法」をこの項目の値をクリアします。」に変更する。
    今後も同じルールで削除を行う場合は、定義を変更した方が良い。



2.タイムアウト

メッセージ

Timeout:It took longer then 10 minutes to process this batch. Trying again later.

エラー内容

処理時間が長いため、タイムアウトしている。

対処方法

外的要因の場合

外的要因でサーバの負荷が一時的に高くなっている可能性もあるので、時間を置いて再実行する。

データ量が多い場合

  • 入力ファイルそのものを分割する。
  • バッチサイズを小さくする。




3.ロック

メッセージ

UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record

エラー内容

他の処理または自身の処理(自身のバッチ間)で同じレコードをロックしている。

削除処理の中で削除対象レコードが参照しているレコードをロックすることがある。

このロックをするレコードが別の処理と重複した場合に、ロックを取得できないためエラーとなる。

対処方法

他の処理が原因の場合

他の処理の終了後に再実行する。

自身の処理が原因の場合

  • 入力ファイルをロック対象となっているオブジェクトのキーでソートする。
    同じバッチ内にロックするレコードが収まるようにすることが目的。
    同じバッチ内ではロックは取り合いにならない。
    確実な方法ではないが簡易で概ね解消する。
  • 入力ファイルをロック対象となっているオブジェクトのキーが同じレコードが1つのバッチとなるように、入力ファイルを編集する。
    手間がかかるが確実な方法。



4.カスケード削除による削除レコードが多い

メッセージ

DELETE_OPERATION_TOO_LARGE:Cascade deletting too many records: occurring when cascading to [objectname] records

エラー内容

カスケード削除によるレコード削除の対象が多いため、エラーになっている。

1つのバッチで削除する件数の上限に、カスケード削除によって削除されるレコードの件数も含まれいると思われる。

対処方法

  • バッチサイズを小さくする。
    1バッチ当たりの削除件数を減らすことで、カスケード削除による削除レコード件数も減らすことができます。
    バッチサイズを小さくしすぎると24時間あたりのバッチ実行上限:10,000に抵触する可能性があるので注意が必要です。
  • カスケード削除される対象のオブジェクトを事前に削除する。
    1つのバッチで削除するレコード数が減れば良いので、事前に削除しておけばカスケード削除が発生せずに目的のデータを削除できる。

    しかし、上記の対処を行っても数日間はゴミ箱(purgeしても同じ)に内部的には存在している扱いになるようで、同エラーが発生することがある。
    この場合は一時的にオブジェクトの参照項目をカスケード削除をしない設定にすることをおススメ。
    主従関係の場合は参照関係に変更する。



-Salesforce

Copyright© お仕事メモ , 2023 All Rights Reserved Powered by STINGER.