您的位置:首页 > 其它

在线生产系统执行 alter table add column type default x ;的分析

2015-07-27 22:15 751 查看
今天开发提交了一个sql:

alter table T_STUDENT add student_auth NUMBER(1) default 0;

--该表是 学生表,是系统的主要业务表,数据170万左右。

开始,没仔细想,直接拿到生产上去执行了,然后发现一分多钟还没完,查看系统锁情况,二十张业务表貌似收到阻塞一直被锁。

赶紧cancel 了。

分析这个动作,add 字段应该很快,只是修改数据字典。然而,添加默认值,等同于 update 全表,也就是锁了全表。

将该语句分解为如下:

alter table T_STUDENT add student_auth NUMBER(1) ;

ALTER TABLE T_STUDENT MODIFY (student_auth default 0);

--批量提交

BEGIN

FOR i IN 1 .. 5 LOOP

UPDATE T_STUDENT SET STUDENT_AUTH = 0

WHERE STUDENT_AUTH IS NULL

AND ROWNUM <=100000;

COMMIT;

END LOOP;

END;

/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: