Dela via


Det går inte att starta HPC-hanteringstjänsten 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-hanteringstjänsten kunde inte initieras korrekt: Det går inte att matcha instanssamlingen av ID:n 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: Det går inte att matcha instanssamlingen av ID:n 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). Om du vill verifiera antalet instansversioner i tillståndet "Aktuell" kör du 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. Gör så här:

  1. Spara följande PowerShell-skript som FixInstanceStateError.ps1 fil.

    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
        }
    }
    
  2. Kör PowerShell som administratör.

  3. Kör följande kommando:

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. 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.