Bodo's Dynamics NAV Blog

Bodo ist ein Dynamics NAV Urgestein. Er programmiert NAV seit DOS Zeiten und hat auch keine Scheu vor .NET und schon gar nicht vor Dynamics 365 oder Azure. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu NAV Entwicklern ausgebildet.

In diesem Blog veröffentlichen Bodo und andere Superhelden Interessantes aus der Welt von Dynamics NAV, Dynamics 365 und Azure.

NAV 2016 – Parallelität im Upgrade-Prozess

Verfasst von Bodo am Montag, 4. April 2016

Tags: 2016, upgrade, powershell

Zuständig für das Datenupgrade ist das PowerShell CmdLet »Start-NAVDataUpgrade«. Wie hier (Link zu http://www.comporsys.de/dynamics-nav-blog/was-wurde-aus-dem-powershell-cmdlet-invoke-companyinitialize/) beschrieben, startet dieses CmdLet auch automatisch die Codeunit 2 »Company-Initialize«.

Warum erzähle ich Ihnen das? Wenn Sie das Datenupgrade auf NAV 2016 für eine Datenbank mit mehreren Mandanten durchführen, kann es zu folgender unschöner Fehlermeldung kommen:

Invoke NAV Data Upgrade Failed

Errors occurred during the Microsoft Dynamics NAV data upgrade process:

Codeunit ID: 2, Function: OnRun, Error: Funktion 'OnRun' in der Codeunit zur Mandanteninitialisierung '2' ist im Kontext des Mandanten 'CRONUS USA, Inc.' aufgrund des folgenden Fehlers fehlgeschlagen: 'Der Vorgang konnte nicht abgeschlossen werden, da ein Datensatz in der Tabelle 'Add-in' durch einen anderen Benutzer gesperrt wurde. Führen Sie die Aktion erneut aus.', Company: CRONUS USA, Inc.

Was ist hier passiert? Das CmdLet »Start-NAVDataUpgrade« startet das Datenupgrade parallel in allen Mandanten. Demzufolge wird auch Codeunit 2 »Company-Initialize« parallel in allen Mandanten ausgeführt.

Die Tabelle »Add-In« ist mandantenübergreifend. Uns so versuchen nun mehrere Prozesse parallel in ein und dieselbe Tabelle zu schreiben. Was natürlich aufgrund der Sperren scheitert.

Eine einfache Möglichkeit dieses Problem zu umschiffen, ist der Parameter »FunctionExecutionMode« den Sie auf »Serial« setzen können. Dann arbeitet das CmdLet »Start-NAVDataUpgrade« die Mandanten nicht mehr parallel, sondern seriell nach einander ab.

Dazu müssen Sie das CmdLet »Invoke-NAVDataUpgrade« anpassen. Das liegt auf der Produkt DVD im Verzeichnis \WindowsPowerShellScripts\Upgrade\Cmdlets\NAV.

blog-2016-04-04-image1.png 

Eine andere Möglichkeit wäre, auf das »Company-Initialize« ganz zu verzichten. Das empfehle ich Ihnen allerdings nicht, da Ihnen dann unter Umständen wichtige Einstellungen fehlen. Dazu können Sie den Parameter »SkipCompanyInitialization« setzen. Erstaunlicherweise taucht dieser Parameter in der Dokumentation auf MSDN nicht auf: https://msdn.microsoft.com/en-us/library/dn789574(v=nav.90).aspx.

Viel Vergnügen bei Ihrem nächsten Upgrade-Projekt!


Kontakt

Comporsys Hansa GmbH
Spitzerdorfstr. 3
22880 Wedel, Deutschland

Tel. +49 (0)4103 12117 - 0
Fax +49 (0)4103 12117 - 29
E-Mail: info@comporsys.de