ALTER TABLE > ALTER TABLE <MOVE> > ALTER TABLE MOVE <ヒープ表>

ALTER TABLE <ヒープ表> の移動

ALTER TABLE 〜 MOVE

ALTER TABLE table MOVE [ ONLINE ]

既存のテーブル属性を継承したまま、同一表領域上に新しいセグメントを確保。すべてのデータを再配置して現在使用中のセグメントは解放する。

my_table を新しいセグメント上に再構築する。

ALTER TABLE my_table MOVE

my_table を表排他ロックをかけずに移動する。(ヒープ表の場合)

ALTER TABLE my_table MOVE ONLINE
*
行1でエラーが発生しました。:
ORA-01735: ALTER TABLEオプションが無効です。

ONLINE オプション付きで再構築が可能なのは 索引構成表。ヒープ表に対しては ONLINE は使用できない。

ALTER TABLE 〜 MOVE <segment_attributes>

ALTER TABLE 〜 MOVE <physical_attributes>

ALTER TABLE 〜 MOVE [ PCTFREE | PCTUSED | INITRANS ]

PCTFREE の設定 と再構築
オブジェクトの行を将来更新するために確保しておく領域の割合。各ブロックごとに管理されている。
PCTFREE の変更を行ない再構築する。

ALTER TABLE my_table MOVE PCTFREE 20

PCTUSED の設定 と再構築
使用済領域のうち、データブロックごとに確保される最小限の割合。この割合を下回ると挿入可能なブロックとなる。
PCTUSED の変更を行ない再構築する。
自動セグメント領域管理の場合には PCTUSED は設定は無視されるため意味はない。

ALTER TABLE my_table MOVE PCTUSED 80

INITRANS の設定 と再構築
「データブロック単位」(≠ テーブル全体)にあらかじめ確保しておく同時実行トランザクション・エントリの数。
INITRANS の変更を行ない再構築する。

ALTER TABLE my_table MOVE INITRANS 5

ALTER TABLE 〜 MOVE TABLESPACE tablespace

既存のテーブル属性を継承したまま、指定した表領域上に新しいセグメントを確保。すべてのデータを再配置して現在使用中のセグメントは解放する。

my_table を表領域 my_tablespace に移動する。

ALTER TABLE my_table MOVE TABLESPACE my_tablespace

ALTER TABLE 〜 MOVE パーティション表

  • パーティション表の場合にはパーティション単位に MOVE を行なう。

表に対して MOVE を行なうと
ORA-14511: この操作はパーティション・オブジェクトでは実行できません。 が発生する。(Oracle 11g R2 時点)

ALTER TABLE my_table MOVE PARTITION my_table_partition
  • コンポジット・パーティション表の場合にはサブパーティション単位に MOVE を行なう。

パーティション単位に MOVE を行なうと
ORA-14257: レンジ、リスト、システムまたはハッシュ・パーティション以外のパーティションは移動できません。が発生する。(Oracle 11g R2 時点)

ALTER TABLE my_table MOVE SUBPARTITION my_table_subpartition

ALTER TABLE 〜 MOVE 実行後に注意すること

表を MOVE することで ROWID が変更される。このため関連するインデックスが無効 (※1) となり、ステータスが UNUSABLE 状態になるためインデックスの再構築が必要。 さらに 統計情報も無効となるので再取得 が必要となる。

(※1) 無効になっているタイミングでユーザーからインデックスを利用する SQL が実行されると「ORA-01502: 索引 〜 またはそのパーティションが使用不可の状態です。」 が発生する。



関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター