页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

概述

在进行两个服务器间的知识库迁移之前,务必留意以下关键注意事项,并提前完成相应的检查与准备工作,以有效规避迁移过程中可能出现的错误,从而节省因问题处理所产生的时间成本与人力成本。


注意事项列表

注意事项1:备份“目标环境”的知识库

...

注意事项2:“知识库备份/恢复”工具的选择

”备份恢复工具的选择

比如从Oracle备份出来,由于oracle中知识库的表都是大写,因此备份文件中的表的建表语句都是 create table T_USER(xxxxxx)。使用该语句恢复到其他数据库,比如区分大小写的达梦数据库时,在达梦数据库中生成的表便是T_USER,而实际上区分大小写的达梦数据库,产品所需要的表是小写的t_user。

但是如果在确认两者的大小写策略一致的情况下,使用数据库工具备份是否更高效?更不容易出问题。

注意事项3:检查源环境与

2、备份知识库会进行“系统检查”,若以下项检查出问题,则建议修复之后重新备份。

表结构

2、注意源环境知识库表名、列名 与目标环境知识库表名、列名大小写的策略是否一致。

尤其是目标环境为达梦数据库

3、注意源环境知识库与目标环境知识库的表数据大小写策略是否一致。

若源环境知识库表数据区分大小写,则在使用过程中可能在知识库中产生数据一样只是大小写不一样的数据。比如在源环境中可以创建2个用户,名称分别为Zhangsan、zhangsan,这两个用户由于知识库表数据区分大小写,因此数据库会认为是两条不一样的数据,是可以正常保存的。

此时若目标环境表数据并不区分大小写,则将源环境知识库恢复到目标环境 或将源环境的“用户管理“模块”导入到目标环境时,目标环境的知识库会认为 Zhangsan、zhangsan是同一条数据,而用户名称字段刚好是主键,因此就会出现主键冲突。系统抛错违反唯一约束。

解决方案有以下两种:
1)修改目标环境知识库为表数据大小写敏感。具体修改方式可参考数据库工具文档。

2)修改备份文件/导出文件中对应表的xml,使用编辑器打开xml文件,将其中一条记录如zhangsan,统一修改为其他数据如zhangsan1。保存xml文件之后重新恢复/导入。
注:但此种方案并不适用于所有场景,如果主键冲突的数据是通过数据源的数据库管理添加到smartbi中的表名、字段名等,是无法通过此种方式处理的。

...

由于知识库的迁移会覆盖目标环境的知识库,因此在进行迁移之前,需要先备份“目标环境”的知识库。后续若有需要找回目标环境的也有资源时,可通过留存的备份文件进行找回。



注意事项2:检查源环境与目标环境数据库的以下信息是否一致

检查内容备注
表数据大小写策略是否一致

强烈建议源环境与目标环境数据库表数据大小写策略保持一致,否则较容易出现迁移失败的情况。

注意
title注意

若源环境知识库表数据区分大小写,则目标环境知识库表数据也必须区分大小写!


数据库字符集等是否一致

Smartbi系统在知识库中创建表时,并未在建表语句中指定字符集,而是使用数据库设置的字符集。当源环境与目标环境知识库字符集不一致时,容易出现问题。

例如源环境知识库为UTF-8,目标环境知识库字符集为GBK,通常都会恢复失败或恢复后服务器启动失败,需要保证两个环境知识库字符集一致。

表名大小写策略是否一致建议源环境、目标环境数据库的表名大小写策略保持一致。例如源环境数据库为大小写敏感,那么目标环境数据库也建议设置为大小写敏感
列名大小写策略是否一致建议源环境、目标环境数据库的列名大小写策略保持一致。例如源环境数据库为大小写敏感,那么目标环境数据库也建议设置为大小写敏感


典型案例

某项目源环境的知识库为MySQL(表数据大小写敏感),目标环境的知识库为达梦8(表数据大小写不敏感)。在源环境中备份知识库,恢复到目标环境时,恢复失败,错误信息中提示了 “违反表[t_parameter]唯一性约束条件”

通过跟踪,发现该项目在源环境中,某个数据源创建了2个参数,名称分别是ProName和 proname,系统自动为这两个参数生成了ID,分别为 PARAM.数据源名称.ProName 和 PARAM.数据源名称.proname。参数信息储存在知识库的t_parameter表中,ID字段为该表的主键,此时因为源环境的MySQL数据库表数据是区分大小写的,因此PARAM.数据源名称.ProName 和 PARAM.数据源名称.proname 被认为是两条主键不一样的数据,因此这两个参数可以正常使用和保存。

当将源环境的知识库恢复到目标环境的知识库(达梦8 表数据大小写不敏感)时,由于达梦数据库的表数据是不区分大小写的,所以会识别 PARAM.数据源名称.ProName 和 PARAM.数据源名称.proname 是主键相同的数据,存在主键冲突,因此数据库层面抛出了错误提示“违反表[t_parameter]唯一性约束条件”。

在这个案例下,解决方案有以下两种方式:

1)修改目标环境知识库为表数据大小写敏感。推荐此方案!

2)在备份文件backup.zip中找到t_parameter表对应的xml文件,使用文本编辑器打开xml文件,通过F5搜索其中一个参数,并将其ID和名称进行修改。

比如搜索“proname”,并替换成"proname2",即通过修改xml的方式,将参数proname的ID和名称修改为 PARAM.数据源名称.proname2 和 proname2。

将修改后的xml文件覆盖到知识库备份文件中,重新进行恢复。

但此种方案存在以下问题

a 修改过程极易出错

b 无法保证涉及到该参数的其他表也一并进行修改

c 对于业务数据库本身存在同名但大小写不同的表、字段名这种场景,无法通过此方式进行处理。如业务数据库为 Mysql区分大小写,存在表 Orders 和表 order。当出现本案例中的问题时,无法直接修改表的名称为其他名称,这种修改方式会导致表名不正确。


注意事项3:“知识库备份/恢复”工具的选择

当进行迁移的源环境知识库和目标环境知识库并不是同一种数据库类型时(如源环境为MySQL、目标环境为Oracle),并不推荐使用数据库工具对数据库进行备份和迁移,因为不同数据库的语法存在较大的差异。更推荐使用Smartbi系统中的备份知识库、恢复知识库功能进行知识库的迁移。

详情可参考:备份知识库恢复知识库


注意事项4:备份知识库时若提示系统检查存在问题,建议先进性修复

在“备份知识库”时,系统会自动进行系统检查,该步骤是为了提前发现当前环境知识库存在的问题,如表是否存在主键丢失等情况。

Image Added

若提示出现以下问题,建议先对当前环境进行修复后,再重新备份知识库。

Image Added



注意事项5:目标环境为达梦的特殊注意事项

若目标环境知识库为达梦数据库,则除了上述事项外,还需要注意:当源环境知识库为MySQL、Oracle、SQL Server、PostgreSQL时,达梦数据库的兼容模式需要设置成对应的模式。

可通过以下语句查询达梦数据库的兼容模式
SELECT * FROM V$PARAMETER WHERE NAME = 'COMPATIBLE_MODE';

Image Added


如何修改达梦数据库的兼容模式,建议通过网上或AI搜索。