• ベストアンサー

NEXT EXTENTのサイズが0

こんにちは Oracleのテーブルを作成するときに ExtentのINITIALを1KB、Nextを0KB、 MAXEXTENTSをUNLIMITEDで設定した場合 1KB以上のデータを入れた場合Oracleとしては どのような動作になるのでしょうか? 実際にやってみると明らかに1KB以上のデータを 挿入しているにもかかわらずエラーが発生しません。

  • Oracle
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

ローカル管理表領域と旧来のディクショナリ管理表領域と異なり一部制限されて自動化されています。 STORAGE 句は下位互換のために自動的に変換されています。 参考: http://biz.rivus.jp/technote507015.html AUTO ALLOCATEを使用しているということですから エクステントのサイズは64KB~4MBの可変でMAXEXTENTは指定できませんから勝手に拡張されていきます。 2^31エクステントはオラクルの上限です。 下のURLのスキルアップ講座はわかりやくまとめられた資料ですのでぜひ参考にしてください。 http://otn.oracle.co.jp/skillup/oracle9i/index.html 第3部 テーブルの設計 に書かれています

harukachan
質問者

お礼

早速のご回答ありがとうございます。 スキルアップ講座見てみました。 判りやすく記述してあり理解できたと思います。 もう少し、この講座内容を見てみます。

その他の回答 (1)

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.1

データブロックサイズは最低でも2KB以上だからだと思いますが ローカル管理表領域かディクショナリ管理表領域なのかによって変わるような気がします。 ローカル管理表領域ならUNFORMかAUTO ALOCATEによって変わると思います。 自分の環境がどんなバージョンのどんな表領域でデータブロックサイズがいくつかを調べて、さらに調査してみてはどうでしょう?

harukachan
質問者

お礼

ありがとうございます。 Oracleバージョンは9.0.4で表領域管理はローカル管理 でAUTOALOCATEになっていました。 この場合、NEXT 0であってもOracle側で勝手に拡張し てくれるのでしょうか? 管理者マニュアルを見たのですが力不足で理解できま せんでした。 それともう一つ解せない動きでMAXEXTENTSを指定して いるにもかかわらず2147483645という値が設定されて しまいます。 これもAUTOALLOCATEであるからなのでしょうか? 質問ばかりで申し訳ありません。

関連するQ&A

  • create table時のINITIALとMAXEXTENTSの決定について

    基本的な事ですみません。 オラクルのホームページから、 表、索引に必要な領域サイズを見積もった所 あるテーブルが1.8G(表1.4G+索引0.4M)と出たとします。 このテーブルをcreate tableで作成する場合 INITIAL値は1.8Gで設定すればいいのでしょうか? ちなみにこのテーブルは随時増えています。 あらかじめ1.8G以上、余分に取る方がいいのでしょうか? MAXEXTENTSは、もうすぐ2Gに達するので UNLIMITEDで設定した方がいいのでしょうか? (今、MAXEXTENTSを2G以上にするとエラーが発生します)

  • CreateTableのオプション確認方法

    以下のCREATE文を実行し、設定されたオプションが正しく設定されていることを確認したいのですが、確認方法がわかりません。どうかご教授願います。 以下のSQLで確認した結果、PCT_USED等が表示されませんでした。 このSQLで上記を確認できる場合、表示されない項目は何か理由があるのでしょうか? ---------------------------------------------------------------- 確認SQL SELECT OWNER ,TABLE_NAME ,TABLESPACE_NAME ,PCT_FREE ,PCT_USED ,INI_TRANS ,INITIAL_EXTENT ,NEXT_EXTENT ,MAX_EXTENTS ,PCT_INCREASE FROM dba_tables ----------------------------------- CREATE TABLE free_table( old_name VARCHAR2(5), new_name VARCHAR2(5) ) tablespace TESTDAT01 pctfree 20 pctused 70 initrans 1 storage( initial 1M next 1M maxextents UNLIMITED pctincrease 0 ) ---------------------------------- 確認したい値 tablespace TESTDAT01 pctfree 20 pctused 70 initrans 1 storage( initial 1M next 1M maxextents UNLIMITED pctincrease 0 ------------------------------ どうかご教授よろしくお願いします。

  • インポート時のエラーについて

    新サーバーのOracleにTABLESPACEを作成したのですが、旧サーバーで保管したデータをインポートしようとすると一部件数の多いテーブルでエラーが発生します。内容は IMP-00003:Oracleエラー:1562が発生しました。 ORA-01562:ロールバックセグメント番号:2を拡張できません。 ORA-01628:最大エクステント:121に達しました(ロールバックセグメント:RB1)。 IMP-00028:前の表の部分インポートがロールバックされました(XXXXX行)。 データ用TABLESPACEはサイズ5GBで DEFAULT STORAGE(INITIAL 1024K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 121 PCTINCREASE 50) TEMP用とROLLBACK用TABLESPACEはそれぞれサイズ500MBで DEFAULT STORAGE(INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS 512 PCTINCREASE 50) ロールバックセグメントは3つ作成し、それぞれ initial 3M next 3M optimal 50 M  で作成しました。 Oracleは7.3です。設定の間違いや、対策はないでしょうか?

  • Oracleテーブル作成について

    Oracle初心者です。 表領域 TEST_TABLESPACEがあるとします。 (サイズは、1024Mと仮定) (1)この表領域に一つのテーブル TEST_TABLEを作成します。 (サイズは、INITIAL 512M NEXT 512M) ここで質問なのですが、例えば上記でテーブルの NEXTを600Mとかにすると、データが512M以上入って NEXTのサイズが拡張された場合、エラーが発生するのか それとも、最大の512Mが拡張され、1024M分のデータが 入らない限り、エラーが発生しないのか? 教えていただけますか? (2)テーブル作成のDDL内でSTORAGE句指定しない場合、 INITIALとかNEXTは、どう設定されますか? 長々と申し訳ないですが、よろしくお願いいたします。

  • 「ORA-12913: ディクショナリ管理表領域を作成できません」について

    AというサーバーのオラクルデータをダンプしてBというサーバーにデータ移行を 行っていますがうまくできません。 約1週間、調べて実行して失敗を繰り返しています。 ちゃんとオラクルを触るのは今回が初めてです。 以下の表領域のCREATE文はimpコマンドに「SHOW」オプションを「Y」にして実行した際に 出力されたものから抜き出しました。 CREATE TABLESPACE "DATA_A" BLOCKSIZE 8192 DATAFILE 'D:\oracle\oradata\...\DATA01.DBF' SIZE 5541M REUSE AUTOEXTEND ON NEXT 1048576 MAXSIZE 32767M, 'D:\oracle\oradata\...\DATA02.DBF' SIZE 6191M REUSE AUTOEXTEND ON NEXT 1048576 MAXSIZE 32767M EXTENT MANAGEMENT DICTIONARY DEFAULT NOCOMPRESS STORAGE ( INITIAL 524288 NEXT 524288 MINEXTENTS 8 MAXEXTENTS 2147483645 PCTINCREASE 50 ) ONLINE PERMANENT NOLOGGING; 上記のCREATE文を実行したら下記のエラーが発生して作成できませんでした。 「ORA-12913: ディクショナリ管理表領域を作成できません」 オラクルのバージョンは「9.2.0.1.0」です。 9.2から表領域を作成するSQLが変わったという記事を読みました。 どのように変わったのかがいまいちわかりません。 申し訳ありませんがご教授いただけませんでしょうか。 宜しくお願いします。

  • ORACLEでの領域計算

    ORACLEでCREATE TABLE文を実行する時の領域の計算方法 について教えてください。 サンプル PCTFREE 10 PCTUSED 80 STORAGE (INITIAL 2000K NEXT 1000K MINEXTENTS 1 MAXEXTENTS 120 PCTINCREASE 0); で INITIAL は初期値で NEXTは増分値 MINEXTENTSは拡張最小回数 MAXEXTENTSは拡張最大回数 PCTINCREASEは良くわかりませんが、0にしておけば問題ないと書いてありました。 PCTFREE、PCTUSEDは良くわかりません。 テーブルを作成する時に1レコードのバイト数と、必要件数は分かります。 計算方法としては、1レコードのバイト数×必要件数を単純に計算すればよろしいのでしょうか? 増分値はあふれた場合に1回に拡張する値を指定すればいいのでしょうか? あと、MAXEXTENTSは最大増分回数は意味があっていれば理解できますが、MINEXTENTSを指定する理由がわかりません。 PCTFREE、PCTUSEDは良く分かりません。通常はどんな値を指定するのでしょうか? その他、テーブルを作成するにあたり注意するべき点が ありましたら、ご指摘ください。 また、関連するURLがありましたら、教えてください。 よろしくお願いいたします。

  • CreateTable時のInitialエクステントについて

    以下のようにテーブルスペースとテーブルを作成すると空のテーブルなのにエクステントが2つ発生するのですが、なぜでしょうか? CreateTableではInitialエクステントが1つ発生するだけではないのでしょうか? ご回答をお願いします。 バージョン:Oracle9.2.0.1.0 CREATE TABLESPACE GOMI DATAFILE '/export/home/dbf/user_data_gomi.dbf' SIZE 32M REUSE MINIMUM EXTENT 1K DEFAULT STORAGE ( INITIAL 512K NEXT 512K PCTINCREASE 0 MINEXTENTS 1 ); ========================================= CREATE TABLE GOMI_T ( NAMAE VARCHAR2(60) ) PCTFREE 0 TABLESPACE GOMI STORAGE ( INITIAL 128K NEXT 16K MINEXTENTS 1 ); SQL> L 1 SELECT SUBSTR(SEGMENT_NAME,1,8) "SEGMENT",EXTENT_ID,BYTES,BLOCKS 2 FROM DBA_EXTENTS 3* WHERE TABLESPACE_NAME = 'GOMI' SQL> / SEGMENT EXTENT_ID BYTES BLOCKS ---------------- ---------- ---------- ---------- GOMI_T 0 65536 32 GOMI_T 1 65536 32 ↑エクステントが2つ発生する。

  • oracle表領域作成の際に使用するオプション

    以下の(1)~(9)オプションの意味を、ORACLE初心者でも理解できるレベルで教えていただけないでしょうか? (1)tablespace AAAAAAAAA =表領域名 (2)pctfree 10 =この割合を超えるとブロックに挿入不可能になる。 (3)pctused 80 =用済領域のうち、データブロックごとに確保される最小限の割合。この割合を下回ると挿入可能な ブロックとなる。 (4)initrans 1 (5)storage( (6)initial 1M (7)next 1M (8)maxextents UNLIMITED (9)pctincrease 0 ) 自分で調べてはみたものの、理解できませんでした。 わがままな質問で申し訳ございません。 ご教授願います。

  • TABLE作成のパラメータ

    Oracle勉強中です。皆様の知恵をお貸し下さい。 テーブル作成の最適なパラメータを調査したいと思っています。 調査対象項目は以下です。 「PCTFREE」「PCTUSED」「INITIAL」「NEXT」 「PCTINCREASE」「MAXEXTENTS」 【構成】 DATANO    VARCHAR2(16)  NOT NULL START_DATE  DATE END_DATE   DATE INFO     VARCHAR2(256) ・データ件数…MAX10000件 ・INSERT、UPDATEが月に10000件発生(MAXで) ・DELETEも月に10000件発生(MAXで) ・月次バッチで1ヶ月以上前のレコードを削除 自分なりに出してみたのですが… ・「PCTFREE」→20 更新処理が発生する為 ・「PCTUSED」→50 削除処理が発生する為 ・「MAXEXTENTS」→4096 今後TABLEサイズが大きくならない為にデフォルトを設定(自信ナシです) …正しい値が出せてますでしょうか? 他のパラメータ値の設定方法も合わせてご回答頂ければと思います。 足りない情報等、ご指摘頂ければ補足致します。 よろしくお願いします。

  • カーソル0件の時にエラーを発生させる

    以下の処理をしようと考えています。 Aテーブルをカーソルで検索     →0件だった場合にはエラー ・・・ (1)     →データが入っていた場合には処理     →カーソルのデータがなくなったら処理を正常終了 カーソルに入っているデータが0件だった場合、Oracle上ではエラーとはみなされず、処理が正常終了してしまいます。 カーソルデータが0件だった場合にエラーを発生させるにはどのようにコーディングすればよいですか?