系统迁移

在实际项目中会有迁移合并正在使用中的环境的需求,本文将以把B环境迁移合并到A环境为例,介绍如何迁移合并两个环境。

TIP

迁移前准备工作如下:

  1. 防止迁移过程中出现不可控的错误,迁移之前请备份目标环境default数据源库
  2. 确保两个环境的版本号相同,若不同请更换相同的war
  3. 获得被迁移系统的所有数据源信息

迁移合并系统的主要步骤为:

  1. 迁移数据源配置
  2. 备份恢复项目元数据
  3. 迁移权限数据
  4. 迁移文件数据源

#系统迁移步骤

#迁移数据源配置

在A系统中添加B系统中的所有数据源连接(详见数据源连接),此处需要添加ODS数据源

添加数据源

当需要迁移的数据源较多时,可以在B系统的系统数据项目下,进入资源模块,导出data-source下的所有项目,再导入到A系统的相同位置即可

导出数据源

#备份恢复项目元数据

备份元数据步骤如下:

  1. 在B系统的系统设置-备份页面中,点击立即备份生成备份包

  2. 备份日志列表中,点击下载新生成的备份包

    备份

恢复元数据分为以下两部分:

  • 恢复项目元数据:恢复备份包中的模型、仪表板、表单等元数据
  • 迁移系统权限数据:包括部门、用户、用户组、用户组成员、权限数据,分别对应default数据源中的SZSYS_4_DEPTSSZSYS_4_USERSSZSYS_4_USER_GROUPSSZSYS_4_USER_GROUP_MEMBERSSZSYS_4_PERMISSIONS

恢复元数据步骤如下:

  1. 在A系统的系统设置-恢复页面上传备份元数据步骤中下载的备份包
  2. 选择需要恢复的项目列表中勾选B,不勾选恢复系统设置

WARNING

由于元数据恢复功能支持将备份包中的权限数据覆盖到当前系统,所以此处根据对权限迁移的实际需求不同有不同的处理方式,常见情况及其处理方式见迁移权限数据

#迁移权限数据

迁移权限数据常见需求及处理方式如下:

  • 使用迁移目标系统权限数据:在元数据恢复时不勾选恢复用户和权限数据

  • 使用被迁移系统权限数据:在元数据恢复时勾选恢复用户和权限数据

  • 选择性保留双方权限数据:在元数据恢复时不勾选恢复用户和权限数据,手动处理权限数据,步骤如下:

    1. 备份两系统权限相关数据
    2. 在A系统中连接B系统default数据源,将B中的权限相关系统表以新表的方式导入A系统
    3. 插入权限数据,顺序依次为部门,用户,用户组,用户组成员,权限。
    4. 备份当前权限信息表
    5. 删除不需要的权限数据,顺序依次为权限、用户组成员、用户组、用户、部门
    6. 合并部门信息

#使用迁移目标系统权限数据

若合并后的系统中,不需要原B系统的权限设置,则在元数据恢复时不勾选恢复用户和权限数据,点击恢复即可完成元数据恢复

不处理权限数据

#使用被迁移系统权限数据

若合并后的系统中,使用原B系统的权限设置,且A系统中的权限设置不再使用,则在元数据恢复时勾选恢复用户和权限数据,将备份包中的权限数据覆盖当前系统中的数据,然后点击恢复即可完成元数据恢复

覆盖权限数据

#保留双方权限数据

本次迁移合并需求为保留A系统中的"上级单位" "外单位"部门,B中的"无锡市市场监督管理局"部门,并合并dev、赛思部门,保留所有用户组,因此在元数据恢复时不勾选恢复用户和权限数据,点击恢复完成项目元数据恢复

不处理权限数据

为实现需求需要手动处理权限相关数据,具体步骤如下:

  1. 防止处理权限数据时出现误操作,需要先备份相关表,推荐使用CREATE TABLE SZSYS_4_DEPTS_SJZT AS SELECT * FROM SZSYS_4_DEPTS语句

  2. 在A系统中连接B系统default数据源,将B中的权限相关系统表以新表的方式导入A系统,具体方法如下:

    • 进入恢复的A项目,将原A系统default数据源添加到数据中台系统中,命名为ZHJGDEFAULT

    • 右键点击ZHJGDEFAULT中的部门表(SZSYS_4_DEPTS),选择开始加工

      导入权限信息1

    • 给模型添加输出节点,设置目标物理表为default/SDI/SZSYS_4_DEPTS_B,并提取数据

      导入权限信息2

    • 依次导入用户、用户组、用户组成员、权限数据,物理表名依次为SZSYS_4_USERS_B、SZSYS_4_USER_GROUPS_B、SZSYS_4_USER_GROUP_MEMBERS_B、SZSYS_4_PERMISSIONS_B

  3. 插入权限相关数据,可使用数据库管理工具或直接运行INSERT语句的方式,顺序依次为部门,用户,用户组,用户组成员,权限。插入时注意:

    • 确保各表主键字段数据不重复,重复部分以A系统优先,可使用NOT EXISTS(SELECT 1 FROM t1 WHERE t1.PK=t2.PK)语句
    • 用户组成员、权限确保导入的用户、用户组数据在当前系统是存在的,可使用EXISTS (SELECT 1 FROM t1 WHERE t1.GROUP_ID=t2.GROUP_ID)
  4. 备份当前权限信息表,方法与步骤1相同

  5. 删除权限相关数据,可使用数据库管理工具或直接运行DELETE语句的方式,顺序依次为权限、用户组成员、用户组、用户、部门。删除时注意:

    • 部门表以SZ_PID字段记录部门层级,因此通过SZ_PID0=xx条件筛选出部门ID为xx的部门及其所有下级部门的权限数据
    • 权限表中OWNER_TYPE字段记录权限拥有者类型,'u'为用户,'g'为用户组,语句中需要增加类型的判断,例如WHERE t2.USER_ID=t1.OWNER_ID AND t1.OWNER_TYPE='u')
  6. 合并部门信息,可使用数据库管理工具或直接运行UPDATE语句的方式,例如将dev(DEPT_ID为'01')和赛思(DEPT_ID为'Succez')合并步骤如下:

    1. 在用户表中将DEPT_ID为'01'的DEPT_ID列修改为'Succez'
    2. 在部门表中删除dev部门

本次迁移权限数据SQL如下

#迁移文件数据源

经过以上步骤,B项目已经合并迁移到了A项目所在的系统中来,但由于文件数据源不包含在元数据内且目前文件数据源不支持导出,所以需要在服务器中手动将文件数据源迁移,步骤如下:

  1. 进入原B项目所在服务器的workdir/cluster-share/data-files/B目录,拷贝该目录下的所有文件到A项目所在服务器的相同目录下,工作目录在/Tomcat/bin/setenv.sh下配置,详见此处
  2. 重启Tomcat

#迁移完工验证

经过以上步骤,迁移合并系统已完成,需要对迁移后的系统进行相关测试,确定该系统下的项目都能稳定运行,大致范围如下:

  1. 数据源:连接其他数据库
  2. 数据:上传数据文件,数据加工,SQL查询等
  3. 分析:设计、分享、评论仪表板
  4. 表单:设计表单、流程并发布表单应用
  5. 应用:设计门户
  6. 资源:管理系统资源,如新建、删除、移动、复制资源等
  7. 系统设置:设置系统登录页