Delen via


HPC Management Service kan niet worden gestart na het herstellen van de database

Dit artikel biedt 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 de 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 HPC Management-gebeurtenislogboeken:

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

Oorzaak

HPC Management Service is gecrasht met 'InstanceCacheLoadException'. Dit is het foutbericht in het HPC Management-gebeurtenislogboek:

[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' (waarde van instanceState is 2). Wanneer het probleem zich voordoet, zijn er exemplaren met twee of drie versies met de status 'Current' (waarde van instanceState is 2). Voer de volgende SQL-query uit op een HPC-beheerdatabase om het aantal exemplaarversies met de status 'Huidig' te controleren:

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

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

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

U kunt het probleem oplossen door de exemplaren met de verkeerde status op te lossen. Ga hiervoor als volgt te werk:

  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.

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 Feedback-community van Azure.