ALTER TABLE ~ SHRINK エラー ORA-10635 無効なセグメントまたは表領域タイプです

OLTP圧縮(Oracle Advanced Compression) をしている場合、ALTER TABLE ~ SHRINKを発行するとエラーになる

回避方法

--テーブル作成
CREATE TABLE emp
(
 EMPNO    NUMBER(4,0) NOT NULL,
 ENAME    VARCHAR2(10),
 JOB      VARCHAR2(9),
 MGR      NUMBER(4,0),
 HIREDATE DATE,
 SAL      NUMBER(7,2),
 COMM     NUMBER(7,2),
 DEPTNO   NUMBER(2,0),
CONSTRAINT PK_EMP PRIMARY KEY (EMPNO) USING INDEX,
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO)
)
COMPRESS FOR OLTP 
/
--①圧縮を解除してからSHRINKするパターン
ALTER TABLE emp ENABLE ROW MOVEMENT;
ALTER TABLE emp MOVE NOCOMPRESS;        
ALTER TABLE emp SHRINK SPACE;	--テーブル再編成
ALTER TABLE emp DISABLE ROW MOVEMENT;
ALTER TABLE emp MOVE COMPRESS FOR OLTP;   --再圧縮
ALTER INDEX PK_emp REBUILD;      --事前に関連インデックスを把握しておく必要がある。

--②圧縮したまま、テーブル再編成するパターン
ALTER TABLE emp MOVE;
--その後、関連するインデックスの再構築
ALTER INDEX PK_emp REBUILD;      --事前に関連インデックスを把握しておく必要がある。


Oracleの現場を効率化する100の技

Oracleの現場を効率化する100の技

プロとしてのOracle運用管理入門

プロとしてのOracle運用管理入門

Oracle逆引き大全606の極意 DB管理編 (606Tips to Use Oracle Better!)

Oracle逆引き大全606の極意 DB管理編 (606Tips to Use Oracle Better!)