元数据升级失败怎么办?排查指南速看!

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

元数据升级失败怎么办?排查指南速看!


小编有话说

MC(租户管理中心)是管理苍穹系统不可或缺的工具,其中有一项重要功能是对苍穹系统的升级部署,从补丁官网下载标准补丁包后,运维人员可以使用它一键完成系统的更新升级,也可通过CI/CD流水线工具自动化部署升级。


苍穹系统的升级主要包括集群静态资源微服务JAR包的更新、数据中心升级脚本元数据的部署。每一个环节都必不可少,需要保证升级的准确性。


JAR包升级通常比较顺利,而元数据升级因其部署的复杂性,偶尔会遇到升级失败的情况。当JAR和元数据未同步升级时,会使系统环境中断,整体升级失败。


那遇到元数据升级失败的情况,该如何排查问题呢?本期文章就以小P为例,为大家演示这类问题的排查方法~




1 案例背景


小P在开发环境修改了一个元数据,调整了按钮区的高度后,预期效果应该如下图所示:


图1-调整了按钮区的适合高度


于是提交SVN或Git、启动构建更新测试环境,预览的效果却是下图,按钮区的高度明显大于预期...


图2-更新环境后的预览效果


为了查明具体原因,小P展开了一系列的排查。


2 排查步骤和方法


问题一:元数据没升级成功!升级工具有问题? 


苍穹元数据分为设计时元数据运行时元数据,升级包含设计时部署、运行时重建两个过程。


首先,我们来检查设计时元数据的效果,判断是哪个环节出错,先分别从开发环境和测试环境效果着手。


开发环境的内容区面板设置高度384px,测试环境的内容区面板无高度设置,可以判断,在部署设计时元数据时已发生异常。如下图:


图3-开发环境效果

图4-测试环境效果


接下来,需要找到对应的升级日志,检查这个元数据有没有被更新升级过。检查方法如下:


  • 查找日志并搜索元数据文件


每个环境有独立的升级日志访问地址,找到对应的环境获取对应的升级包,点击进入查看日志,点击“查看详情”查看详细日志,并搜索有问题的元数据数据文件。


图5-查看日志详情并搜索元数据文件


  • 查看是否有 finish字样,或者报错信息


1. 如果有报错,说明元数据没有部署成功,这时通常需要检查提交到SVN上的元数据是否规范完整。

2. 如果有finish字样说明元数据文件确实已经部署过了。

这里搜索的情况是元数据显示finish。日志显示finish代表文件成功升级了。


问题二:文件成功升级了,但是结果不对,是不是升级工具有问题?


苍穹的元数据升级基于元数据文件中的版本号差异,如果版本号和当前环境的元数据一致,则不会被升级。针对这个问题,需要检查元数据版本号的数据,可通过查看dm包中元数据的版本号与数据库中的元数据版本号进行比对,具体步骤如下:


首先,下载并查看dm包中元数据的版本号。


把日志详情中的滚动条拖到最上面,日志中有该dm包的下载地址,下载解压下来,找到问题元数据文件用文本编辑工具打开,找到标签内容。


图6-日志中的dm包的下载地址


然后,比对数据库中的元数据版本号。


在【系统管理】→【查询分析器】中选择元数据库(如果没有元数据库则选择系统库)查询当前环境数据库元数据的版本号进行比对。相关命令如下:


select fversion from t_meta_formdesign where fnumber ='元数据编';



图7-比对数据库中的元数据版本号


结果,发现版本不一致!而且数据库中元数据的创建时间还比较新,那应该确实更新过。出于对DB的信任,小P依然倔强。


问题三:会不会是多份ID相同的元数据先后升级互相覆盖了呢? 


元数据的更新机制是通过元数据id进行内容替换,想到开发中常见的ABA问题,会不会是多份ID相同的元数据先后升级互相覆盖了呢?根据这个思考,小P进一步检查。


搜索整个补丁包发现,确实有两个一模一样的元数据文件分别在不同的应用下。一个在ide应用下,一个在frame应用下。进一步查看datamode.xml,发现ide在frame的后面,ide中的元数据覆盖了frame下的这个元数据。


图8-不同应用下的两个一样的元数据文件

图9-查看datamode.xml文件


问题四:“这咋提交了两个一样的元数据到SVN呢”


小P一看提交记录顿时懊悔不已,原来是之前自己ide提交错了这个文件,而这次新的修改放在了frame下,导致环境中元数据更新后被ide中旧的元数据覆盖了。


3 相关资料


关于更多元数据特性,可查看下方社区文章:


元数据从页面、应用导入、删除增加元数据日志


单据被误删除如何找回


如何实现运行期动态修改表单元数据—以控件的风格、背景色为例


4 划重点


1. 当升级日志中出现“{元数据文件名称}+ 版本一致,不再更新!”的提示时,可以按照上面比较版本的方式进行版本检查:

1) 如果文件中的版本号和数据库中的版本号都是旧的,说明Appstore仓库中的dm包是旧的,元数据文件未更新;

2) 如果文件中的版本号和数据库中的版本号都是新的,则说明当前元数据已经更到最新,应该在上一次或者前几次升级中执行过了;

3) 如果文件中的版本号是新的,数据库中的版本号是旧的,Appstore的地址是固定的,但里面的内容随时都可能更新,可能是升级执行时,元数据文件是旧的并且跟数据库中的版本号一致没有执行更新,而现在Appstore里的dm包内容已经更新,这时只要再执行一次升级即可。


2. 排查是否多份元数据互相覆盖问题,可以按以下方式确认

1) 可以在整个补丁包中进行元数据编码检索,是否有多份元数据文件;

2) 可以将补丁包解压用元数据ID进行全局检索,是否有多份元数据文件。这种方式是比较准确的,因为可能存在ID一致,而编码不一致的情况,直接搜索编码可能检索不到;

3) 可以在升级日志中逐个搜索dm中的日志,检索元数据编码,是否有多次元数据的finish。


3. 同一个dm包中的应用升级是有顺序的,按dm包中datamodel目录下的datamodel.xml中配置的顺序执行。


4. 当升级日志显示元数据为finish时,仅代表当前元数据文件内容已成功写入库中(设计时元数据表),如果同一个元数据有多次更新,最后那次更新将覆盖之前的更新内容,环境运行的内容以最后修改更新的元数据内容为准


5. 类似问题:升级日志中明明显示finish了,系统运行时却报错“xxx元数据不存在”,这种情况通常是有一份ID跟当前元数据一致,而编码不一致的元数据存在。可以用当前报错的元数据ID去查库验证一下,选择【元数据库】,执行以下SQL:检查元数据的编码是否跟当前报错的元数据编码一致


SELECT FID,FNUMBER FROM T_META_FORMDESIGN WHERE FID = 'xxx元数据的ID';




#往期推荐#


# 必看!列表开发典型场景解决方案

这些Git使用小技巧,你知道吗?

全新苍穹低代码开发平台,打造开发新模式

仅一招,实现基础资料“秒级”删除!


更多精彩内容,“码”上了解!↓


元数据升级失败怎么办?排查指南速看!

小编有话说MC(租户管理中心)是管理苍穹系统不可或缺的工具,其中有一项重要功能是对苍穹系统的升级部署,从补丁官网下载标准补丁包后,运...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息