本帖最后由 kevin.zhang 于 2011-1-11 15:09 编辑
面临一个问题:
生产库。发现表A集群因子很大,100W行的数据集群因子达到了50W。需要CTAS重建表。可是不允许停止应用,只需允许在线重建。
我是这样设计的,对于目标表A:
create table a_tmp as select * from a;
truncate table a;
insert into a select * from a_tmp order by c1,c2,c3;
commit;
出于业务逻辑正确性的考虑,应该是:
Lock table a in exclusive mode;
create table a_tmp as select * from a;
truncate table a;
insert into a select * from a_tmp order by c1,c2,c3;
commit;
Unlock table a;
但是现在问题是,没发现有什么命令可以很好的锁住一个表。譬如lock命令,在DDL后自动就释放了。而且lock命令也不够强, 虽然可以阻塞其它DML,但是这些DML也会使得truncate失败
有什么办法可以解决这个问题吗?还是说我对于事务逻辑性的考虑多虑了?
|
|