天道酬勤

RDBMS and My Life

如何在一个业务繁忙的大表中增加一个并带有默认值的字段

leave a comment

方法来自Piner的新书《构建Oracle高可用环境》
1.先增加一个字段

sql>Alter TABLE table_name ADD field_name number;

2.把该字段修改为有默认值

sql>Alter TABLE table_name MODIFY field_name DEFAULT 0;

该语句并不修改以前的记录,只是标记以后的记录将会有默认值0,所以,这个语句的执行很快,不会引发阻塞。
3.修改以前的记录,让其有默认值(每修改1000条记录 commit一次)

1
2
3
4
5
6
7
8
9
10
11
12
DECLARE
       row_num NUMBER := 0;
BEGIN
       FOR c_test IN (SELECT ROWID rid FROM table_name t WHERE field_name IS NULL) LOOP
             UPDATE table_name t SET t.field_name = 0 WHERE ROWID = c_test.rid;
             row_num := row_num + 1;
             IF MOD(row_num,1000) =0 THEN
                  COMMIT;
             END IF;
        END LOOP;
        COMMIT;
END;

Written by ochef

March 5th, 2009 at 10:41 am

Posted in Database

Tagged with ,

Leave a Reply