首页 > 开发 > 综合 > 正文

刪除一個拥有大量资料的栏位

2024-07-21 02:33:20
字体:
来源:转载
供稿:网友
        假如你有这个需求,要删除某一个表格上的某些栏位,但是由於这个表格拥有非常大量的资料,假如你在尖峰时间直接执行 ALTER TABLE ABC DROP (COLUMN);可能会收到 ORA-01562 - failed to extend rollback segment number string, 这是因为在这个删除栏位的过程中你可能会消耗光整个RBS,造成这样的错误出现,因此这样的做法并不是一个好方法,就算你拼命的加大RBS空间来应付这个问题,也不会是个好主意。        我的建议做法:        1>        CREATE TABLE T1 (A NUMBER,B NUMBER);        SQL> begin 2 for i in 1 …… 100000 3 loop 4 insert into t1 values (i,100);5 end loop;6 commit;7 end;        SQL> select count(*) from t1;        COUNT(*)        100000        2>        SQL> ALTER TABLE T1 SET UNUSED COLUMN A CASCADE CONSTRAINTS;        不要马上drop column,应该先set unused让column无法使用,避开系统尖峰时间再来处理删除栏位里的资料,要注重的是一但你set unused column,这个栏位是无法再回复使用的。        3>        重点来了,若你的栏位有一百万笔资料,我们应该避免一次写入那么多的undo log,所以我预备每删除一千笔资料就commit一次。        SQL> alter table t1 drop unused columns checkpoint 1000;        Table altered.        在离峰的时间进行这样的动作,应该可以避免 ORA-01562 的错误发生。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表