Det går inte att starta HPC Management Service efter att databasen har återställts
Den här artikeln innehåller en lösning på ett problem där HPC Management Service inte kan starta efter att du har återställt en skadad databas.
Symptom
När du har återställt en skadad HPC-hanteringsdatabas kan HPC Management Service inte initieras. Du startar om huvudnoden och kontrollerar att alla andra HPC-tjänster körs. HPC Management Service kan dock fortfarande inte startas.
Följande fel visas i HPC Management-händelseloggar:
HPC Management Service kunde inte initieras korrekt: Instanssamlingen av ID:n kan inte matchas i den aktuella instansvyn.
Orsak
HPC Management Service kraschade med "InstanceCacheLoadException". Här är felmeddelandet i händelseloggen för HPC Management:
[HPCManagement] Undantag: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: Instanssamlingen av ID:n kan inte matchas i den aktuella instansvyn.
Det här problemet beror på att många instanser är i fel tillstånd. För varje instans bör det bara finnas en version i tillståndet "Aktuell" (instanceState-värdet är 2). När problemet uppstår finns det instanser med två eller tre versioner i tillståndet "Aktuell" (instanceState-värdet är 2). Kontrollera antalet instansversioner i tillståndet "Aktuell" genom att köra följande SQL-fråga mot en HPC-hanteringsdatabas:
SELECT instanceId, count(*) as Number FROM Instances where instanceState = 2 group by instanceId having count(*) > 1
Kör följande SQL-fråga för varje instanceId som returneras av SQL-frågan ovan:
SELECT Instances.instanceId, Instances.changeId, Instances.instanceVersion, Instances.instanceName, Instances.instanceState, Changes.changeName, Changes.changeState FROM Instances INNER JOIN Changes on Instances.changeId = Changes.changeId Where Instances.instanceId = '<instanceId>' and Instances.instanceState <> 3 Order by Instances.instanceVersion DESC
Åtgärd
Lös problemet genom att åtgärda instanserna i fel tillstånd. För att göra detta följer du stegen nedan:
Spara följande PowerShell-skript som Filen FixInstanceStateError.ps1.
param ( [Parameter(Mandatory=$true)] [string] $ServerInstance, [Parameter(Mandatory=$false)] [string] $Database = "HpcManagement" ) $dupInstances = Invoke-Sqlcmd -ServerInstance $ServerInstance -Database $Database -Query "SELECT instanceId, count(*) as Number FROM Instances where instanceState = 2 group by instanceId having count(*) > 1" $instanceIds = $dupInstances.instanceId $idsString = $instanceIds -join "','" $instanceEntries = Invoke-Sqlcmd -ServerInstance $ServerInstance -Database $Database -Query "SELECT * FROM Instances Where instanceId IN ('$idsString') and instanceState = 2" $sortedEntries = $instanceEntries | Sort-Object -Property @{Expression="instanceId"; Descending=$true},@{Expression="instanceVersion"; Descending=$true} $idMap = @{} foreach($entry in $sortedEntries) { if($idMap[$entry.instanceId]) { Invoke-Sqlcmd -ServerInstance $ServerInstance -Database $Database -Query "Update Instances set instanceState = 3 where instanceId = '$($entry.instanceId)' and instanceVersion = $($entry.instanceVersion)" } else { $idMap[$entry.instanceId] = $true } }
Kör PowerShell som administratör.
Kör följande kommando:
.\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
Starta om HPC SDM Store Service och HPC Management Service.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.