エクスポート/インポートはテーブルの削除が必要ですしちょっと大がかりな感じがします。簡単な方法はないでしょうか?実は、行移行はテーブルを移動することでも解消することができます。今回はあえて同じ表領域の中でテーブルを移動させます。その前に十分な空きがあるかを確認しておきます。190665念のためメンテナンス前の状態も確認しておきます。Moveそれでは、テーブルを移動してみましょう。(移動先表領域を省略すると同じ表領域の中で移動します。移動したかどうかは、DBA_SEGMENTSを参照すればわかります。4081テーブルのHEADER_BLOCKに注目してください。異なるBLOCK_IDとなっていることから移動を判断することができます。当然ながらエクステント数は変わっていません。行移行が解消できたかどうか統計情報を取得して確認します。行1でエラーが発生しました。索引'RM1.IDX_RNO00'またはそのパーティションが使用不可の状態です。おっと!エラーになってしまいました。テーブルの移動で行のrowidが変わったため、古いrowid情報を保持しているインデックスが無効になってしまったようです。インデックスをリビルドして再取得しましょう。索引が変更されました。gets論理読込ブロック数は、エクスポート/インポートの場合と全く同じです。getsエクスポート/インポートもテーブルの移動も結果は同じになりました。前者の方がきれいに行移行が解消できそうなイメージですが、実際は同じでした。メンテナンスの手間やサービス影響度を考えるとテーブル移動の方がお勧めです。ROWS;を実行すると、CHAINED_ROWS表に行移行が発生している行のrowidが格納されます。(ANALYZEですが、実行計画に影響を与える統計情報は変更されません。)格納された様子は以下の要領で確認します。.................................................................この情報を利用して、行移行を解消するための方法を以下に紹介します。行移行が発生しているレコードをワーク表に書き出す。念のため、行移行が発生している件数を確認しておきます。元表から行移行が発生しているレコードを削除する。50000行が削除されました。コミットが完了しました。ワーク表から元表にレコードを戻す。50000行が作成されました。コミットが完了しました。gets論理読込ブロック数は、方法1,2に比べ若干小さくなりました。