standingzzz's Oracle memo

OracleSQLチューニングの豊富な経歴を生かして、主に11gと12cのオプティマイザ動作の違いなどについて、実用的な検証結果をメモしています。

Oracle12c INDEXがUNUSABLEになるとEXTENT,SEGMENTは削除される

概要

ALTER TABLEなどでINDEXがUNUSABLEとなった場合に、EXTENT、SEGMENTは削除されるという事象の検証(というかメモ)です。 OracleMasterの教科書に載っているような話らしいですね。資格は持っていないので知らないです。

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
CentOS Linux release 7.3.1611 (Core) 

検証

テーブル、インデックスの用意

検証用のテーブルとインデックス、データを用意します。

事前確認

まずは、テーブル、インデックスを作成しただけの状態で、関連ディクショナリを確認します。

ALTER INDEX xxx UNUSABLE

次に、インデックスをUNUSABLEに変更してみます。

SQL> alter index IDX1_TAB_UNUSABLE unusable;

Index altered.

Elapsed: 00:00:00.06
SQL>

すると、user_extents,user_segmentsからは削除されました。

ALTER INDEX xxx REBUILD

UNUSABLEとなった、インデックスをREBUILDします。

SQL> alter index IDX1_TAB_UNUSABLE rebuild;

Index altered.

Elapsed: 00:00:00.08
SQL>

extent,segmentも復活しています。

ALTER TABLE xxx MOVE

テーブル圧縮を実行してみます。

SQL> alter table TAB_UNUSABLE move compress for oltp;

Table altered.

Elapsed: 00:00:00.09
SQL>

テーブルをMOVEすると、インデックスはUNUSABLEになるので、当然と言えば当然なのですが、
やはりextent,segmentからは削除されました。