System Center 2012 R2 DPM - Ошибка в работе консоли вторичного сервера - Unable to connect to the DPM database - 0x80131904 - Violation of PRIMARY KEY constraint 'pk__AM_ClusterNode__ResultID

imageИспользую Data Protection Manager (DPM) начиная с версии System Center 2010 и вижу положительную тенденцию развития данного продукта компанией Microsoft. При этом, в силу достаточно динамичного появления новых версий разнообразного программного обеспечения, возникают некоторые проблемы в использовании DPM в связке с обновлённым ПО. Рассмотрим одну из таких ситуаций, в которой я столкнулся с ошибкой в работе консоли DPM на вторичном DPM-сервере после миграции кластера Hyper-V с Windows Server 2012 на Windows Server 2012 R2.

Для начала кратко опишу инфраструктуру, в которой задействован DPM:

1. Имеется кластер Hyper-V на базе Windows Server 2012 R2, который ранее был мигрирован с Windows Server 2012. При миграции виртуальных машин (ВМ) имя кластера менялось.

2. Имеется первичный (primary) сервер DPM версии System Center 2012 R2, который отвечает за резервное копирование ВМ в кластере Hyper-V и других ресурсов (файлы, почта и т.д.).

3. Имеется вторичный (secondary) сервер DPM версии System Center 2012 R2, который предназначен для защиты данных самого первичного сервера DPM и ресурсов защищаемых первичным сервером (файлов, почты и т.д.).

Появилась необходимость изменить группу защиты вторичного DPM. Однако при попытке открытия структуры защищаемых ресурсов первичного DPM в консоли вторичного DPM возникает ошибка, после которой требуется перезапуск консоли. При этом в журнале событий регистрируется сообщение Event ID 945 MSDPM. Привожу фрагмент описания ошибки в Event Viewer:

The description for Event ID 945 from source MSDPM cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event:

Unable to connect to the DPM database because of a general database failure.  Make sure that SQL Server is running and that it is configured correctly.

Problem Details:
<FatalServiceError><__System><ID>19</ID><Seq>1377</Seq><TimeCreated>15.10.2014 8:39:52</TimeCreated><Source>DpmThreadPool.cs</Source><Line>163</Line><HasError>True</HasError></__System><ExceptionType>SqlException</ExceptionType><ExceptionMessage>Violation of PRIMARY KEY constraint 'pk__AM_ClusterNode__ResultID'. Cannot insert duplicate key in object 'dbo.tbl_AM_ClusterNode'. The duplicate key value is (c76ffdb3-6750-46dd-8456-6ad3afdd6af4).
The statement has been terminated.</ExceptionMessage><ExceptionDetails>System.Data.SqlClient.SqlException (0x80131904): Violation of PRIMARY KEY constraint 'pk__AM_ClusterNode__ResultID'. Cannot insert duplicate key in object 'dbo.tbl_AM_ClusterNode'. The duplicate key value is (c76ffdb3-6750-46dd-8456-6ad3afdd6af4).
The statement has been terminated…

Понимая, что ошибка возникает при раскрытии первичного сервера DPM и наличии записей в логе pk__AM_ClusterNode, решил посмотреть,какие данные есть в таблице SQL базы DPMDB, выполнив запрос вида:

SELECT dbo.tbl_AM_ClusterNode.NodeID,
dbo.tbl_AM_ClusterNode.ClusterID,
dbo.tbl_AM_ClusterNode.ServerName,
dbo.tbl_AM_ClusterNode.ClusterNameAlert,
dbo.tbl_AM_ClusterNode.PartialDeploymentAlert,
dbo.tbl_AM_ClusterNode.ClusterConfigDetected,
dbo.tbl_AM_ClusterDetail.ClusterName
FROM dbo.tbl_AM_ClusterNode, dbo.tbl_AM_ClusterDetail
WHERE dbo.tbl_AM_ClusterDetail.ClusterID = dbo.tbl_AM_ClusterNode.ClusterID
AND dbo.tbl_AM_ClusterNode.Deleted = 0
order by tbl_AM_ClusterDetail.ClusterName

В результате выполнения запроса был получен список серверов и кластер Hyper-V. При этом имя кластера было указано старое (используемое до миграции).

Также просмотрел таблицу tbl_AM_ClusterDetail и нашел ClusterID старого кластера Hyper-V.

Или можно выполнить команду Powershell, чтобы получить все имена и ID кластеров:

get-productioncluster

Удалил ссылки серверов Hyper-V на уже несуществующий кластер запросом вида:

delete 
FROM dbo.tbl_AM_ClusterNode
WHERE ClusterID = '<ID кластера>'

В результате в консоли DPM на вторичном сервере структура защищаемых ресурсов первичного DPM стала отображаться без проблем.

Только один комментарий Комментировать

  1. Eugene Leitan /

    Также это решение помогает при появлении ошибки ID 943 в

    Пример ошибки:
    The description for Event ID 943 from source MSDPM cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

    If the event originated on another computer, the display information had to be saved with the event.

    The following information was included with the event:

    Unable to connect to the DPM database because the database is in an inconsistent state.

    Problem Details:
    1910611.03.2015 0:30:18DpmThreadPool.cs163TrueDBCorruptionExceptionDLS error: Couldn't retrieve details for 'SPHV' from the database. SP='dbo.prc_AM_ClusterNode_Get' Error=50001Microsoft.Internal.EnterpriseStorage.Dls.DB.DBCorruptionException: DLS error: Couldn't retrieve details for 'SPHV' from the database. SP='dbo.prc_AM_ClusterNode_Get' Error=50001
    at Microsoft.Internal.EnterpriseStorage.Dls.DB.SqlRetryCommand.ValidateReturnValue(String errorTitle)
    at Microsoft.Internal.EnterpriseStorage.Dls.AgentManager.DB.ClusterNode.Get(String serverName)
    at Microsoft.Internal.EnterpriseStorage.Dls.AgentManager.InstallListRefreshMachine.FailTask(Message msg)
    at Microsoft.Internal.EnterpriseStorage.Dls.TaskExecutor.Fsm.Engine.ChangeState(Message msg)
    at Microsoft.Internal.EnterpriseStorage.Dls.TaskExecutor.TaskInstance.Process(Object dummy)
    at Microsoft.Internal.EnterpriseStorage.Dls.TaskExecutor.FsmThreadFunction.Function(Object taskThreadContextObj)
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
    at System.Threading.ThreadPoolWorkQueue.Dispatch()

    the message resource is present but the message is not found in the string/message table

Добавить комментарий