小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【Oracle】USERS表領域を縮小するため削除して作り直す

はじめに

USERS表領域がいつのまにか肥大化していたので、縮小したいと考えました。インターネットで調べてみると、一度削除して作り直すと良いみたいなので、USERS表領域を削除してみました。

やったこと

まず、表領域を指定してエクスポートする。

expdp hoge/hoge_pwd directory=test_dir TABLESPACES= USERS

USERS表領域を削除する。

DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

ここで、ORA-12919のエラーが出て怒られる。

ORA-12919: デフォルトの永続表領域は削除できません

デフォルト表領域の変更が必要

デフォルトの表領域を変更しないと削除できないので、代わりの表領域(USERS02)を作成する。

CREATE TABLESPACE USERS02
DATAFILE 'C:\oradata\orcl\USERS02.DBF' SIZE 4M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
alter database default tablespace USERS02;

以下のコマンドでデフォルト表領域を変更する。

alter database default tablespace USERS02;

このあと、もう一度表領域の削除を試みる。

DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
>表領域が削除されました。

無事、削除できました。
こんどは、元の表領域を作り直して再度切り替えます。

CREATE TABLESPACE USERS
DATAFILE 'C:\oradata\orcl\USERS01.DBF' SIZE 4M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;

デフォルト表領域をUSERSに変更します。

alter database default tablespace USERS;

最後に、不要になったUSERS02表領域を削除します。

DROP TABLESPACE USERS02 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
おわりに

表領域の切替は結構面倒ですね。