Oracleで表領域の拡張と削除をする

表領域を新規作成後に表領域を変更するケースがあります。それが主に表領域を増やす(拡張)と削除です。

覚えるべきキーワード
・ALTER TABLESPACE 表領域名 ADD DATAFILE ‘データファイル名’ SIZE サイズ;
・ALTER DATABASE DATAFILE ‘データファイル名’ RESIZE サイズ;
・ALTER DATABASE DATAFILE ‘データファイル名’ AUTOEXTENDES ON NEXT サイズ MAXSIZE (サイズ or UNLIMITED);
・DROP TABLESPACE 表領域名 INCLUDING CONTENTS;
・DROP TABLESPACE 表領域名 INCLUDING CONTENTS AND DATAFILES;
・ALTER TABLESPACE 表領域名 OFFLINE;

表領域のサイズを増やす

表領域のサイズを増やすには3つ方法があります。

①表領域へデータファイルを追加する
②データファイルのサイズを手動で拡張する
③データファイルの自動拡張設定する

①表領域へデータファイルを追加するにはALTER TABLESPACE文を使います。表領域名temp、データファイル名 /00/app/oracle/oradata/orc1/smp01.dbfの表領域に5Mサイズを追加したい時は以下のSQLになります。

ALTER TABLESPACE 表領域名 ADD DATAFILE ‘データファイル名’ SIZE サイズ;

ALTER TABLESPACE emp ADD DATAFILE ‘/00/app/oracle/oradata/orc1/smp01.dbf’ SIZE 5G;

②データファイルのサイズを手動で拡張するにはALTER DATABASE文を使います。表領域名temp、データファイル名 /00/app/oracle/oradata/orc1/smp01.dbfで30Mの表領域を50Mに拡張したい時のSQLです。

ALTER DATABASE DATAFILE ‘データファイル名’ RESIZE サイズ;

ALTER DATABASE DATAFILE ‘/00/app/oracle/oradata/orc1/smp01.dbf’ RESIZE 50M;

ちなみにデータファイルのサイズは手動で縮小もできます。(ただし条件があり、ファイルに格納されているデータ量が指定した縮小サイズよりも小さい場合のみです。)

③データファイルの自動拡張設定するにはALTER DATABASE文を使います。この設定をしておけば、多くの表領域が必要になった時に自動的に拡張してくれます。表領域名temp、データファイル名 /00/app/oracle/oradata/orc1/smp01.dbfで30Mの表領域に対して、領域がさらに必要になったらマックス400Mまで100Kずつ拡張するSQLです。

ALTER DATABASE DATAFILE ‘データファイル名’ AUTOEXTENDES ON NEXT サイズ MAXSIZE サイズ

ALTER DATABASE DATAFILE ‘/00/app/oracle/oradata/orc1/smp01.dbf’ AUTOEXTEND ON NEXT 100K MAXSIZE 400M;

データファイルの自動拡張設定は上限を設定せず、無制限に拡張することもできます。その場合はUNLIMITEDを使います。表領域名temp、データファイル名 /00/app/oracle/oradata/orc1/smp01.dbfで30Mの表領域に対して、領域がさらに必要になったら上限を設定せず、100Kずつ拡張するSQLです。

ALTER DATABASE DATAFILE ‘データファイル名’ AUTOEXTENDES ON NEXT サイズ MAXSIZE UNLIMITED

ALTER DATABASE DATAFILE ‘/00/app/oracle/oradata/orc1/smp01.dbf’ AUTOEXTEND ON NEXT 100K MAXSIZE UNLIMITED;

表領域を削除する

表領域の削除にはDROP TABLESPACE文を使います。表領域の削除にはSQLの作り方にちょっとした工夫が必要です。表領域を内部のセグメントを含めて、削除する場合はINCLUDING CONTENTSを指定します。内部のセグメントを含めて、表領域名tempを削除する場合のSQLです。

DROP TABLESPACE 表領域名 INCLUDING CONTENTS;

DROP TABLESPACE emp INCLUDING CONTENTS;

これで内部のセグメントも削除されます。しかし、これだけでは対応するデータファイルが削除されません。データファイルも削除する場合はINCLUDING CONTENTS AND DATAFILESを指定します。

データファイル、セグメントを含めて、表領域名tempを削除する場合のSQLです。

DROP TABLESPACE 表領域名 INCLUDING CONTENTS AND DATAFILES;

DROP TABLESPACE emp INCLUDING CONTENTS AND DATAFILES;

ちなみに、表領域を削除しようとするときに、削除しようとしている表領域の中のテーブルが使用されている状態の場合は削除できません。その場合は表領域を一度オフラインにする必要があります。表領域名tempをオフラインするSQLです。

ALTER TABLESPACE 表領域名 OFFLINE;

ALTER TABLESPACE emp OFFLINE;

これでempがオフラインにできました。この後にDROP TABLESPACEを実行すれば表領域が削除できます。

表領域はデリケートなので、大事に扱ってください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です