Vor Kurzem mussten wir die DSM Datenbank aufgrund des Supportendes von Server 2008 umziehen. Da der Schwenk nicht direkt funktionierte (Hinweis: Nach einem Datenbankumzug immer den Server neustarten!), waren kurzfristig die alte und die neue Datenbank online. Das führte nicht direkt zu einem Fehler, jedoch fiel mir einige Tage später etwas auf: Verschiedene Clients synchronisierten sich nicht mehr mit DSM, die letzte Synchronisation fand zum Zeitpunkt des Datenbankumzuges oder kurz davor statt. Das Logfile zeigte folgenden Fehler:
22:42:16.466 E Warning (Module:SWMSClntLib, Severity:0x03): The server returned an exception (3758622480) when syncing for computer 153282 and user 144635.
Fehlerhafte Schnappschuss-ID. (0xe0080710)
22:42:16.468 E Warning (Module:SWMSClntLib, Severity:0x03): Failed to synchronize with BLS
Fehlerhafte Schnappschuss-ID. (0xe0080710)
22:42:16.468 E Warning (Module:SWMSRT, Severity:0x03): Client sync (C:\Program Files (x86)\Common Files\enteo\NiLogs\SyncLogs\PerformSync_SYSTEM_0000003957.log) failed [-536344816]
22:42:16.470 E Warning (Module:SWMSRT, Severity:0x03): ClientSync failed with error code 3758622480
Fehlerhafte Schnappschuss-ID. (0xe0080710)
22:42:16.473 2 SWMSRT: Client sync for computer ‚153282‘ and user ‚144635‘ (QoS level ‚Polling‘) failed with ‚Fehlerhafte Schnappschuss-ID. (0xe0080710)‘ (3758622480)
In diesem war ein Hinweis auf das PerformSync .log, was Folgendes zeigte:
22:42.16.399 2 syncserv.dll The server has thrown an exception of type -536608564
22:42.16.400 E Warning (Module:mgmtagnt.exe, Severity:0x03): syncserv.dll The exception translates into:
Fehlerhafte Schnappschuss-ID. (0xe0080710)
22:42.16.400 2 syncserv.dll StackTrace:
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Core.ClientManagement.CoreCommands.CheckAndUpdateSynchronizationInfoCommand.CheckAndUpdateSyncCounters(SynchronizationData syncDa
22:42.16.400 2 syncserv.dll ta, IVirtualObject computer)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Core.ClientManagement.CoreCommands.CheckAndUpdateSynchronizationInfoCommand.Execute(SynchronizationData syncData)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Base.ClientManagement.CommandInfrastructure.SynchronizationInvoker.ExecuteSingleCommand(ISynchronizationCommand command, Synchron
22:42.16.400 2 syncserv.dll izationData data)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Base.ClientManagement.CommandInfrastructure.InvokerBase`2.Execute(TData data)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Orchestration.ClientManagement.ClientManagementOrchestration.<>c__DisplayClass7_0.<Sync>b__0(IMdsFactory mdsFactory)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Orchestration.OrchestrationBase.HandleRequestInternal[TReply](String callName, String callDetails, TransactionHandling transactio
22:42.16.400 2 syncserv.dll nHandling, ExecuteRequestDelegate`1 exec, Func`1 getClientInfo, Func`1 getRequestServerInfo, Func`2 getReplyServerInfo, OrchestrationCallWrapperActions actions)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Orchestration.OrchestrationBase.HandleRequestJson[TReply](String callName, JsonRequestBase request, TransactionHandling transacti
22:42.16.400 2 syncserv.dll onHandling, OrchestrationCallWrapperActions actions, ExecuteRequestDelegate`1 executeRequest)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.Orchestration.ClientManagement.ClientManagementOrchestration.Sync(SyncRequest request, Action`1 calculatedSynchronizationDataAction)
22:42.16.400 2 syncserv.dll at Enteo.BlServer.WebService.ClientManagement.ClientService.HandleRequest[TReply,TInterface](JsonRequestBase request, Func`2 exec)
22:42.16.401 2 syncserv.dll at Enteo.BlServer.Orchestration.ClientManagement.Json.JsonService.ProcessInternalWithValidation[TRequest,TReply](Stream s, Func`2 handler, Action`1
22:42.16.401 2 syncserv.dll postProcessReply, Action handleServiceNotAvailable, Func`2 extendTraceFileName, JsonSchema validationSchema)
22:42.16.401 0 syncserv.dll Request was:
22:42.16.402 2 syncserv.dll {
22:42.16.402 2 syncserv.dll „Changes“:{
22:42.16.402 2 syncserv.dll „Computer“:{
22:42.16.402 2 syncserv.dll „153282“:{
22:42.16.402 2 syncserv.dll „BasicInventory“:{
22:42.16.402 2 syncserv.dll „InstalledOSVersion“:“10.0.17134.1006″,
22:42.16.402 2 syncserv.dll „SyncCountClient“:4527,
22:42.16.402 2 syncserv.dll „SystemType“:1
22:42.16.402 2 syncserv.dll },
22:42.16.402 2 syncserv.dll „ClientInfo“:{
22:42.16.402 2 syncserv.dll „RebootPending“:false
22:42.16.402 2 syncserv.dll },
22:42.16.402 2 syncserv.dll „Computer“:{
22:42.16.402 2 syncserv.dll „CalculatedWakeUpTime“:null
22:42.16.402 2 syncserv.dll }
22:42.16.402 2 syncserv.dll }
22:42.16.403 2 syncserv.dll },
Der Hinweis auf die „Fehlerhafte Schnappschuss-ID. (0xe0080710)“ brachte mich dann auf die richtige Spur: Während beide Datenbanken online waren, synchronisierte der Client nochmal mit der alten Datenbank, danach direkt mit der neuen, ohne dass wir noch mal ein Backup überspielt hatten (selbst Schuld!).
Nur wie die Clients wieder zum Laufen kriegen? Die harte Variante (aus DSM löschen und dann noch mal synchronisieren) funktionierte, ist jedoch eher unbefriedigend, da er jede Software neu installieren will (inklusive Betriebssystem).
Nach einiger Recherche habe ich jedoch noch eine sanftere Methode gefunden: Im Ordner „C:\Program Files (x86)\Common Files\enteo\sync\“ gibt es eine Datei „ComputerState.json“, die scheinbar auch den Timestamp der letzten Synchronisation enthält. Wird diese gelöscht, läuft auch die Synchronisation wieder (und die Datei wird automatisch neu erstellt).