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