- ベストアンサー
Oracle8iで順序の値のリセット
Oracle8.1.5上で現在稼動している順序があります。 わけあってこの値をスタート時の値1にリセットしたいのです。 どのような方法があるでしょうか? DROP SEQUENCEしてCREATE SEQUENCEは避けたいのですが どなたかご存知の方お願いします。
- みんなの回答 (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に直して置いてくださいね。)
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
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になりません。 ただし、シーケンスのリセットを行う場合、シーケンスを誰も利用しないタイミングでないと 値をコントロールするのが難しいです。
お礼
ありがとうございます。 increment by でマイナス値とは思いもつきませんでした。 いろんな手法があるんですねえ。 はいサービス外時間に行なうことにします。
- whiteline507
- ベストアンサー率63% (47/74)
シーケンスを1に戻す方法はありません。 必ず、DROP,CREATEが必要です。 Oracleのサポートに加入すれば見れるオフィシャルなページでも 明文化されています。残念ですがおあきらめください。
お礼
なるほど、そうですねえ。 サイクリックのMAX値をカレント値にすれば戻りますもんねえ。 現在すでにCYCLE指定なんですが MAXVALUEを一時的に替えて1に戻します。 ほんとうにありがとうございました。