在一个业务繁忙并且数据量巨大的环境中,新增一个字段对于DBA来说都是一个不简单的任务 ALTER_XHL 表记录8000W 行,与之有关的并发业务量非常大,新增带有default值的字段 ALTER TABLE ALTER_XHL ADD ( DDD NUMBER DEFAULT 8 NOT NULL) ; 直接执行的后果是业务全被阻塞,可以用10046跟踪下上面语句是如何执行的。1. 在不需要更改已有纪录新增字段值的情况下(保持已有记录新增字段为NULL),可将上面语句分开3步执行: ALTER TABLE ALTER_XHL ADD (DDD NUMBER ); -----不影响已有记录 ALTER TABLE ALTER_XHL MODIFY(DDD DEFAULT 8 ); -----不影响已有记录,只对新增记录有效 ALTER TABLE ALTER_XHL
add CONSTRAINT ck_null_alter_test CHECK (DDD is not null) ENABLE NOVALIDATE ; -----不影响已有记录(已有记录DDD字段可以为NULL),只对新增记录有效(新增记录DDD 不为NULL)
2.如果原记录新增字段要设成DEFAULT 值,在没有停机维护时间的情况下,只能采用批量手动更新的方式来达到目的
批量更新数据,可以参考:快速批量更新数据
大表新增字段
最新推荐文章于 2024-06-21 08:53:13 发布