• 締切済み

oracleのシーケンスについて

こんにちは。oracleのシーケンスについて教えてください。 次のようなシーケンスを作成します。 CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 999999 MINVALUE 1 CASHE 20 CYCLE / この時、キャッシュ分の20という値は、いつどこでクリア?されるのか知りたいのです。 一番最初はシーケンスをクリエイトした時にキャッシュが20確保されると思うのですが、次にキャッシュが確保されるタイミングっていつなんでしょう? 最初の20を使い果たした時?それともシーケンスを作成してあるインスタンスをリブートした時?? というのは、設定したシーケンスが、実際発番していないのに一日ごとに20ずつカウントされていってるので原因をつきとめたいのです。 とりあえずはNOCACHEに設定してありますが、原因がわかれば、と思い質問させていただきました。 何かアドバイスいただけたらと思います。宜しくお願いいたします。

みんなの回答

  • misoka
  • ベストアンサー率35% (56/160)
回答No.2

No.1で回答した misoka ですが、 No.1の回答は、全然正確ではなかったようです。 失礼いたしました。 参考URLを参照してみてください。 キャッシュは、最初の要求で確保され、次回の確保は 「CACHE要求」があったときのようです。 システム障害が発生すると、キャッシュされた番号が 失われる可能性がある、と書かれています。

参考URL:
http://www.sqlpowerpage.co.jp/Sqlcmd/createsequence.htm
sunnys
質問者

お礼

遅くなりましたが、これ以上待っても他のアドバイスをいただけないようなのでこの辺で締め切らせていただきます。 misokaさん、アドバイスありがとうございました。 勉強になりました。 また何かありましたらよろしくお願いしますね。

sunnys
質問者

補足

こんにちは。回答ありがとうございます。 参考URL拝見しました。大変勉強になりました。 しかし、まさしくその、「次にCACHE要求がある」タイミングが いつなのか、というのを知りたいのです。 また何かわかりましたら教えてください。 宜しくお願いします。

  • misoka
  • ベストアンサー率35% (56/160)
回答No.1

ご存知のことかもしれませんので、恐縮ですが、 CACHE は、次回の採番を高速に行うために、 あらかじめメモリ上に展開しておく順序番号の量のことです。 ですから、20を指定しているなら、常に20分確保されている のではないか、と思います。 振り出される番号がおかしいのなら、試しに ORDER を指定 してみるというのも手かもしれません。

関連するQ&A