テーブル作成時の初期サイズについて

このQ&Aのポイント
  • Oracle 10g EEを使用してテーブルを作成しましたが、初期サイズが80Kとなっています。対象表領域のブロックサイズは16Kです。
  • テーブル作成時の初期サイズに関する問題が発生しています。作成したテーブルの初期サイズが80Kであるため、原因と解決方法を知りたいです。
  • Oracle 10g EEでテーブルを作成した際に初期サイズが80Kになっています。対象表領域のブロックサイズは16Kです。現象の原因と解決方法を教えてください。
回答を見る
  • ベストアンサー

テーブル作成時の初期サイズについて

Oracle 10g EE をインストールし、インスタンスを立ち上げました。 ちなみにOSは Win2003 です。 その後、Create Table にてTable を作成しようと考え、以下のSQLにて作成しました。 CREATE TABLE TEST ( "ABC" VARCHAR2(10) NOT NULL, "XYZ" CHAR(4) NOT NULL) TABLESPACE TEST_SPACE PCTFREE 10 PCTUSED 80 STORAGE ( INITIAL 16K MINEXTENTS 1 ); エラーも無く無事作成できたのですが、Enterprise Manager Consol にて領域サイズを確認したところ、「80K」となっておりました。 ちなみに対象表領域のブロックサイズは16Kとなっております。 この現象の原因や解決方法について、ご存知の方がいらっしゃいましたらご教授願えませんでしょうか。 よろしくお願いいたします。

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

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

Oracle 10g ではデフォルトでローカル管理表領域 (AUTOALLOCATE) になっているので、最小エクステントサイズは 64K になります。従って、それ以下の INITIAL を指定しても 64K に切り上げられます。ちなみに、80K になったのは、そこにセグメントヘッダの 16K が追加された結果でしょう。 解決するためには表領域自体をディクショナリ管理にすることですが、お勧めしません。

takkunnet
質問者

お礼

理解しました。ありがとうございます。 DB領域見積もり時の注意点として心に留めておきます。

関連するQ&A

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

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

  • 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サイズが大きくならない為にデフォルトを設定(自信ナシです) …正しい値が出せてますでしょうか? 他のパラメータ値の設定方法も合わせてご回答頂ければと思います。 足りない情報等、ご指摘頂ければ補足致します。 よろしくお願いします。

  • MySQLでのテーブル作成

    MySQLでこういったテーブルを作成したのですが、 CREATE TABLE NOSGI ( GNRE_CD CHAR(5) NOT NULL, GNRE_NAME VARCHAR(20) NOT NULL, PRIMARY KEY (GNRE_CD) ); GNRE_CDはCHAR型で作成したのに、カラムの情報を見ると、 VARCHAR型にしまうのですが、どうしてでしょうか?

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

  • MySQLでのテーブル作成について

    はじめまして。私は学校でDBの勉強をするのにOracle10gを使っているのですが家で練習するにあたりOracleを入れれないのでMySQL5.0をいれてみましたが若干勝手が違いいろいろ調べながらやってみたもののテーブル作成の際の制約の決め方などがうまく作れません。特に外部キーで悩んでいるのですがどうすればよいか教えていただきたいのです。 mysql>CREATE TABLE MEIBO( SEITO_NBR INT(5) PRIMARY KEY NOT NULL, SEITO_MEI VARCHAR(80) NOT NULL, SEIBETSU_KBN CHAR(1), TANJO_YMD DATE, GAKKA_CD VARCHAR(2), BIKOU_TXT VARCHAR(1000), INSERT_DATE DATE, UPDATE_DATE ); mysql>CREATE TABLE GAKKA( GAKKA_CD VARCHAR(2) PRIMARY KEY NOT NULL, GAKKA_MEI VARCHAR(80) NOT NULL ); ちなみに下の学科表は作成できました。が上の名簿がうまくできません。長くなりましたがよろしくお願いします。

  • 同じ構成の2つのテーブルの更新について

    はじめまして、下のような2つの同じ構成のテーブルがあった場合に create table test1 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test1_key primary key (key1,key2,key3,key4) ); create table test2 ( key1 varchar(8) not null, key2 varchar(4) not null, key3 varchar(6) not null, key4 varchar(11) not null, suryo int(9), kingaku int(11), constraint test2_key primary key (key1,key2,key3,key4) ); 10万件のtest1テーブルに 5件のtest2テーブルの内容をキー集計した結果を test1に反映するにはどうのようなSQL文を書けば、効率的なのでしょうか? 片方のテーブルはデータ量が多く、もう片方は数件の更新処理となります。 宜しくお願いいたします。 ・処理前 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",5,5000 "20070521","3333","333333","33333333333",1, 100 (test2テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","2222","222222","22222222222",10,30000 ↓ ・処理後 (test1テーブル) key1,key2,key3,key4,suryo,kingaku "20070521","1111","111111","11111111111",10,1000 "20070521","2222","222222","22222222222",15,35000 "20070521","3333","333333","33333333333",1, 100

    • ベストアンサー
    • MySQL
  • データベース:二つのテーブルの繋ぎ方

    私(あなた)が検査担当者だとします。 そして、測定担当者から CREATE TABLE measurement ( lot VARCHAR(10) NOT NULL, test_id INTEGER NOT NULL, data NUMERIC(17,7), PRIMARY KEY(lot, test_id) ); という、あるロットでのテスト番号に対する測定値データが送られてきたとします。 そして、設計担当者から CREATE TABLE spec ( test_name VARCHAR(10) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); という、テスト項目名に対する上限・下限の仕様データが送られてきたとします。 ここで、テスト番号とテスト項目名は同じ数だけあって、お互いが一致するように同じ順番で並んでいるとします。 この二つのテーブルを使って、測定値が範囲内か範囲外かを調べるのが目的です。 この場合、どうやって二つのテーブルを繋ぐのが一般的ですか? 自分の考えだと、一旦、specテーブルにtest_idを加えて CREATE TABLE spec ( test_id INTEGER NOT NULL, test_name VARCHAR(10) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id, test_name) ); とするのですが、第二(第三?)正規化に基づいて CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(10), PRIMARY KEY(test_id) ); の二つに分けるのかな、と思っています。 正規化の観点から言うと、きっとこれが正しいのかなと思っています。 でも、元々、specテーブルにはテスト項目名が入っていたのでテスト項目名と上限・下限が一目で分かっていたのに、このように分けると、いちいちspecテーブルでテスト番号を確認してから、testテーブルでそのテスト番号に該当するテスト項目名を見つけなくてはならなくなってしまいます。クエリーでの検索もJOINをしなければならなくなって遅くなりませんか? 敢えて正規化しないでおく、なんて手段もありますか? こんな場合、皆さんならどうしますか? 「こうするように決められている」なのか、 「ああもできるし、こうもできるんですが、どっちでもいいですよ」なのか、 温度差みたいなものもできれば知りたいです。

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

    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 ); この制約と同じものを当てたいのですが、あとから追加するにはこの構文をどのように変えればいいのでしょうか?

  • Oracleでテーブルを作成する際に、インデクスの作成先を指定したい。

    以下のようにテーブルを作成しようとしてます。 CREATE TABLE TEST_USER.M_USER ( ID char(4), NAME varchar2(40) NOT NULL), CONSTRAINT PK_USER PRIMARY KEY(ID) ); さて、プライマリキーを定義しているので、インデクスが作成されるはずです。 この作成先のテーブルスペースを指定したいのですが、方法が解りません。 CREATE TABLEの紹介をしているサイトにものっていなくて、途方にくれています・・・。 CONSTRAINT句を使えばいいのでしょうか?