So beheben Sie UNABLE_TO_LOCK_ROW in Salesforce-Deployments
Ein Datensatz, den das Deployment aktualisieren muss, ist durch eine andere gleichzeitig laufende Transaktion gesperrt.
Tritt auf bei: Laufzeit-DML, eine Timing-Kollision statt eines Metadaten- oder DatenproblemsWas das bedeutet
UNABLE_TO_LOCK_ROW bedeutet, dass Salesforce keine Sperre für einen Datensatz erlangen konnte, weil eine andere Transaktion, ein Batch-Job, ein geplanter Flow oder ein gleichzeitiger Apex-Test, ihn bereits aktualisierte. Dies ist ein Timing-Problem, kein Metadatenproblem: Das Deployment oder seine Tests sind korrekt, kollidierten aber mit etwas anderem, das in der Org lief.
Es ist besonders häufig bei Master-Detail-Beziehungen, da die Aktualisierung eines beliebigen Child-Datensatzes eine Sperre auf den Parent für die Neuberechnung der Roll-up-Summary erlangt, sodass zwei Child-Inserts, die gleichzeitig denselben Parent aktualisieren wollen, um diese Sperre konkurrieren.
Häufige Ursachen
Die Lösung
- Deployment erneut versuchenZeilensperren sind vorübergehend. Ein erneuter Lauf desselben Deployments gelingt oft, sobald die konkurrierende Transaktion abgeschlossen ist.
- Während eines Zeitfensters mit geringer Aktivität deployenPlanen Sie Produktions-Deployments außerhalb der Geschäftszeiten oder pausieren Sie zunächst kollidierende geplante Jobs.
- Konkurrenz um gemeinsame Datensätze in Tests vermeidenStrukturieren Sie Apex-Tests so um, dass nicht alle innerhalb derselben Transaktion denselben Singleton-Einstellungsdatensatz aktualisieren.
for (Account parent : [SELECT Id FROM Account WHERE Id IN :parentIds FOR UPDATE]) { // lock parents explicitly and predictably before child DML }
Wie Serpent das verhindert
Serpent AI plant Deployments so, dass bekannte kollidierende Jobs vermieden werden, und eine gesperrte Zeile erscheint als Ein-Klick-Wiederholung derselben Aufgabe statt als fehlgeschlagener Release. Siehe die Bibliothek der Salesforce-Deployment-Fehler.

Prävention
Verwandte Fehler
UNABLE_TO_LOCK_ROW, erklärt
Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.
In unter 15 Minuten eingerichtet. Keine DevOps-Einstellung nötig.
