Поделиться через


Не удается запустить службу управления HPC после восстановления базы данных

В этой статье описывается решение проблемы, из-за которой служба управления HPC не запускается после восстановления поврежденной базы данных.

Симптомы

После восстановления поврежденной базы данных управления HPC служба управления HPC не сможет инициализировать службу управления HPC. Перезагрузите головной узел и убедитесь, что все остальные службы HPC находятся в состоянии выполнения. Однако служба управления HPC по-прежнему не может быть запущена.

Следующая ошибка отображается в журналах событий управления HPC:

Не удалось правильно инициализировать службу управления HPC: коллекция идентификаторов экземпляров не может быть разрешена в текущем представлении экземпляра.

Причина

Сбой службы управления HPC с помощью InstanceCacheLoadException. Ниже приведено сообщение об ошибке в журнале событий управления HPC:

[HPCManagement] Исключение: Microsoft.SystemDefinitionModel.InstanceCacheLoadException: коллекция идентификаторов экземпляров не может быть разрешена в текущем представлении экземпляра.

Эта проблема возникает, так как многие экземпляры находятся в неправильном состоянии. Для каждого экземпляра должна быть только одна версия в состоянии "Current" (значение instanceState равно 2). При возникновении проблемы существуют экземпляры с двумя или тремя версиями в состоянии "Current" (значение instanceState равно 2). Чтобы проверить количество версий экземпляров в текущем состоянии, выполните следующий SQL-запрос к базе данных управления HPC:

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

Для каждого экземпляра, возвращаемого приведенным выше SQL-запросом, выполните следующий 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. Перезапустите службу хранилища SDM HPC и службу управления HPC.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.