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
)
関連事項