Unable to lock row
Record-locking errors occur when two or more processes try to update the same Salesforce record at the same time. In most cases, MoveData handles these errors automatically and no action is needed.
Error messages#
You may see one of the following messages in the execution log:
UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record.The record you are attempting to edit, or one of its related records, is currently being modified by another user. Please try again.
For help locating these messages, see Reading and understanding error messages.
Why this happens#
Salesforce locks a record whenever a process creates, updates, or deletes it.
This lock prevents other processes from changing the same record until the first process finishes.
If a second process tries to access the locked record, Salesforce waits up to 10 seconds for the lock to release.
If the lock does not release in time, Salesforce throws an UNABLE_TO_LOCK_ROW error.
Record locking in MoveData#
MoveData processes notifications in batches. When two "similar" notifications arrive at the same time, they may reference the same Salesforce record. For example, a donation notification and a recurring gift update might both need to update the same Contact, Campaign, or Recurring Donation record. When this happens, one notification succeeds and the other hits a lock error.
How to fix it#
Success
You can usually ignore these errors. MoveData automatically retries failed notifications up to three times before marking them as Failed.
A typical sequence looks like this:
- First execution — Two related notifications process at the same time. One succeeds and one fails with a lock error.
- Second execution — MoveData retries the failed notification. The lock is no longer held, and the notification succeeds.
If a notification still shows as Failed after retries, check whether another process outside MoveData is holding a long-running lock on the same record.
Common causes of persistent lock errors#
If lock errors persist after MoveData's automatic retries, investigate these common causes:
- Concurrent updates from other tools — Other integrations, batch jobs, or manual edits may be updating the same records at the same time as MoveData.
- Parent record locking in master-detail relationships — When you update a child record in a master-detail relationship, Salesforce also locks the parent record. Multiple child updates can create contention on the parent.
- Lookup data skew — If many records reference the same parent (for example, thousands of Contacts linked to one Account), updates to any of those child records can lock the parent.
- Batch Apex jobs — Large batch jobs that update records MoveData also touches can cause overlapping locks.
- Roll-up summary field recalculation — When a child record changes, Salesforce recalculates roll-up summary fields on the parent, locking the parent record during the calculation.
Steps to reduce lock errors#
- Schedule batch jobs outside MoveData's processing windows where possible.
- Review master-detail relationships for data skew and redistribute records if needed.
- Check whether other integrations are updating the same records concurrently.