在還原資料庫之後,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
解決方法
若要解決此問題,請修正處於錯誤狀態的實例。 若要這樣做,請遵循下列步驟:
將下列 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 } }
以系統管理員身分執行 PowerShell。
執行以下命令:
.\FixInstanceStateError.ps1 -ServerInstance SQLserver -Database HpcManagement
重新啟動 HPC SDM 市集服務和 HPC 管理服務。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。