Verwijderen lock via SQL script

Verwijderen lock via SQL script
Verwijderen lock via SQL script

Gelockte objecten ontstaan dus wanneer een ontwikkelaar, consultant of systeemproces een object opent in de Object Designer, een compilatie uitvoert of een bewerking start die een lock plaatst. In een productieomgeving gebeurt dit vaak onbewust. Tijdens een upgrade is dat dus desastreus: de upgrade‑tooling kan objecten niet aanpassen, converteren of verwijderen zolang ze gelockt zijn. Deze blog post beschrijft dus het verwijderen van een lock via een SQL script.

Wanneer je een upgrade uitvoert van een Dynamics NAV‑database of een Dynamics 365 Business Central‑database die nog draait op C/AL‑objecten, verwacht je dus dat de upgrade soepel verloopt. Maar wie regelmatig met NAV‑databases werkt, weet dat dit lang niet altijd vanzelfsprekend is. Eén van de meest frustrerende oorzaken van een mislukte upgrade is dus het bestaan van gelockte objecten in de database. Gelukkig is er dus een SQL script die het verwijderen van een lock beschrijft.

Daarom gebruiken ervaren NAV‑specialisten dus altijd twee eenvoudige maar krachtige SQL‑scripts om gelockte objecten op te sporen én te ontgrendelen voordat de upgrade start.

Deze blog legt dus uit:

  • Waarom gelockte objecten ontstaan
  • Hoe ze een upgrade blokkeren
  • Wat de SELECT‑query doet
  • Wat de UPDATE‑query doet
  • Waarom deze scripts veilig zijn
  • Hoe je ze inzet in een upgrade‑workflow
  • Best practices voor NAV/BC‑upgrades

Wat zijn gelockte objecten in NAV/Business Central?

Dynamics NAV (en de vroege versies van Business Central) gebruiken dus een klassieke C/AL‑objectenstructuur. Objecten zoals tables, pages, reports en codeunits worden opgeslagen in de tabel dbo.Object. Wanneer een ontwikkelaar een object opent in de Object Designer, plaatst NAV dus een lock op dat object.

Dat lock heeft dus een doel: het voorkomt dat twee mensen tegelijk hetzelfde object wijzigen. Maar tijdens een upgrade is dat lock een probleem. De upgrade‑tooling moet namelijk:

  • objecten converteren
  • metadata herschrijven
  • objecten hercompileren
  • objecten verwijderen of vervangen

Als één object gelockt is, kan de hele upgrade dus stoppen.

Daarom is het cruciaal om vooraf te controleren of er gelockte objecten zijn.

Het eerste script: gelockte objecten detecteren

De eerste query is dus een SELECT‑statement dat alle gelockte objecten toont. Het filter [Locked] = 1 betekent dat het object actief gelockt is.

De query toont:

  • Type (Table, Page, Report, Codeunit, enz.)
  • ID
  • Name
  • Locked (0 of 1)
  • Locked By (de gebruiker die het lock heeft geplaatst)
  • Datum en tijd van het lock

Dit script is ideaal om dus snel inzicht te krijgen in wie of wat de lock veroorzaakt. Vaak zie je dat een ontwikkelaar een object open heeft laten staan, of dat een achtergrondproces een lock heeft geplaatst.

USE [Your Database Name]
GO

SELECT
    [Type],
    [ID],
    [Name],
    [Locked],
    [Locked By],
    [Date],
    [Time]
FROM [dbo].[Object]
WHERE [Locked] = 1
ORDER BY [Type], [ID];

Het is een essentieel onderdeel van elke upgrade‑checklist.

Het tweede script: Verwijderen lock via SQL script

Het tweede script is een UPDATE‑statement dat alle gelockte objecten ontgrendelt door [Locked] = 0 te zetten.

Dit script is veilig, omdat:

  • Het alleen de lock‑status wijzigt
  • Het geen objecten verwijdert of wijzigt
  • Het geen metadata aanpast
  • Het geen compilatie uitvoert

Het doet simpelweg wat NAV zelf zou doen wanneer een gebruiker een object sluit.

USE [Your Database Name]
GO

UPDATE [dbo].[Object]
SET
    [Locked] = 0,
WHERE [Locked] = 1;

Tijdens een upgrade is dit script vaak noodzakelijk, omdat NAV zelf geen interface biedt om locks te verwijderen wanneer de Object Designer niet beschikbaar is.

Waarom deze scripts verwijderen lock via SQL script essentieel zijn voor een succesvolle upgrade

Een upgrade van NAV of Business Central met C/AL‑objecten bestaat uit meerdere stappen:

  1. Database kopiëren
  2. Objecten converteren
  3. Metadata upgraden
  4. Compilatie uitvoeren
  5. Extensions converteren (indien van toepassing)
  6. Data migreren

Als één object gelockt is, kan stap 2 of 3 volledig mislukken. De upgrade stopt dan met foutmeldingen zoals:

  • Object is locked by another user
  • Cannot modify object during upgrade
  • Metadata update failed due to locked object

Door vooraf de SELECT‑query uit te voeren, zie je direct of er problemen zijn. Door daarna de UPDATE‑query uit te voeren, verwijder je alle locks in één keer.

Dit voorkomt uren troubleshooting en mislukte upgrade‑runs.

Hoe je deze scripts verwijderen lock via SQL script inzet in een upgrade‑workflow

Hier is een praktische workflow die NAV‑consultants wereldwijd gebruiken:

1. Zet alle NAV‑services uit

Voorkomt dat achtergrondprocessen nieuwe locks plaatsen.

2. Voer de SELECT‑query uit

Controleer welke objecten gelockt zijn.

3. Analyseer de oorzaak

Soms zie je dat een ontwikkelaar nog ingelogd is. Soms zie je dat een proces zoals NAS een lock heeft geplaatst.

4. Voer de UPDATE‑query uit

Ontgrendel alle objecten.

5. Voer de SELECT‑query opnieuw uit

Bevestig dat alle locks weg zijn.

6. Start de upgrade

Nu kan de upgrade tooling alle objecten vrij aanpassen.

Best practices voor NAV/BC‑upgrades met behulp van verwijderen lock via SQL script

Hier zijn enkele bewezen adviezen:

  • Gebruik altijd een pre‑upgrade checklist
  • Controleer altijd op gelockte objecten
  • Zet alle services uit voordat je de upgrade start
  • Voer de scripts uit op een kopie van de database
  • Documenteer wie verantwoordelijk is voor objectbeheer
  • Automatiseer de SELECT‑query in je upgrade‑pipeline
  • Combineer dit met een Upgrade‑strategie
  • Overweeg een migratie naar AL‑objecten om locks volledig te vermijden

Conclusie: kleine scripts, grote impact

Tot slot. Deze twee SQL‑scripts lijken dus klein, maar ze voorkomen grote problemen. Ze zorgen ervoor dat je upgrade niet vastloopt door gelockte objecten, en ze geven je dus volledige controle over de staat van je NAV‑database.

Wie regelmatig upgrades uitvoert, weet dat dit soort checks dus het verschil maken tussen:

  • een upgrade die in één keer slaagt
  • een upgrade die urenlang faalt door onzichtbare locks

Door deze scripts standaard in je workflow op te nemen, werk je sneller, veiliger en professioneler. Gelukkig is er een SQL script die het verwijderen van een lock beschrijft.

Meer informatie over SQL Server, klik hier. Als je vragen hebt over deze blog post, contacteer mij dan via het contact formulier.

0 Shares:
You May Also Like