• 締切済み

テーブル作成について

msystemの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

PCTFREEですが、たとえば、Varchar2の列があるテーブルの場合、最初にInsertするときに、Varchar2の列にNULLを入れ、後でUpdateしたいときがあるとします。そのときに、Oracleでは、できるだけ同じオラクルブロック(Windowsでいうとクラスタ、HDDでいうとセクター)に後でUpdateした内容を入れようとするのですが、オラクルブロック内に空きスペースがないと、別のオラクルブロックに入れてしまいますので、データの断片化が起こることになります。それを避けるために、あらかじめ、Update用にスペースを空けておきます。この空けておくスペースの%表示がPCTFREEです。 PCTUSEは、たとえば、ある行を削除すると、オラクルブロックに空きスペースができます。当然空きがあるので、空きスペースを再利用するのですが、その際利用を開始するオラクルブロックの%表示が、PCTUSEです。 PCTINCREASEは、Oracleでは、いくつかのオラクルブロックをまとめてエクステントという単位で、記憶容量を増やしたり管理したりします。当初、テーブルを設計する際に、データ容量の見積もりをきっちり行い、その容量分だけエクステントをちゃんと作っておけばこのパラメータは不要ですが、見積もりができないときなどは、記憶容量を自動で増やしてもらえるように、設定します。その際に、最初に確保する量(INITIAL句)、その領域が足らなくなったときに増やす量(NEXT句)は、直接数字を指定するのですが、その次に増やす量は、NEXTの数字から増やす量を計算させることができます。これを指定するのがPCTINCREASEです。つまりNEXTで指定した量を増やした領域が足らなくなったとき、NEXTで指定した量×(100+PCTINCREASE)/100を増やします。(増やす量を%表示したことになりますね)その次に増やすのは、前回増やした量×(100+PCTINCREASE)/100で増やす量は、PCTINCREASEずつ増えていくことになります。ただし、PCTINCREASEに0以外を指定すると、記憶領域に断片化につながりますので、注意が必要です。 気をつける点ですが、PCTFREE、PCTUSEは、UPDATEがほとんどないテーブルの場合は、PCTFREEに5ぐらい、PCTUSEにできるだけ大きな数字を使うとほんの少しですが、パフォーマンスが良くなります。Updateが頻繁で、Varchar2が多いテーブルは、PCTFREEを大きめの数字、PCTUSEを少し小さめの数字を使うと断片化を抑えることができます。PCTINCREASEは容量計算をしっかりしてやり、0で使うのが理想です。 ただ、最初は分からないので、デフォルト値でもいいと思います。

lovechuu
質問者

お礼

ありがとうございました。 ぜひ参考にさせていただきます。 回答が遅くなって済みませんでした。

lovechuu
質問者

補足

大変詳しいご回答ありがとうございます。 大変恐縮ですが、もう少し相談に乗ってください。 私が作成するテーブルの使用目的は、 そのテーブルには、前週データ(A)と今週データ(B)があります。 それぞれ、前週・今週をあらわすコードをもっています。 毎週データの更新があり、以下のような処理を行います。 1、前週データ(A)を削除 2、今週データ(B)を前週コード 3、新たに、今週データ(C)を今週データをつけてテーブルにINSERT こういった処理を行う場合、PCTFREE、PCTUSE、PCTFREEは どういった値を与えたらよろしいでしょうか? よろしくお願い致します。

関連するQ&A

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

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

  • pctfreeとPCTUSEDの確認方法について

    ORACLEで各テーブルに設定してある「pctfree」と「PCTUSED」 の値を確認したいのですが、 どこを確認すればよいかわかりません。 目的としては、「CREATE TABLE文で「pctfree」と「PCTUSED」 を設定しているので、これが正しく設定されているかを確認したい。」です。 どうかご教授お願いいたします。

  • テーブル作成のサンプル

    オラクルを勉強したいのですが、なにかテーブル作成のsqlサンプルが載っているHPなどありましたら、ご教授頂けないでしょうか?

  • ORACLEテーブルを作成したSQLを調べたい

    バックアップに別サーバに同じORACLEテーブルを作成することとなりました。 どんなSQLでそのテーブルを作成したのか資料が無くてわかりません。 調べる方法を教えてください。よろしくお願いします。

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

    こんにちわ。 いまSQLServer2005Expressをダウンロードして, データベースを作成し,そこにテーブルを作成しようとしています。 そこで「SQLServer Managemant Studio Express」を使用すれば, 一応テーブルを作成することができるのですが, テーブル定義のスクリプトを作成して, OracleのSQL*Plusのようなコマンド機能から実行したいのですが, SQLServerではそれはどの機能にあたるのでしょうか? 教えてください。よろしくお願いします。

  • Oracleのテーブル作成スクリプトを作成したい

    Oracle8i のDBA Studioで数十の表を作成したのですが、ここからテーブルの作成スクリプトを出そうとして困りました。いわゆる Create Table文なのですが、これを自動で簡単に作る方法はないでしょうか?SQL-ServerのEnterprise Managerでは、SQLスクリプトの作成があって、Create文を簡単に生成できるのですが、これと同じような感覚で、既に作成してあるテーブルのCreate文を出力する方法はないでしょうか?Oracleには、ほとんど慣れていないので、方法があると思うのですが、探し方が悪いらしく途方にくれています。どなたかよい方法を御存じないでしょうか。

  • AccessからOrcleのODBCリンクテーブルにて

    OS:XP Pro Access:2003 Oracle:9i という環境で、AccessからOracleのODBCリンクテーブルを作成して使用しています。 リンクテーブルを作成する際、パスワードの保存にチェックを入れて、作成しました。 Orcle側のパスワードを変更したいのですが、変更前に作成したリンクテーブルは 作成し直しになってしまうでしょうか?

  • テーブル作成クエリで作成したテーブルに連番をふりたい

    こんにちは。 ACCESS97を利用しているのですが(OSはWin2000)、 クエリーで作成したテーブルに連番を振ることは出来ますか? テーブル作成クエリーで5フィールドのテーブルを作成するようにしているのですが、できあがったテーブルの先頭フィールドに1から連番をふりたいのです(計6フィールドのテーブルをクエリーから作成したい)。 イメージとしては、デザインビューでテーブルを作成したときに、1フィールド目にオートナンバー型を利用するのと同じ感じで。。 方法が思いつきません。。 よい方法がありましたらご協力をお願い致します

  • phpPgAdminでテーブルが作成できない

    PHPからPostgresSQLのDBのテーブルへの読み込みができません。 前任者が作成したtestテーブルでPHPを作成すると問題ないが、 私が作成したtest2テーブルに変更すると、以下のメッセージが出ます。 ******エラーメッセージ********************* Warning: pg_query(): Query failed: ERROR: permission denied for relation test2 ******************************************* phpPgAdminでtest2テーブルを作成しましたが、作成の仕方が問題なのでしょうか。 test2テーブルはtestテーブルとわかる範囲で同じ設定にしてあります。 ぼんやりとした質問になってしまって恐縮ですが、 ご教授ください。宜しくお願い致します。 ****************************************** 作成したPHPの一部 ******************************************* $sql = "SELECT * FROM test;"; ↑これだと問題なく表示される $sql = "SELECT * FROM test2;"; ↑こちらだとエラーになる *******************************************

    • ベストアンサー
    • PHP