dポイントプレゼントキャンペーン実施中!

Oracle8.1.5上で現在稼動している順序があります。
わけあってこの値をスタート時の値1にリセットしたいのです。

どのような方法があるでしょうか?
DROP SEQUENCEしてCREATE SEQUENCEは避けたいのですが
どなたかご存知の方お願いします。

A 回答 (3件)

DROP SEQUENCEしてCREATE SEQUENCEは避けたい


→理由はNo2の方がおっしゃっているようにinvalidが付く
 可能性があるからでしょうか?

どちらにしろ完全に業務が停止しているときにやらないと
非常に危険ですので、あまりALTERはオススメしませんが
権限など何か他の理由などでDROP,CREATEができないのであれば

1.
select TEST_SEQ.currval from dual;
100

2.
ALTER SEQUENCE TEST_SEQ MAXVALUE 100 CYCLE;

これでもし万が一、1個目のSQLと2個目のSQLの間に誰かが
シーケンスを更新したとしても2個目のSQLはエラーになってくれるはずです。
(2のSQL実行後、現在のシーケンス値が1に戻ったのを確認したら
 必要に応じてCYCLEはNOCYCLEに直して置いてくださいね。)
    • good
    • 0
この回答へのお礼

なるほど、そうですねえ。
サイクリックのMAX値をカレント値にすれば戻りますもんねえ。
現在すでにCYCLE指定なんですが
MAXVALUEを一時的に替えて1に戻します。
ほんとうにありがとうございました。

お礼日時:2007/02/13 11:22

alter sequence TEST_SEQ increment -10 nocache;


select TEST_SEQ.nextval from dual;
alter sequence TEST_SEQ increment 1 cache 20;

のように、一時的に増分値を負の数に変更することで、カレントを戻すことが可能です。
drop and createの場合、依存オブジェクトがinvalidになりますが、alterを使った手法の場合
invalidになりません。

ただし、シーケンスのリセットを行う場合、シーケンスを誰も利用しないタイミングでないと
値をコントロールするのが難しいです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
increment by でマイナス値とは思いもつきませんでした。
いろんな手法があるんですねえ。

はいサービス外時間に行なうことにします。

お礼日時:2007/02/13 11:17

シーケンスを1に戻す方法はありません。


必ず、DROP,CREATEが必要です。
Oracleのサポートに加入すれば見れるオフィシャルなページでも
明文化されています。残念ですがおあきらめください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す