Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

行をロックできない - 「レコードは現在利用できません」エラー

公開日: Mar 18, 2026
説明

レコードが更新または作成されているときには、そのレコードをロックして、別の操作によって同時にレコードが更新され、データに矛盾が生じることのないようにしています。

これらのロックは通常数秒間持続し、ロックが解除されると、他の操作は問題のレコードに対して何らかの処理を行うことができます。ただし、ロックを解除するには最大 10 秒間まで待機可能です。それ以上かかる場合はタイムアウトします。​

解決策

レコードがロックされるタイミングと時間は、実行している操作と作業中のメインレコードによって異なります。Force.com Record Locking Cheatsheet (英語) にはこれに関する詳細情報が記載されており、その内容を熟知していることが強く推奨されます。


レコードのロックを解除する一般的なシナリオ

a. メール-to-ケース

メールがメール-to-ケースによって処理されるとき、メールメッセージオブジェクトまたは関連するオブジェクト (すなわち、親取引先) のトリガは、処理を行うためにそれらのレコードをロックしようと試みます。別のプロセスがこれらのレコードのロックを保持しており、メールの処理が 10 秒以上待機する必要がある場合は、タイムアウトが発生し、このエラーが表示されます。

b. Apex トリガ / API

ToDo に After Insert Apex Trigger があり、一部の処理が行われている間、約 14 秒間、実行されると仮定します。このトリガは ToDo が作成されたときに実行されます。ToDo が作成され、取引先に関連付けられたとき、Salesforce は ToDo が作成される間に親取引先をロックします。これは ToDo の作成中に取引先は更新できないことを意味します。ロックステートメントを削減します。

シナリオ:
 

1. ユーザー A がデータローダを介して、ToDo をインポートし、それを既存の取引先レコードへ割り当てます。ToDo が Insert されたとき、Apex トリガは起動されます。
2. ユーザー A がデータローダを介して Insert を開始した 2 秒後に、ユーザ B が ToDo が関連付けられた同じ取引先レコードを手動で編集します。
3. ユーザー B が [保存] をクリックするとき、内部的には Salesforce は取引先をロックしようと試みます。しかし、取引先は既にロックされており、Salesforce は更にロックをすることができません。取引先は、ToDo の作成によって既にロックされています。


そして、2 番目のトランザクションはロックが解除されるまで待機します。ToDo は作成されるまでに約 14 秒かかるためです。ロックは 14 秒間保持されます。2 番目のトランザクション (ユーザー  B による操作) は、最大で 10 秒しか待機できないのでタイムアウトします。

このケースでは、ユーザー B の画面には、上記のうちのひとつに類似したエラーが表示されます。本番環境のデータに対して実行される場合、Apex Tests でロックが発生することもあります。​


c. Bulk API

Bulk API を介したレコードの Insert/Update は同じ親レコード上に一度に複数の Update が生じる可能性があります。なぜなら、バッチは並列に処理されるためです。例えば、同じタイミングで 2 つのバッチが処理されており、それらが同じ親レコードを指し示すレコードを含んでいる場合、バッチのひとつは 10 秒以内にロックすることができなかった場合に、他のバッチが「unable to lock row」エラーを惹き起こす可能性のある親レコードをロックしようと試みます。

これを防ぐために、次のいずれかを実施することができます:

  • バッチサイズを削減します。
  • パラレルモードの代わりにシリアルモードでレコードを処理します。バッチのこの方法は同時に処理されます。
  • パラレルモードの使用時に、異なるバッチで (同じ親の) 異なる子レコードが生じることを避けるため、親レコードに基づくメインレコードをソートします。



d. 主従関係

主従関係の主レコードが多くの子レコード (数千) を持っている場合、従レコードを編集する度に、主レコードはロックされるため、同様にこれらのエラーに直面する可能性があります。あなたが持っているより多くの従レコードはユーザーによって編集され、親レコードのロックを惹き起こす可能性が高いです。


トラブルシューティング:

1. エラーに遭遇しているユーザのデバッグログを有効にして、問題を引き起こしているトリガ / フロー / 入力規則の原因を突き止めることができます。
2. 同じオブジェクトで実行されている従属バックグラウンドジョブがないか確認してください。存在する場合は、ジョブを一時停止し、行ロックを削減するアクションを実行してください。

 

ナレッジ記事番号

000387767

 
読み込み中
Salesforce Help | Article