Condividi tramite


Il servizio di gestione HPC non viene avviato dopo il ripristino del database

Questo articolo fornisce una soluzione per un problema per cui il servizio di gestione HPC non viene avviato dopo il ripristino di un database danneggiato.

Sintomi

Dopo aver ripristinato un database di gestione HPC danneggiato, l'inizializzazione del servizio di gestione HPC non riesce. Riavviare il nodo head e verificare che tutti gli altri servizi HPC siano in esecuzione. Tuttavia, il servizio di gestione HPC non può ancora essere avviato.

L'errore seguente viene visualizzato nei log eventi di gestione HPC:

Impossibile inizializzare correttamente il servizio di gestione HPC: la raccolta di ID dell'istanza non può essere risolta nella visualizzazione dell'istanza corrente.

Causa

Il servizio di gestione HPC si è arrestato in modo anomalo con "InstanceCacheLoadException". Ecco il messaggio di errore nel registro eventi di GESTIONE HPC:

[HPCManagement] Eccezione: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: la raccolta di ID dell'istanza non può essere risolta nella visualizzazione dell'istanza corrente.

Questo problema si verifica perché molte istanze si trovano nello stato errato. Per ogni istanza deve essere presente una sola versione nello stato "Current" (instanceState è 2). Quando si verifica il problema, esistono istanze con due o tre versioni nello stato "Corrente" (il valore di instanceState è 2). Per verificare il numero di versioni dell'istanza nello stato "Corrente", eseguire la query SQL seguente su un database di gestione HPC:

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

Per ogni instanceId restituito dalla query SQL precedente, eseguire la query SQL seguente:

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

Risoluzione

Per risolvere il problema, correggere le istanze nello stato errato. A tal fine, attenersi alla seguente procedura:

  1. Salvare lo script di PowerShell seguente come file 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. Eseguire PowerShell come amministratore.

  3. Eseguire il comando riportato di seguito:

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. Riavviare il servizio di archiviazione SDM HPC e il servizio di gestione HPC.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.