症状
您安装了 Microsoft System Center 2012 操作管理器或 System Center 2012 R2 运营经理。然后,您可以使用 msiexec.exe 实用程序手动删除某些功能,如 APM 代理或运营的见解代理 (顾问代理)。在此情况下,可能会出现意外的问题。例如,当您导入新的管理包,是永远不会已成功加载配置在所有管理服务器和代理上。
此外,可能会出现下列问题︰
-
在所有管理服务器的操作管理器日志中记录错误 1209年事件。
-
"所有管理服务器资源库都不可用"警报显示在控制台上。
注意:Microsoft 不支持 APM 代理或顾问代理手动删除。但是,安装向导用户界面允许您删除这些功能。
原因
当您使用 msiexec.exe 卸载特定功能时,可能无意中删除某些必需的组件或注册表项。例如,当您卸载 APM 代理或顾问代理,则删除下面的注册表项︰
注册表位置︰HKEY_LOCAL_MACHINE\Software\Microsoft\System Center\2010\Common\Machine 设置
双字节名称︰LegacyMode
双字节值︰ 0
此注册表项是必需的和已安装控制台的所有计算机上的所有管理服务器。
解决方案
要确定是否受到此问题,请对操作管理器数据库运行下面的 SQL 查询︰
select ManagementPackId, MPVersionDependentId, MPName, MPVersion, MPKeyTokenfrom ManagementPack
where MPIsSealed = 1 and MPVersionDependentId != dbo.fn_MPVersionDependentId(MPName, MPKeyToken, MPVersion)
如果您收到此查询的任何结果,都受此特定问题。在此情况下,要获得正确的字符串 rehashed 的 Guid 对操作管理器数据库运行以下 SQL 查询。
注意:请确保您有当前的备份,然后运行此查询。直接更改数据库可能使您处于不受支持的状态,需要重建或将数据库还原到其更改前的状态。
update ManagementPackset MPVersionDependentId = dbo.fn_MPVersionDependentId(MPName, MPKeyToken, MPVersion), MPRunTimeXML = replace(MPRunTimeXML, 'RevisionId="' + convert(nvarchar(255), MPVersionDependentId) + '"', 'RevisionId="' + convert(nvarchar(255), dbo.fn_MPVersionDependentId(MPName, MPKeyToken, MPVersion)) + '"')
where MPIsSealed = 1 and MPVersionDependentId != dbo.fn_MPVersionDependentId(MPName, MPKeyToken, MPVersion)
go
update ManagementPackHistory
set MPVersionDependentId = dbo.fn_MPVersionDependentId(MPName, MPKeyToken, Version)
where IsSealed = 1 and MPVersionDependentId != dbo.fn_MPVersionDependentId(MPName, MPKeyToken, Version)
go
执行此操作后,请确认以下注册表项是否存在,并且它具有正确的值 (0),和已安装控制台的所有计算机上的所有管理服务器︰
注册表位置︰HKEY_LOCAL_MACHINE\Software\Microsoft\System Center\2010\Common\Machine 设置
双字节名称︰LegacyMode
双字节值︰ 0然后,清除所有管理服务器上的运行状况服务缓存。若要执行此操作,请执行以下步骤:
-
停止系统中心管理服务 (也称为 Microsoft 监控代理在 2012 R2 操作管理器)。
-
删除位于 SCOM_INSTALL_DIR\Server 目录中的"服务状态健康"文件夹。
-
启动系统中心管理服务 (也称为 Microsoft 监控代理在 2012 R2 操作管理器)。
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
详细信息
如果LegacyMode注册表项缺少或导入新的管理包时被设置为 0 以外的值, MPVersionDependentId值 (GUID) 不是它应获得一个不同的值。在这种情况下,它将不包含"架构 = 2"用来创建 GUID 的字符串。