一、通用问题
1.迁移程序启动报错:java.lang.OutOfMemoryError: Java heap space
解决方法:修改启动脚本(bin/startup.bat或bin/startup.sh)中JAVA_MEMORY大小
2.Windows 下启动迁移工具闪退
解决方法:
1)检查 JDK 目录下是否正确放置 JDK
2)使用管理员身份运行迁移工具
3.数据迁移报错:文件签名不被认可
解决方法:修改配置文件(conf/application.properties)中的是否使用遗留二进制拷贝签名为 false (如果原来值为 false,则调整为true)
4.迁移时创建模式报错:syntax error at or near “AUTHORIZATION”
解决方法:检查数据库配置文件(data/kingbase.conf)中是否将 authorization 添加到 exclude_reserved_words 中,如果添加了,移除即可。
二、Oracle 迁移 KES
1.数据迁移报错(源库与目标库编码都为GBK):迁移数据错误,无效的GBK编码字节顺序:0xb4
解决方法:删除目标数据源连接参数 clientEncoding: utf8
2.数据迁移目标端报raw类型不支持,需要在kes目标端安装raw数据类型插件(kes默认是不支持raw类型)。
3.自定义类型的数据不支持copy方式写入,支持insert写入
三、MySQL 迁移 KES
1.数据迁移报错:no unpinned buffers available(没有可用的非固定缓冲区)
解决方法:查看KES数据库共享缓存区大小(show shared_buffers),调整为系统内存的25%
2.迁移报错: Communications link failure
解决方法:
1)增加 socketTimeout 连接参数(单位为毫秒),设置值足够大
2)查询 MySQL 配置中的 max_allowed_packet 值,条件允许的情况下加大此值
3)减小源库游标读取记录数
3.数据迁移报错:Statement cancelled due to timeout or client request
解决方法:设置迁移参数连接超时时间值为0
4.无法获取表结构
解决方法:检查源数据库连接中数据库名称中是否有多余的空格
5.迁移报错:Table read failed: Unknown column datetime_precision in field list
解决方法:选择 MySQL 版本号为 5.5
6.表结构迁移报错:语法错误 在 “COLLATE” 或附近的
解决方法:目标端的配置项【useCollate】参数设置为false
- 表数据迁移报错:无效的 “UTF8” 编码字节顺序: 0x00
解决方法:目标端的配置项【removeNullCharacter】参数设置为true
四、KES 迁移 KES
1.V7 迁移 KES 报错:非法 BigDecimal 值
解决方法:更新 V7 JDBC驱动文件为数据库对应的JDBC驱动(数据库安装目录下),迁移工具驱动所在目录为 drivers/kingbase/v7
五、DM 迁移 KES
1.DM 迁移 KES,无法获取到表结构
解决方法:检查DM数据库连接账号是否为 sysdba,如果使用应用账号,可能会由于账号权限不足导致无法获取表结构信息。
六、Db2 迁移 KES
1.数据迁移报错:DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7;RP_DM.BAINDZZZ001, DRIVER=4.31.10
解决方法:目前表处于“装入暂挂”状态,Db2 针对多次操作一张表的时候,会将表处于挂载状态,需要重组表。在服务器上执行 reorg 命令,DB2 reorg table <TABLE_NAME>,提示 successful 后表示重组成功
2.数据迁移报错:捕获到 java.io.CharConversionException。有关详细信息,请参阅相连接的 Throwable。 ERRORCODE=-4220, SQLSTATE=null
解决方法:在启动脚本中添加参数: -Ddb2.jcc.charsetDecoderEncoder=3
3.interval xxx时间类型数据搬迁后值变为0
解决方法:如果目标端的kes版本是V8R6C7以上版本,在进行数据库连接管理的地方,要选择V8R6C7版本
七、OceanBase 迁移 KES
1.time类型范围超出 00:00:00 ~ 24:00:00的数据搬迁失败
解决方法/限制:
KES Oracle兼容模式本身就放不下这种数据,会迁移失败
KES MySQL兼容模式使用insert方式插入
八、sqlserver迁移KES
- datetime时间类型的9999-12-31 23:59:59:998的表数据,搬迁到目标端后,值变为10000-01-01 00:00:00,这个是数据库自身的行为,与kdts无关。
2.sqlserver sql_variant类型不支持copy方式写入,支持insert写入
九、KES迁移MySQL
- kes数据库中的gis数据类型的表数据搬迁到mysql数据库后,使用select * 进行查询的时候gis类型的表数据库读出来是乱码,需要使用select st_astext() 来查询,这样查询出来的结果显示才是正确的。
十、sqlite迁移kes
- 搬迁的配置文件中需要将readonly配置设置为false,否则会导致搬迁任务失败。