note38:tdsql数据库迁移

数据迁移过程中遇到的具体问题:

①提供给系统团队的表结构与生产不一致,导致脚本报错。因为历史遗留问题,存在部分直接在生产环境更改字段长度或添加索引的情况,导致测试环境和生产环境的表结构不同步。

今后所有生产的变动,一定要先在开发测试环境同步。对数据迁移,需要再三确认并同步生产、开发测试表结构。

②oracle表没有主键,按照对业务场景的理解新加tdsql表联合主键的时候出现了数据重复或主键空值的情况。

需要在演练环境中用生产数据排查,最好新加自增主键,或者对业务背景非常熟悉。

③对新加自增主键的表,代码里用的是insert into (select from)格式,没有指明插入的字段,导致sql报错字段不匹配。Column count doesn’t match value count.

需要对java代码中sql语法等进行书写规范,避免出现select、insert不指明字段的情况。对数据迁移,需要对更改了字段的表再三确认、排查相关代码里是否有问题。

④表编码是utf8mb4_general_ci,出现了没有区分大小写的情况,应该改成utf8mb4_bin。ci 是 case insensitive,不区分大小写,即大小写不敏感,a和A会在字符判断中会被当做一样的。bin 是二进制, a 和 A 会别区别对待(例如运行SELECT * FROM table WHERE txt = 'a', 那么在utf8mb4_bin中就找不到 txt = 'A' 的那一行, 而 utf8mb4_general_ci 则可以)

需要系统团队建库时统一处理。

⑤慢sql较多。除了tdsql库本身的性能问题,还出现了没有提前预知的问题。

主键是默认走索引的,abc3个字段组成了联合主键,如果要索引生效,就必须带上a字段,但是我们很多场景是用b或c字段联表查询,这样联合主键的索引就不会生效,所以需要单独加索引。

部分Where exists(select * from where 索引字段)索引字段未生效,需改成union all。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值