対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-083 対応
領域管理(セグメント縮小 SHRINK)難易度 標準無料

大量削除でハイウォーターマーク(HWM)以下に空きが散在した表 hr.bigt(自動セグメント領域管理=ASSM の表領域上)を、オンラインで縮小したい。次を実行した。

SQL> ALTER TABLE hr.bigt SHRINK SPACE;
ALTER TABLE hr.bigt SHRINK SPACE
*
ERROR at line 1:
ORA-10636: ROW MOVEMENTが使用可能ではありません

このエラーの正しい解消法を選べ。(単一選択)

  1. AALTER TABLE hr.bigt ENABLE ROW MOVEMENT; を実行してから SHRINK SPACE を再実行する
  2. B表領域を手動セグメント領域管理(MSSM)に変更してから再実行する
  3. CALTER TABLE hr.bigt DEALLOCATE UNUSED; に置き換えれば ROW MOVEMENT 無しで HWM 以下の空きを詰められる
  4. DSHRINK SPACENOLOGGING 表でしか使えないため、表を NOLOGGING にする
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

ALTER TABLE ... SHRINK SPACE は、セグメント内の行を前方に詰め直して空きブロックを解放し、HWM を引き下げる操作である。 行を物理的に移動させる(rowid が変わる)ため、対象表で行移動(row movement)が有効であることが前提となる。 無効だと ORA-10636(ROW MOVEMENT is not enabled)になる。

よって ALTER TABLE hr.bigt ENABLE ROW MOVEMENT; を実行してから SHRINK SPACE を再実行すればよい。 なお SHRINK SPACEASSM の表領域でのみ使える(本問は ASSM で前提を満たす)。

各誤答が違う理由
  • B逆。SHRINK SPACEASSM が前提。MSSM に変えたら SHRINK SPACE は使えなくなる。エラー原因も領域管理方式ではなく row movement。
  • CDEALLOCATE UNUSEDHWM より上の未使用領域を解放するだけで、HWM 以下に散在する空きは詰められない(断片化は解消しない)。目的が違う。
  • DSHRINK SPACENOLOGGING は無関係。NOLOGGING 必須という制約はない。
ひっかけ: SHRINK SPACE(HWM 以下の断片を詰める・ASSM+row movement 必須)と DEALLOCATE UNUSED(HWM 以上の未使用を返すだけ)の混同(C)。 また ORA-10636(SHRINK)と ORA-08189(FLASHBACK TABLE)はどちらも row movement 起因だがエラー番号が異なる点に注意。
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
領域管理 を含む全問を分野別に演習できます(無料)。
演習する →