本文帮助你修复Service Manager数据仓库作业的问题,例如 MPSyncJob Transform.common ,如果出现错误, 列名无效 语法不正确 ,则会出现停滞或失败的问题。

原始产品版本: System Center 2016 Service Manager、System Center 2012 R2 Service Manager
原始 KB 编号: 4057583

你遇到以下一个或多个问题:

  • 作业 MPSyncJob 停滞在模块 MP Sync SMGroupName:关联导入的 MP 顶点 上。

  • 作业 Transform.common 失败,你将收到以下模块错误消息 TransformIncidentDim

    无效列名“<列名>”

  • 在 Operations Manager 事件日志中,记录多个事件,其中包含以下错误消息:

    “) ”附近的语法不正确

    数据仓库管理服务器上的示例 Operations Manager 事件日志事件

    资料来源:DataAccessLayer
    事件 ID:33333
    级别:警告
    说明:SqlError 上的数据访问层拒绝重试:
    请求:Ral_ExecuteSql -- (语句=exec ('IF OBJECT_ID ('[dbo]。[IncidentDim]'') IS NULL
    BEGIN
    CREATE TABLE [dbo].[IncidentDim]
    ([列名] NVARCH...) , (RETURN_VALUE=102)
    数字:102
    消息:“) ”附近的语法不正确。

    事件 ID:33403
    级别:警告
    部署执行基础结构在执行部署程序时遇到错误。

    MP 元素 ID: <MP 元素 ID>
    MP 名称: <MP 名称>
    MP 版本:1.0.0.1
    操作:安装
    错误消息:System.Data.SqlClient.SqlException:在“) ”附近语法不正确。
    “) ”附近的语法不正确。

    at System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction)

    来源:Data Warehouse
    事件 ID:33580
    级别:错误
    作业失败。 JobName = < 作业名称 >;JobCategory = 执行;BatchId = < Batch ID >;WorkitemId = < Workitem ID >;ModuleName = < 模块名称 >;ErrorDetails = <Error>Error EventTime=“< Time >”>Logged:< Time > - “) ”附近的语法不正确。
    “) ”附近的语法不正确。</Error></Errors>;

    来源:Data Warehouse
    事件 ID:33503
    级别:警告
    尝试执行 ETL 模块时出现错误:
    ETL 进程类型:转换
    批处理 ID: <Batch ID>
    模块名称:TransformIncidentDim
    消息:列名“列名>”<无效。
    EXECUTE 之后的事务计数表示 BEGIN 语句和 COMMIT 语句数不匹配。 上一个计数 = 0,当前计数 = 1。

    Stack: at System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction)

    来源:Data Warehouse
    事件 ID:33502
    级别:错误
    ETL 模块执行失败:
    ETL 进程类型:转换
    批处理 ID: <Batch ID>
    模块名称:TransformIncidentDim
    消息:列名“列名>”<无效。
    EXECUTE 之后的事务计数表示 BEGIN 语句和 COMMIT 语句数不匹配。 上一个计数 = 0,当前计数 = 1。

    Stack: at System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction)

    资料来源:DataAccessLayer
    事件 ID:33333
    级别:警告
    SqlError 上的数据访问层拒绝重试:
    请求:Ral_ExecuteSql -- (语句=exec ('IF OBJECT_ID ('[dbo]。[IncidentDim]'') IS NULL
    BEGIN
    CREATE TABLE [dbo].[IncidentDim]
    ([列名] NVARCH...) , (RETURN_VALUE=102)
    数字:102
    消息:“) ”附近的语法不正确。

    来源:Data Warehouse
    事件 ID:33504
    级别:信息
    ETL 模块执行从故障中恢复:
    ETL 进程类型:转换
    批处理 ID: <Batch ID>
    模块名称:TransformIncidentDim

    事件 ID:33410
    级别:错误
    部署执行基础结构已重试最大次数,并在此执行步骤中放弃。
    MP 元素 ID: <MP 元素 ID>
    MP 名称: <MP 名称>
    MP 版本:1.0.0.1
    操作:安装
    错误消息:“) ”附近的语法不正确。
    “) ”附近的语法不正确。

    出现此问题的原因是Service Manager类(例如 Incident 类)已使用默认值为空格或多个空格(而不是 NULL )的新字段进行扩展。

    在开始之前,对 DWStagingAndConfig 数据库运行 ServiceManager 以下 SQL 查询:

    use DWStagingAndConfig -- or Use ServiceManager
    select managedtypepropertyname, DefaultValue from ManagedTypeProperty where managedtypepropertyname like '%' and defaultvalue = ''
    order by ManagedTypePropertyName
    

    如果查询未返回任何结果,则以下分辨率不适用于你的系统。 否则,请执行以下步骤。

    步骤 1:修复管理包中的问题

  • 使用以下查询查找字段和管理包名称:

    Select MP.MPName, MTP.ManagedTypePropertyName, MTP.DefaultValue from managementPack as MP
    Join ManagedTypeProperty as MTP on MTP.ManagementPackId = MP.ManagementPackId
    Where MTP.defaultvalue = ''
    
  • 在Service Manager控制台中,选择“管理”。

  • “管理 ”窗格中,展开 “管理”,然后选择 “管理包”。

  • “管理包 ”窗格中,选择由 SQL 查询标识的管理包。

  • “任务 ”窗格中,选择管理包名称下的“ 出”。

  • 在“ 浏览文件夹 ”对话框中,选择文件的位置,然后单击 “确定”。

  • 使用记事本打开 XML 格式的管理包文件,找到与 SQL 查询返回的值匹配的 属性 ID= ,然后从属性中删除 DefaultValue=“ 部分。

  • 在 XML 文件中查找 ManagementPackPublicKeyToken> 文本并删除整行。<

  • 在Service Manager创作工具中打开管理包,然后使用以前用于封装包的同一 .snk 密钥文件密封Service Manager管理包

  • 在Service Manager控制台中,导入管理包

  • 在Service Manager控制台中,选择Data Warehouse,展开Data Warehouse,然后选择Data Warehouse作业

  • “Data Warehouse作业”窗格中,右键单击 MPSyncJob,然后从“任务”列表中选择“恢复”。

  • 定期刷新Data Warehouse作业窗格,直到 MPSyncJob 完成。

    步骤 2:修复数据仓库中的问题

    方法 1:还原数据仓库数据库

    将以下数据库还原到更改前的日期:

  • DWStagingAndConfig
  • DWRepository
  • DWDataMart
  • OMDWDataMart
  • CMDWDataMart
  • 请确保备份在 数据保留设置中指定的期限内。 若要检查数据保留设置:在Service Manager控制台中,选择“管理”,然后转到“管理>设置”。

    还原数据仓库数据库后,数据仓库将使用更新后的管理包和存储在Service Manager上的数据。

    方法 2:修改 DWStagingAndConfig 数据库

    如果管理包不是由你创建的,则可能需要使用此方法使用新数据库重新生成数据仓库。 因此,建议在继续之前与 Microsoft 支持部门联系。

    运行以下查询:

    Use DWStagingAndConfig  
    Select * from DeploySequenceStaging
    Select DeployItemName, DeploySequenceId, Outcome, StatusID from DeployItemStaging where StatusId =2 and outcome like '%Incorrect syntax near '')''.%'
    -- Click the Sequence field and view the first line.  Confirm that the management pack is one that you created before proceeding
    DECLARE @DeploySequenceID [uniqueidentifier]
    SET @DeploySequenceID = (Select DeploySequenceID from DWStagingAndConfig.dbo.DeployItemStaging WHERE outcome like '%Incorrect syntax near '')''.%')
    Select @DeploySequenceID
    DELETE FROM DWStagingAndConfig.dbo.DeploySequenceStaging WHERE DeploySequenceId=@DeploySequenceID
    DELETE FROM DWStagingAndConfig.dbo.DeployItemStaging WHERE DeploySequenceId=@DeploySequenceID
    DECLARE @BatchID Int
    SET @BatchID = (Select Batchid from infra.workitem where STatusID=2  and ( Charindex('Incorrect syntax near '')''.',CAST([ErrorSummary] AS VARCHAR(MAX)))>0 ) )
    Update infra.workitem SET statusid = 6 WHERE BatchId = @BatchID
    

    不建议为管理包中定义的字段设置默认值。 如果必须设置默认值,请确保它不是空白或多个空格。

  •