• ベストアンサー

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 ) 自分で調べてはみたものの、理解できませんでした。 わがままな質問で申し訳ございません。 ご教授願います。

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

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

ORACLEのデータはDB->表領域->データファイル(TEMPファイル)という形で構成されます。 表領域は複数のデータファイルを含むことができ、それぞれ異なる目的に使用されます。 SYSTEM表領域->Oracleの各種オブジェクトを管理するデータが格納される SYSAUX表領域->SYSTEM表領域の補助領域 UNDO表領域->更新処理時の更新前イメージを格納する。表領域内はUNDOセグメントという単位で管理される。 一時表領域->DISKソートなどに使われる。この表領域はDATAFILEではなくTEMPFILEとして作成する。 ユーザー表領域->ここに一般のユーザーデータ、索引データが格納される。格納単位はセグメント(表・索引)->エクステント->ブロックのようになる。 ・PCTFREE ブロックに大してデータが最初に挿入されるときの空き領域の割合。挿入後、UPDATEでデータ長が増える分の余裕が主な用途。これが小さすぎてUPDATEによるレコード長の増加が大きいと別ブロックにデータを移しポインタのみ残す行移行が多発し、アクセスのパフォーマンスが劣化する。 大きすぎても、領域に無駄が生じる(フルスキャン時にはアクセス時間が増大する)。 ・PCTUSED DELETEやUPDATEでブロック内の領域の使用割合が指定された値を下回った場合、INSERT処理の対象ブロックとなる。 大きすぎると実際にはレコードを挿入できないのに、挿入可能対象リスト内に含めて管理しなければならないので負荷が増大する。 PCTFREE+PCTUSED≒100は禁忌。 ・INITTRANS ブロックに対して同時にトランザクションが発生する場合に確保する領域の初期値。 詳しくはこちら http://www.insight-tec.com/mailmagazine/ora3/vol143.html ・SORAGE 記憶特性の記述 INITIAL 表領域内に一つのセグメントが最初にアロケートするエクステントのサイズ。 NEXT INITIALエクステントを使い切った時に次にアロケートするエクステントのサイズ。 MAXEXTENT UNLIMITED 使用するエクステントの数に制限をもたせない(一応2Gだったかの上限はあるけど、事実上無制限) PCTINCREASE 0 NEXTのエクステントを使い切った時にもエクステントサイズを増やさない。NEXTで指定したサイズでアロケートを続ける。 ただし、ここで取り上げられているのはディクショナリ管理方式と呼ばれ、エクステント管理情報を一括してSYSTE表領域で管理される。 そのためSYSEM表領域の肥大やアクセスの集中が起こりやすいので今はローカル管理方式が推奨されている。 CREATE TABLESPACE XXX DATAFILE 'file_2.dbf' SIZE 1G EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

neetplease
質問者

お礼

ご回答ありがとうございました! 文章を読んだだけでは、わからない箇所もありましたが、調べる手がかりはつきました! ありがとうございました!

関連するQ&A

  • 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での領域計算

    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がありましたら、教えてください。 よろしくお願いいたします。

  • 「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が変わったという記事を読みました。 どのように変わったのかがいまいちわかりません。 申し訳ありませんがご教授いただけませんでしょうか。 宜しくお願いします。

  • 表領域の作成について

    表領域を作成してインポートしたら下記のエラーが出力されて困っています。 表領域の作成の仕方が駄目でエラーが出力されてしまったのでしょうか。 下記のCREATE TABLESPACE文で表領域を作成しています。 ---------------------------------------------------------------------- CREATE TABLESPACE "T_DAT" BLOCKSIZE 8192 DATAFILE 'D:\oracle\oradata\ora92\DAT_01.DBF' SIZE 32767M, 'D:\oracle\oradata\ora92\DAT_02.DBF' SIZE 32767M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO; ---------------------------------------------------------------------- コマンドプロンプトでimpコマンドを実行したら、下記のエラーなどが出力されました。 ---------------------------------------------------------------------- IMP-00003: Oracleエラー1659が発生しました。 ORA-01659: nを超えるMINEXTENTSを表領域T_DATに割当てできません。 IMP-00003: Oracleエラー1658が発生しました。 ORA-01658: 表領域T_DATにセグメント用のINITIALエクステントを作成できません。 ---------------------------------------------------------------------- 何がいけないのかが正直わかりません。 申し訳ありませんがアドバイスいただけませんでしょうか。 宜しくお願いします。

  • Oracle8iのBLOBに画像を登録する方法

    お世話になります。 現在以下のテーブルに画像を取り込むことを行っているのですが、SQL/PLUS等のコマンドで登録する場合どのようなコマンドになるでしょうか? CREATE TABLE Book (No Number(2) NOT NULL, BookName Varchar2(100) NOT NULL, BookAuthor Varchar2(100) NOT NULL, Genre Number(2) NOT NULL, image BLOB, constraint pk_Books primary key(No))TABLESPACE usertsp PCTFREE 5 PCTUSED 90 STORAGE(INITIAL 10k NEXT 1k PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS UNLIMITED); BLOB型のフィールド(image)に画像を取り込む方法をご存知の方 よろしくお願いします。

  • ORACLEのインデックスについて

    現在、ORACLE9を使用しているのですが INDEXについて理解できないことがあったので 教えてください。 組織、社員という2つしか項目を持たない 従業員という表があり600件ほどのデータがあります。 変更前は、 ・組織、社員にユニークインデックスは作成されていた。 ・600件ほどのデータの組織は全て同一。 となっており、その状態で select * from 従業員 where 組織 = 'ALL' and 社員 = '001' を流すとFULL SCANになっていました。 FULL SCANを回避できないかと思い、社員のみのインデックスを 追加し(* 一番下にインデックス追加時のSQLをはっています)  select * from 従業員 where 組織 = 'ALL' and 社員 = '001' を流すと追加したインデックスを読んでいました。 既に作成されていたユニークインデックスと異なるインデックスが 追加されたのかと思い、DBA_INDEXESの中を確認しましたが 異なっているのは、 ・UNIQUENESS ・INITIAL_EXTENT(ユニークインデックスは24576、  追加したインデックスは40960) ・LEAF_BLOCKS(ユニークインデックスは3、  追加したインデックスは2) の3点のみでした。 なぜこのような動きになるか理解できず、今後の対応に 迷っています。 ・原因 ・調査したらいい場所 ・参考資料 などがありましたら教えてください。 よろしくお願いします。 (*) インデックス追加時のSQL文は、create index 従業員A on 従業員 (社員) tablespace index storage (initial 40000 next 100000 maxextents unlimited pctincrease 0) pctfree 10となっています。

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

    新サーバーの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です。設定の間違いや、対策はないでしょうか?

  • 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つ発生する。

  • 同じテーブル設計にしたい

    CREATE TABLE 見積データ ( 見積番号 VARCHAR2(7) NOT NULL, 得意先コード VARCHAR2(7), CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); ******** 上記のようなテーブル設計のSQL文がありますが、私が作ったものではなく都合によりこのテーブルを create table A2 as select from A; 上記のようなコピーを行いました。 あたらしいテーブルでも CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K 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サイズが大きくならない為にデフォルトを設定(自信ナシです) …正しい値が出せてますでしょうか? 他のパラメータ値の設定方法も合わせてご回答頂ければと思います。 足りない情報等、ご指摘頂ければ補足致します。 よろしくお願いします。