Loading

UNABLE_TO_LOCK_ROW エラーについて ( Visualforceページ / Apex クラス実行時 )

公開日: Apr 8, 2026
説明
Visualforce ページから処理を実施した際に、以下のようなエラーが管理者宛に送付されました。

Apex script unhandled exception by user/organization: 005100000005555/00D10000000DDDD 
Visualforce ページ: /apex/VisualforcePageName

caused by: System.DmlException: Update failed. First exception on row 0 with id a011000000xxxxXXXX; first error: UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record: [] 

Class.VisualforcePageNameController.method: line 108, column 1


 
Visualforce ページや Apex クラス実行時に UNABLE_TO_LOCK_ROW エラーが発生することがあります。このエラーは、他の処理が対象レコードをロックしているために発生します。特に主従関係のレコード更新時に多発し、同じ主オブジェクトに結びつく従オブジェクトの同時更新が原因となることが多いです。エラーが発生した場合、オブジェクトの主従関係を確認し、同時処理を避けるためのオペレーションを行う必要があります。
解決策

このメッセージは、UNABLE_TO_LOCK_ROW エラーが発生している事を示しています。

また、こちらのメッセージからは以下の事が読み取れます。

エラーが発生した組織の組織ID:00D10000000DDDD
エラーが発生した処理を実行したユーザ:https://<instance>.salesforce.com/005100000005555
エラーが発生したレコード:
https://<instance>.salesforce.com/a011000000xxxxXXXX
エラーが発生したVisualforceページ:
VisualforcePageName
エラーが発生したApex Controller:
VisualforcePageNameController
エラーが発生したメソッド:
method

UNABLE_TO_LOCK_ROW エラーは、更新処理 A が更新処理を実行しようとした対象レコードが別の更新処理 B から更新処理を実行中であり、データの整合性を保つ為にロックされているために更新処理 A がロックの解放を待機する状態となり、待機時間の上限値を超過して待機してしまった際に発生するエラーとなります。

発生する要因は複数あり、以下の状況などが考えられます。


  • 主従関係にある、子レコードの更新や新規登録が行われた時。 (子コード更新時に親レコードがロックされます)
  • 以下の参照関係にある子レコードの更新や新規登録が行われた時。
    • 「参照レコードが削除された場合の対処方法」に「参照関係に含まれる参照レコードは削除できません。」が設定されている。
  • 別のトランザクション処理にて大量のデータ投入が行われている。
  • トリガにて処理に時間がかかるロジックがある。
  • 排他ロック処理を実装している ( SELECT FOR UPDATE によるロックの取得)

特にオブジェクト構造上見落とされがちな発生状況としては、主従関係を持つ主オブジェクト A、従オブジェクト B が存在し従オブジェクト B のレコードを更新した際に、主従関係を持つ主オブジェクト A のレコードがロックされるという動作に影響を受け発生する事例が挙げられます。

多数の処理が同じ主オブジェクトのレコードを持つ従オブジェクトレコードを更新すると 1 つの主オブジェクトのレコードに多重でロック処理が実行されます。

後続の更新処理は、ロックの開放を待機しますが、多重の処理が同時実行されている状況下では後続の処理程ロックの待機時間が伸び、上限値を超過する可能性が高くなります。

対象のエラーが発生しているオブジェクトについて、上記の主従関係に無いかどうか確認してください。

また、上記のような状況下にある場合には、コードの変更等で回避する方法が無いため、1 つの主オブジェクトに結び付く多数の従オブジェクトに対して、同時に処理が実行されないようレコードの状況を変更頂く等、オペレーションでの対応が必要となります。

ナレッジ記事番号

000385705

 
読み込み中
Salesforce Help | Article