• ベストアンサー

オラクルのシーケンスについて

オラクルのシーケンスですがCACHEを指定しないときはデフォルト20がとられるとのことですが、NEXTVALで採番したシーケンスがいきなり増分20で返されることはあるのでしょうか。 ex.1からNEXTVAL後21が戻される

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

  • ベストアンサー
  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.4

他の回答のまとめっぽくなりますが、 CACHEがらみで起きる番号飛びは以下のパターンがあります。 seq_XX: start with 0 incremented by 1 cache 20 1. seq_XXnextval実行 → 1 2-A.インスタンス再起動 or 2-B. 共有プールクリア(alter system flush shared_pool) 3. seq_XXnextval実行 → 21 (想像で書いたので数値が1ズレてたりしたらごめんなさい) 2-Bは、シーケンスを共有プールに固定(dbms_shared_pool.keep)することで回避可能ですが、2-Aは回避不可能です。 かといって、CACHEしないと採番のたびに毎回オブジェクトアクセスが発生するので、パフォーマンス的にトレードオフとなってしまいますね。(かなり頻繁にアクセスしないのであれば、気にならない程度だと思いますが)

namidame_dion
質問者

お礼

詳しい説明ありがとうございました。 共有プールクリアってoracleが勝手に行うのでしょうか?

その他の回答 (6)

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.7

No.5ですが、補足です。 「共有プールクリアは勝手には行われない」と書きましたのは、 「”alter system flush shared pool”は勝手には行われない」という意味で、No.6様のおっしゃるとおり、あまりアクセスされないオブジェクトがキャッシュアウトすることはありえます。 そういった場合は、CACHE確保していた分、シーケンス番号が飛ぶことになりますね。

namidame_dion
質問者

お礼

No5のご回答とあわせてありがとうございました。よくわかりました。

  • ttschool
  • ベストアンサー率28% (18/64)
回答No.6

共有プールのキャッシュ情報が削除されるタイミング 管理方式は、バッファキャッシュなどと同じです。 すなわち、「使用されてから最も時間が経過した」データを共有プールから削除します。(共有プールのキャッシュが不足した場合) アルゴリズムでいうと、LRUリストです。

namidame_dion
質問者

お礼

そうなんですね。複数シーケンスオブジェクトを利用している場合は番号とびしやすいということでしょうか。的確なご回答ありがとうございます。

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.5

>共有プールクリアってoracleが勝手に行うのでしょうか? 勝手に行われることは決してありません。 また、ALTER SYSTEM権限が必要となるので、一般ユーザでは実行不可能です。(SYS,SYSTEMやDBA権限を付与されたユーザなどであれば可能)

  • trictrac
  • ベストアンサー率38% (10/26)
回答No.3

ちなみに、インスタンス再起動しなくても キャッシュが破棄される場合もありますよ。 どうしても保障したい場合は、CACHEを1にして置くと良いと思います。 但し、CACHEが1でも100%は保障できないので、 欠番は発生しますが。

namidame_dion
質問者

お礼

へーえ、CASHE1でも欠番が発生するときがあるんですか。 知りませんでした。解説ありがとうございました。

回答No.2

DBインスタンスを再起動した際に、キャッシュされていた分が クリアされてしまい、次のNEXTVALで番号が抜ける場合が あります。 ex) seq.nextval = 3 ⇒ 再起動 ⇒ seq.nextval = 21 また共有プールのメモリフラッシュなどによっても、キャッシュ されているシーケンスが抜ける場合などもあります。 共有プールのメモリフラッシュはシーケンスをPINしておけば 回避することができます。

namidame_dion
質問者

お礼

わかりやすいご回答ありがとうございます。 PINて何でしょうか?

  • trictrac
  • ベストアンサー率38% (10/26)
回答No.1

NEXTVALはincrement byで指定した分でしか 戻されませんよ。

namidame_dion
質問者

お礼

速攻でお返事いただき、ありがとうございました。 キャッシュ指定の場合、飛ぶこともあるみたいなんです。

関連するQ&A