首页 > 数据库 > 国内数据库 > GBase8g向GBase8s数据迁移
因业务需求,需要将以往项目使用的GBase 8g 数据库 中的数据, 迁移到 G base8s 数据库中 。在此记录 迁移 遇到的一些问题和解决方法。
将GBase 8g 的数据成功迁移到 G Base8t 后 ,原有程序功能可以正常运行
n 自定义排序
1 、问题描述 :
由于业务需求,需要将某个字段根据自定义顺序进行排序。
例如 :数据中 filedA 的值保存为 1,2, 3 数值形式 , 但页面上要以1,3,2 的顺序进行展示
在 G Base8g 中可以使用 order by Filed( 字段 , 1,3,2 ) 的方法进行自定义排序,但迁移后在 G Base8s 中无法使用这样的方法 。
2 、解决方法:
可以引用临时表的方法 来 实现该需求 。
建排序临时表“ sort_table ”,定义字段: sort_seq 排序号, sort_name 排序字段。
将需要自定义的排序顺序保存到sort_name 中,对应的 sort_seq 写实际的顺序
例如 :
|
sort_name |
sort_seq |
|
1 |
1 |
|
3 |
2 |
|
2 |
3 |
使用:join sort_table st on 字段 =st.sort_name order by st.sort_seq 的方式来实现自定义排序
n distinct 数据内容
1 、问题描述 :
在原有系统中,初始设计简单,没有考虑sql 优化问题,数据查重直接使用如下语句
select distinct * from 表 A where XXX;
其中表A 包含 blob ,text 等大对象字段 。 GBase8s 对 sql 要求严格 , distinct 大对象字段是不推荐使用的
2 、解决方法 :
优化数据结构及sql 语句,尽量将不常用的大对象字段与经常使用的字段在数据表中拆分开来,在 distinct 时只针对需要查重的字段进行操作,并使用索引。
n 字段是关键字
1、 问题描述
在GBase8g 中,current 不是系统关键字,设计数据表时使用 current 作为当期值的字段名称。但迁移到 G Base8s 后 , current 是系统关键字 。 程序中查询current 的 sql 无法顺利执行 。
2、 解决方法:
将查询sql 优化 , 改写为 表名. 列名的方法进行数据查询 。
n 日期格式
1、 问题描述
在GBase8g 中,日期格式若插入值为空时,默认的日期格式是填充空串
'0000-00-00 00:00:00' 。在GBase 8s 中不允许空串插入日期格式 , 在数据迁移时会报异常 。
2、 解决方法:
在G Base8g 数据库中 ,将内容为空串的日期修改为正确的统一初始值,之后再进行数据迁移。
n 数据表迁移顺序
1、 问题描述
在GBase8g 与G Base8s 的数据迁移工具中 , 只有数据表与数据的迁移步骤 。若表中有索引、自增列或视图时,在用迁移工具进行数据表和数据的迁移后,很难一次性将索引、视图等建立成功。
2、 解决方法:
迁移数据结构后,先维护数据表的自增列,然后再执行建视图语句,最后再 迁移数据 :
因为迁移结构时,无法将自增列迁移过来。而若在视图中存在表数据类型,在迁移视图后,则无法成功修改数据表的自增列。最后进行数据的迁移,是因为若数据量大,在迁移数据后再修改自增列很可能会提示临时空间不足导致失败。
另外需要注意的是,若在G Base8s 建库时,选择的是无日志模式,那么在迁移数据后,需要修改数据库的日志模式:因为无日志模式数据库不支持事务,会导致程序启动报错 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980390/viewspace-2714647/ ,如需转载,请注明出处,否则将追究法律责任。