Delen via


DE HPC Management-service kan niet worden gestart na het herstellen van de database

Dit artikel bevat een oplossing voor een probleem waarbij HPC Management Service niet kan worden gestart nadat u een beschadigde database hebt hersteld.

Symptomen

Nadat u een beschadigde HPC-beheerdatabase hebt hersteld, kan HPC Management Service niet worden geïnitialiseerd. U start het hoofdknooppunt opnieuw op en controleert of alle andere HPC-services de status Actief hebben. HpC Management Service kan echter nog steeds niet worden gestart.

De volgende fout wordt weergegeven in de gebeurtenislogboeken van HPC Management:

De HPC Management-service kan niet correct worden geïnitialiseerd: de exemplaarverzameling van id's kan niet worden omgezet in de huidige exemplaarweergave.

Oorzaak

DE HPC Management-service is vastgelopen met InstanceCacheLoadException. Dit is het foutbericht in het gebeurtenislogboek van HPC Management:

[HPCManagement] Uitzondering: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: De exemplaarverzameling van id's kan niet worden omgezet in de huidige exemplaarweergave.

Dit probleem treedt op omdat veel exemplaren de verkeerde status hebben. Voor elk exemplaar moet er slechts één versie zijn met de status 'Current' (instanceState-waarde is 2). Wanneer het probleem zich voordoet, zijn er exemplaren met twee of drie versies met de status 'Current' (instanceState-waarde is 2). Voer de volgende SQL-query uit op een HPC-beheerdatabase om het aantal exemplaren met de status Huidige te controleren:

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

Voer de volgende SQL-query uit voor elke exemplaar-id die door de bovenstaande SQL-query wordt geretourneerd:

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

Oplossing

Los het probleem op door de exemplaren met de verkeerde status op te lossen. Hiervoor volgt u deze stappen:

  1. Sla het volgende PowerShell-script op als FixInstanceStateError.ps1-bestand.

    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. Voer PowerShell uit als beheerder.

  3. Voer de volgende opdracht uit:

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. Start de HPC SDM Store-service en HPC Management Service opnieuw op.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.