Compartilhar via


O Serviço de Gerenciamento HPC falha ao iniciar após a restauração do banco de dados

Este artigo fornece uma solução para um problema em que o HPC Management Service falha ao iniciar após a restauração de um banco de dados corrompido.

Sintomas

Depois de restaurar um banco de dados de gerenciamento HPC corrompido, o Serviço de Gerenciamento HPC não é inicializado. Você reinicializa o nó principal e verifica se todos os outros serviços HPC estão em status de execução. No entanto, o Serviço de Gerenciamento HPC ainda não pode ser iniciado.

O seguinte erro é mostrado nos logs de eventos do HPC Management:

O Serviço de Gerenciamento HPC falhou ao inicializar corretamente: a coleção de IDs da instância não pode ser resolvida na exibição da instância atual.

Motivo

O Serviço de Gerenciamento HPC falhou com "InstanceCacheLoadException". Aqui está a mensagem de erro no log de eventos do HPC Management:

[HPCMgestão] Exceção: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: a coleção de IDs de instância não pode ser resolvida na exibição de instância atual.

Esse problema ocorre porque muitas instâncias estão no estado errado. Para cada instância, deve haver apenas uma versão no estado "Atual" (o valor instanceState é 2). Quando o problema ocorre, há instâncias com duas ou três versões no estado "Atual" (o valor instanceState é 2). Para verificar o número de versões da instância no estado "Atual", execute a seguinte consulta SQL em um Banco de Dados de Gerenciamento HPC:

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

Para cada instanceId retornado pela consulta SQL acima, execute a seguinte consulta SQL:

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

Resolução

Para resolver o problema, corrija as instâncias no estado errado. Para fazer isso, siga estas etapas:

  1. Salve o script do PowerShell a seguir como arquivo 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. Execute o PowerShell como um Administrador.

  3. Execute o comando a seguir:

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. Reinicie o Serviço de Repositório do HPC SDM e o Serviço de Gerenciamento do HPC.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.