こんにちは。oracleのシーケンスについて教えてください。
次のようなシーケンスを作成します。

CREATE SEQUENCE SQC_TEST
INCREMENT BY 1
START WITH 1
MAXVALUE 999999
MINVALUE 1
CASHE 20
CYCLE
/

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

A 回答 (2件)

No.1で回答した misoka ですが、


No.1の回答は、全然正確ではなかったようです。
失礼いたしました。

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

参考URL:http://www.sqlpowerpage.co.jp/Sqlcmd/createseque …

この回答への補足

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

補足日時:2002/03/07 12:31
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/01 00:33

ご存知のことかもしれませんので、恐縮ですが、


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

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

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

このQ&Aと関連する良く見られている質問

QSQLite(3.2.2)でauto_increment

今、SQLiteを利用してつまづいています。
バージョンは3.2.2です。(Linux)
MySQL、PostgreSQLの知識はあります。

プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。

CREATE TABLE bbs (
id INTEGER UNSIGNED NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
last_update TIMESTAMP NOT NULL
);

このbbsテーブルに対し、
INSERT INTO bbs (name,message,last_update) VALUES ('name','message','2008-04-03 12:11:00');
というクエリを発行すると
「SQL error: bbs.id may not be NULL」
とういエラーが返ってきます。

確かに、bbsテーブルのidカラムは「NOT NULL」制約があるのでエラーが正しいとは思うのですが、参考URLのauto_incrementの作成方法には、auto_incrementにしたいカラムをPRIMARY KEYでやればできる、のような事が書いてあったので、よく分かりません。


バージョンの問題なのか、クエリに誤りがあるのか分かる方おられましたら解答お願いします。
また、auto_incrementなカラムの作成方法も一緒に教えていただけたら幸いです。

宜しくお願いします。

今、SQLiteを利用してつまづいています。
バージョンは3.2.2です。(Linux)
MySQL、PostgreSQLの知識はあります。

プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。

CREATE TABLE bbs (
id INTEGER UNSIGNED NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
last_update TIMESTAMP NOT NULL
);

このbbsテーブルに対し、
INSERT INTO bbs (name,message,last_update) VALUES ('...続きを読む

Aベストアンサー

> id INTEGER UNSIGNED NOT NULL PRIMARY KEY,
の「UNSIGNED」をはずしてみてください。

QPL/SQLでCREATE SEQUENCEの呼び出し

いつも参考にさせていただいてます。

select文で取得した日付の年下2桁をもとに
順序を取得したいと思っています。

CREATE SEQUENCEは

seq_id_04
seq_id_05
seq_id_06
  :
  
というように年ごとに作成されてあります。

seq_id_yy.nextval
yyを取得した年に置き換えて実行したいのですが、
なかなかうまくいきません。

初めてのPL/SQLのため説明文におかしな部分があったらすみません。
ご存知の方がいましたら、ぜひぜひご教授ください。

Aベストアンサー

こんにちわ。

Execute immediate 文を使えばできる筈です。
先ずは、
 vSQL varchar2(256);
 vSeqNo NUMBER(8);
のように変数が定義されていたとして、
vSQL にSequence をSelect するSQL 文を作成します。
こんな感じです。
→ vSQL := 'SELECT seq_id_' || to_char(sysdate, 'YY') || '.nextval from dual';

そうしたら、
PL/SQL ブロックの中で、
execute immediate vSQL into vSeqNo;
として下さい。

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

Qオラクル:ビューのCREATE文について

こんにちわ。

OEMやOBJECTBROWSERで標記のものが確認できますが、
これらはどのデータディクショナリを参照しているのでしょうか?

とりあえず、ALL_VIEWSで列名は取得できるのですが、FROM句やWHERE句の部分がどのテーブルから引っ張っているのかが分からない。といったところです。

ご存知の方、どうぞよろしくお願いします。

Aベストアンサー

VIEWの元データを確認したいのであれば、USER_VIEWSの列:TEXTを参照してください。

select text from user_views where view_name=[知りたいView名(大文字ですよ)];

QDB2 create tableコマンドでエラーになる

現在redhat9にdb2 v8を導入しています。
そこでテーブルを作成したいのですが、エラーとなりうまくいきません。
どこを修正すればテーブルが作成できるのか教えてください。
また、テーブル作成後に値を入れたいのですが、insertについてのコマンドのアドバイスもお願いします。

CREATE TABLE emp (empno INTEGER ,ename CHAR2(10) ,mgp INTEGER,sal NUMERIC(5,2) ,deptn INTEGER);

INSERT INTO EMP VALUES(221000,'TAYLOR',220000,880.60,220000);

よろしくお願いします。

Aベストアンサー

CREATE文を拝見した所、「ename」の列のデータ型が間違っています。

CHAR(10)かVARCHAR(10)になります。
CHARとVARCHARの違いが分からないようでしたら再度質問していただけると助かります。

おそらくOracleのVARCHAR型とVARCHAR2型が存在しているというところで混乱されているかと存しますが。。


INSERT文については特に問題はなのですが出来れば以下のように記述するとよろしいかと思います。


INSERT INTO EMPempno,ename,mgp,sal,deptn) VALUES(221000,'TAYLOR',220000,880.60,220000);

以上宜しくお願い致します。


このカテゴリの人気Q&Aランキング

おすすめ情報