다음을 통해 공유


데이터베이스를 복원한 후 HPC 관리 서비스가 시작되지 않습니다.

이 문서에서는 손상된 데이터베이스를 복원한 후 HPC Management Service가 시작되지 않는 문제에 대한 솔루션을 제공합니다.

증상

손상된 HPC 관리 데이터베이스를 복원하면 HPC Management Service가 초기화되지 않습니다. 헤드 노드를 다시 부팅하고 다른 모든 HPC 서비스가 실행 중 상태인지 확인합니다. 그러나 HPC 관리 서비스는 여전히 시작할 수 없습니다.

다음 오류는 HPC Management 이벤트 로그에 표시됩니다.

HPC Management Service가 올바르게 초기화되지 못했습니다. ID의 인스턴스 컬렉션을 현재 인스턴스 보기에서 확인할 수 없습니다.

원인

HPC 관리 서비스가 "InstanceCacheLoadException"과 충돌했습니다. HPC Management 이벤트 로그의 오류 메시지는 다음과 같습니다.

[HPCManagement] 예외: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: 현재 인스턴스 보기에서 ID의 인스턴스 컬렉션을 확인할 수 없습니다.

이 문제는 많은 인스턴스가 잘못된 상태에 있기 때문에 발생합니다. 각 인스턴스에 대해 "현재" 상태의 버전은 하나만 있어야 합니다(instanceState 값은 2). 문제가 발생하면 "현재" 상태(instanceState 값은 2)에 두 개 또는 세 개의 버전이 있는 인스턴스가 있습니다. "현재" 상태의 인스턴스 버전 수를 확인하려면 HPC Management Database에 대해 다음 SQL 쿼리를 실행합니다.

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

위의 SQL 쿼리에서 반환된 각 instanceId에 대해 다음 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

해결

이 문제를 해결하려면 인스턴스를 잘못된 상태로 수정합니다. 이렇게 하려면 다음 단계를 수행하세요.

  1. 다음 PowerShell 스크립트를 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. 관리자 권한으로 PowerShell을 실행합니다.

  3. 다음 명령을 실행합니다.

    .\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
    
  4. HPC SDM 스토어 서비스 및 HPC 관리 서비스를 다시 시작합니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.