共用方式為


在還原資料庫之後,HPC Management Service 無法啟動

本文提供在還原損毀資料庫之後,HPC Management Service 無法啟動的問題解決方案。

徵兆

還原損毀的 HPC 管理資料庫之後,HPC Management Service 就無法初始化。 您會重新啟動前端節點,並確認所有其他 HPC 服務都處於執行中狀態。 不過,HPC Management Service 仍無法啟動。

HPC Management 事件記錄檔中顯示下列錯誤:

HPC Management Service 無法正確初始化:無法在目前的實例檢視中解析標識符的實例集合。

原因

HPC Management Service 當機時發生“InstanceCacheLoadException”。 以下是 HPC Management 事件記錄檔中的錯誤訊息:

[HPCManagement]例外狀況:Microsoft.SystemDefinitionModel.InstanceCacheLoadException:無法在目前的實例檢視中解析標識符的實例集合。

發生此問題的原因是許多實例處於錯誤狀態。 針對每個實例,「目前」狀態應該只有一個版本(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 community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。