Top >
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: 索引 〜 またはそのパーティションが使用不可の状態です。」 が発生する。
関連事項