在一個業務繁忙併且數據量巨大的環境中,新增一個字段對於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 值,在沒有停機維護時間的情況下,只能採用批量手動更新的方式來達到目的
批量更新數據,可以參考:快速批量更新數據