打印

如何刪除一個拥有大量资料的字段

如何刪除一個拥有大量资料的字段

如果你有这个需求,要删除某一个表格上的某些字段,但是由于这个表格拥有非常大量的资料,如果你在尖峰时间直接执行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 的错误发生。

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-9-5 14:34 京ICP证060528 号

Designed By 17DST