分类(Oracle)
[转载]如何刪除一個拥有大量资料的字段
2010/02/21 16:12

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

 

 原文地址 http://www.odba.idv.tw/
Tags: Oracle
来自:[转载]
相关日志:
+引用(0) |
发表评论
昵称  密码  游客无需密码
网址  电邮  注册
验证码 请输入左侧图片中的字符
记住我