You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MDSModelDeploy deployupdate时遇「名称已存在」错误求助

问题描述
  • 已通过MDSModelDeploy工具从Dev环境(MDS1)克隆MASTER_DATA_EDW模型到Test环境(MDS2),执行命令:
    MDSModelDeploy createpackage -model MASTER_DATA_EDW -service MDS1 -package MasterDataEDW_NoData_D_231204.pkg
    MDSModelDeploy deployclone -package MasterDataEDW_NoData_D_231204.pkg  -service MDS2
    
  • 在Dev环境修改某实体的属性数据类型后,使用deployupdate同步到Test环境时失败,报错「名称已存在,请输入不同名称」
  • 通过链接服务器排查发现,Dev和Test环境中同一属性的MUID不匹配;手动修改Test环境属性的MUID无效,撤销Dev的修改后同步仍失败
  • 当前仅能通过删除Test环境对应属性再完成同步,但无法定位未知更新属性,且不能删除/重新克隆模型
解决方案

1. 批量对齐属性MUID及结构差异

MDS的deployupdate依赖MUID识别实体/属性,手动修改单个MUID无效是因为内部关联表(如mdm.tblAttributeValue、mdm.tblAttributeGroupAttribute)的关联关系未同步。可在Test环境执行以下脚本,批量对齐Dev环境的属性配置:

-- 需确保已配置指向Dev环境的链接服务器MDS_DEV
UPDATE t2att
SET t2att.MUID = datt.MUID,
    t2att.DataType_ID = datt.DataType_ID,
    t2att.DataTypeInformation = datt.DataTypeInformation,
    t2att.AttributeType_ID = datt.AttributeType_ID,
    t2att.DisplayName = datt.DisplayName,
    t2att.Description = datt.Description
FROM mdm.tblAttribute t2att
JOIN mdm.tblEntity t2ent ON t2ent.ID = t2att.Entity_ID
JOIN mdm.tblModel model ON model.ID = t2ent.Model_ID AND model.Name = 'MASTER_DATA_EDW'
JOIN MDS_DEV.MDS.mdm.tblEntity dent ON dent.MUID = t2ent.MUID
JOIN MDS_DEV.MDS.mdm.tblAttribute datt ON dent.ID = datt.Entity_ID 
    AND t2att.Name = datt.Name
WHERE t2att.MUID != datt.MUID
  AND (t2att.TableColumn LIKE 'uda%' OR t2att.TableColumn IN ('Name', 'Code'))

执行前务必备份Test环境的MDS数据库,避免数据损坏。

2. 强制同步模型结构

如果MUID对齐后仍无法同步,可使用deployupdate的强制覆盖参数跳过名称冲突校验:

MDSModelDeploy deployupdate -package MasterDataEDW_NoData_D_231204.pkg -service MDS2 -force

-force参数会强制用Dev的模型结构覆盖Test环境中不匹配的部分,不会覆盖业务数据。

3. 优化差异定位脚本

修改排查脚本,直接生成可执行的修复语句,方便批量处理未知差异:

SELECT 
    t2ent.Name AS TEST_ENTITY,
    t2att.Name AS TEST_ATT_NAME,
    t2att.MUID AS TEST_ATT_MUID,
    datt.MUID AS DEV_ATT_MUID,
    -- 生成一键修复SQL
    'UPDATE mdm.tblAttribute SET MUID = ''' + CAST(datt.MUID AS VARCHAR(100)) + ''', DataType_ID = ' + CAST(datt.DataType_ID AS VARCHAR(10)) + ', DataTypeInformation = ''' + datt.DataTypeInformation + ''' WHERE ID = ' + CAST(t2att.ID AS VARCHAR(10)) + ';' AS FIX_SQL
FROM mdm.tblEntity t2ent 
INNER JOIN mdm.tblModel model ON model.ID = t2ent.Model_ID AND model.Name = 'MASTER_DATA_EDW'
LEFT JOIN mdm.tblAttribute t2att ON t2ent.ID = t2att.Entity_ID
FULL OUTER JOIN MDS_DEV.MDS.mdm.tblEntity dent ON dent.MUID = t2ent.MUID 
FULL OUTER JOIN MDS_DEV.MDS.mdm.tblAttribute datt ON dent.ID = datt.Entity_ID
                                        AND t2att.Name = datt.Name
WHERE (t2att.TableColumn LIKE 'uda%' OR t2att.TableColumn IN ('Name', 'Code'))
AND (
    t2att.DataTypeInformation != datt.DataTypeInformation
    OR t2att.DataType_ID != datt.DataType_ID
    OR t2att.AttributeType_ID != datt.AttributeType_ID
    OR t2att.DisplayName != datt.DisplayName
    OR t2att.Name != datt.Name
    OR t2att.Description != datt.Description
    OR t2att.MUID != datt.MUID
    OR datt.MUID IS NULL
)

执行后复制FIX_SQL列的语句在Test环境运行即可批量修复差异。

4. 长期预防方案

  • 每次修改Dev模型后,重新生成包含最新结构的包:
    MDSModelDeploy createpackage -model MASTER_DATA_EDW -service MDS1 -package MasterDataEDW_Updated_D_YYYYMMDD.pkg
    
  • 同步时优先使用deployupdate -force,避免手动修改MUID引发的关联问题
  • 定期用排查脚本对比Dev和Test的模型结构,提前发现MUID或属性差异

内容的提问来源于stack exchange,提问作者efysis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:53:11