Freigeben über


HPC-Verwaltungsdienst kann nach dem Wiederherstellen der Datenbank nicht gestartet werden

Dieser Artikel enthält eine Lösung für ein Problem, bei dem DER HPC-Verwaltungsdienst nicht gestartet werden kann, nachdem Sie eine beschädigte Datenbank wiederhergestellt haben.

Symptome

Nachdem Sie eine beschädigte HPC-Verwaltungsdatenbank wiederhergestellt haben, kann der HPC-Verwaltungsdienst nicht initialisiert werden. Sie starten den Kopfknoten neu, und stellen Sie sicher, dass alle anderen HPC-Dienste den Status "Ausführen" aufweisen. Der HPC-Verwaltungsdienst kann jedoch weiterhin nicht gestartet werden.

Der folgende Fehler wird in HPC-Verwaltungsereignisprotokollen angezeigt:

Fehler beim Initialisieren des HPC-Verwaltungsdiensts: Die Instanzauflistung von IDs kann in der aktuellen Instanzansicht nicht aufgelöst werden.

Ursache

DER HPC-Verwaltungsdienst ist mit "InstanceCacheLoadException" abgestürzt. Dies ist die Fehlermeldung im HPC-Verwaltungsereignisprotokoll:

[HPCManagement] Ausnahme: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: Die Instanzsammlung von IDs kann in der aktuellen Instanzansicht nicht aufgelöst werden.

Dieses Problem tritt auf, da sich viele Instanzen im falschen Zustand befinden. Für jede Instanz sollte nur eine Version im Status "Current" vorhanden sein (instanceState-Wert ist 2). Wenn das Problem auftritt, gibt es Instanzen mit zwei oder drei Versionen im Status "Current" (instanceState-Wert ist 2). Um die Anzahl der Instanzenversionen im Status "Current" zu überprüfen, führen Sie die folgende SQL-Abfrage für eine HPC-Verwaltungsdatenbank aus:

SELECT instanceId, count(*) as Number FROM Instances where instanceState = 2 group by instanceId having count(*) > 1

Führen Sie für jede instanceId, die von der obigen SQL-Abfrage zurückgegeben wird, die folgende SQL-Abfrage aus:

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

Lösung

Um das Problem zu beheben, beheben Sie die Instanzen im falschen Zustand. Gehen Sie dazu wie folgt vor:

  1. Speichern Sie das folgende PowerShell-Skript als Datei "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
        }
    }
    
  2. Führen Sie PowerShell als Administrator aus.

  3. Führen Sie den folgenden Befehl aus:

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. Starten Sie den HPC-SDM-Speicherdienst und den HPC-Verwaltungsdienst neu.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.