如果你有這個需求要刪除某一個表格上的某些欄位但是由於這個表格擁有非常大量的資料如果你在尖峰時間直接執行 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 的錯誤發生
From:http://tw.wingwit.com/Article/program/Oracle/201311/17244.html