• ベストアンサー

Oracle8iで順序の値のリセット

Oracle8.1.5上で現在稼動している順序があります。 わけあってこの値をスタート時の値1にリセットしたいのです。 どのような方法があるでしょうか? DROP SEQUENCEしてCREATE SEQUENCEは避けたいのですが どなたかご存知の方お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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に直して置いてくださいね。)

AnotherCuba
質問者

お礼

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

その他の回答 (2)

回答No.2

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になりません。 ただし、シーケンスのリセットを行う場合、シーケンスを誰も利用しないタイミングでないと 値をコントロールするのが難しいです。

AnotherCuba
質問者

お礼

ありがとうございます。 increment by でマイナス値とは思いもつきませんでした。 いろんな手法があるんですねえ。 はいサービス外時間に行なうことにします。

回答No.1

シーケンスを1に戻す方法はありません。 必ず、DROP,CREATEが必要です。 Oracleのサポートに加入すれば見れるオフィシャルなページでも 明文化されています。残念ですがおあきらめください。

関連するQ&A