ORACLE的TRUNCATE命令,慎用。

最近上线了个新功能,把3个表的数据转到另外3个表里。大概是这样:

1、清空A1、B1、C1表

2、将A2、B2、C2表的数据放到A1、B1、C1中(对应表的表结构完全一致)

3、清空A2、B2、C2表

1、3中用的truncate,2用的insert select from

测试时没问题,上线后发现有问题,有时候1表和2表都没数据,有时候1表有了2套数据。总之没见到正常的时候。

程序log正常、oracle的log(v$sql)也正常。

但是在看oracle的log时,发现了一点蛛丝马迹,就是truncate执行时,oracle会lock相应的表。

所以猜测是不是因为锁和insert发生了什么冲突导致的问题。

下一步打算把truncate换成delete,但因为投产流程比较长而且这个bug不影响目前的功能,所以等有结果后再来更新。

==========================================================

终于更新了。但是结果还是让人很晕。

truncate换成delete后,原来的问题还是没有解决。忽然想起我们的服务器是负载均衡的,然后去和运营的同事确认了一下,被告知由于我的功能是定时任务,加载到服务器里的,所以执行时,每台服务器都会跑一次,又由于我的功能是即有删除也有生成。加载时肯定会有毫秒级的先后,所以导致了结果的不确定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值