Top > ALTER TABLE > ALTER TABLE <プロパティ> > ALTER TABLE <物理属性>

ALTER TABLE <物理属性> の設定変更

ALTER TABLE <alter_table_properties> <physical_attributes>

ALTER TABLE 〜 PCTFREE

PCTFREE の設定
オブジェクトの行を将来更新するために確保しておく領域の割合。各ブロックごとに管理されている。
PCTFREE の変更による既存データの再配置は行なわれない。(※)

(※) PCTFREE の値によるデータ登録の可否判定は 自動セグメント領域管理ビットマップ によって判定される。
ALTER TABLE PCTFREE 文において既存のセグメントへの設定の自動反映はされない。

my_table の PCTFREE を 30% に変更する。

ALTER TABLE my_table PCTFREE 30

自動セグメント領域管理 を利用している場合、既に割り当て済のセグメントに対しては PCTFREE の変更は反映されない。PCTFREE の設定をに反映させるためには以下のプロシージャを実行させる必要がある。 DBMS_REPAIR.SEGMENT_FIX_STATUS の実行は全データのスキャンを伴う。利用環境や表のデータ件数が多い場合には実行する時間に配慮が必要。
DBMS_REPAIR は PUBLIC に実行権限が与えられていないため、データ自体の再配置をする ALTER TABLE 〜 MOVE でデータ本体から再構築という選択肢もある。

スキーマ rivus の テーブル my_table の PCTFREE を既存セグメントに反映させるプロシージャ

SQL> conn / as sysdba
接続されました。
SQL> execute DBMS_REPAIR.SEGMENT_FIX_STATUS(
	SEGMENT_OWNER => 'RIVUS',
	SEGMENT_NAME => 'MY_TABLE'
     );
PL/SQLプロシージャが正常に完了しました。

(注意) CREATE TABLE 直後のテーブルに対して実行すると ORA-600 が発生するかもしれない。(Oracle 11g R2)

ALTER TABLE 〜 PCTUSED

PCTUSED の設定
使用済領域のうち、データブロックごとに確保される最小限の割合。この割合を下回ると挿入可能なブロックとなる。
自動セグメント領域管理の場合には PCTUSED は設定は無視される。
索引構成表のインデックス格納部に対して設定できない。
PCTUSED の変更による既存データの再配置は行なわれない。

my_table の PCUSED を 50% に変更する。

ALTER TABLE table_name PCTUSED 50

ALTER TABLE 〜 INITRANS

INITRANS の設定
「データブロック単位」(≠ テーブル全体)にあらかじめ確保しておく同時実行トランザクション・エントリの数。
この初期設定値を超えるトランザクションが発生するとデータブロックの空き領域にトランザクション・エントリが動的に確保される。(※1)
領域を確保できない場合、または、上限値(MAXTRANS) に達した場合には TX-エンキュー が発生して後続処理が待機する。
既存の データブロック には適用されず、新規に確保されたデータ・ブロックから適用される。(※2)

(※1) 動的に拡張される上限は MAXTRANS 。自動セグメント領域管理 の場合には MAXTRANS は設定はできない。

(※2) 既存のデータブロックに適用したい場合には ALTER TABLE MOVE を併用する。

my_table の INITRANSを 4 に変更する。

ALTER TABLE my_table INTRANS 4

ALTER TABLE 〜 STORAGE

記憶域属性の設定
ローカル管理表領域 上にあるオブジェクトには利用できない。⇒ ローカル管理表領域と記憶域属性

my_table の NEXT を 1Mバイト と MAXSIZE を 100Gバイト に変更する。

ALTER TABLE my_table STORAGE (
  NEXT 1M
  MAXSIZE 100G
)


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)