2012年2月7日星期二

重設Oracle資料庫的序列號(Sequence)

在Oracle資料庫裡要重設序列號(Sequence)並沒有直接的方法,小筆用過的方法也只兩種。一種是先刪除(DROP),再重新建立。這個方法當然不太好,因為當有觸發器(trigger)與其有關連時就不能這麼做了。另一種方法是先把序列號的每次遞增量加大,令序列號在拿下面號碼時就達到最大值,令其自己回復到最小值。但當然這個序列號需要有設為循環(CYCLE)才能這樣做。

第一種方法太簡單,在此不作闡述。第二種方法的具體的方法如下。


假設此序列號的最大值是256,而現時序列已去到100。每次遞增量為1。


ALTER SEQUENCE sequence_name INCREMENT BY 156;  --令序列的遞增量每次為156,那下個序列號就是256了。
SELECT sequence_name.nextval FROM dual;  --令序列號達到下個序列號(256),他就會自己重設了。
ALTER SEQUENCE sequence_name INCREMENT BY 1;  --令序列號的遞增量變回原來的值,這裡假設每次遞增1。

這個方法對其他資料庫物件的影響應該是最小的了。

沒有留言:

發佈留言