6.2 表領域の管理

■表領域の新規作成

■EM Expressによる表領域の新規作成

■SQL文を使用した表領域の新規作成

SQL文を使用して、表領域を作成するには、CREATE TABLESPACE文を使用する。文内でデータファイルのサイズとファイルのパスを指定する。

データベースは、指定された通りにデータファイルを割り当ててフォーマットする。

表領域を作成する際に、以下のオプションを指定できます。

・EXTENT MANAGEMENT LOCAL

・SEGMENT SPACE MANAGEMENT

○EXTENT MANAGEMENT LOCAL

このオプションは、ローカル管理表領域の指定になります。

ローカル管理表領域では、その表領域内の全てのエクステントの割当情報がfileのヘッダーに格納されているビットマップを使用して、追跡されるため、エクステントの割当および解除のパフォーマンスが向上します。

また、ローカル管理表領域では、エクステントサイズを自動的に管理するか、特定サイズの均一エクステントで管理するかを指定できます。

デフォルトでは、AUTOALLCATE(自動管理)となっています。

管理方法説明
AUTOALLOCATEデータベースが自動的にエクステントの割当を管理する。最小エクステントサイズは64KB。デフォルト値。
UNIFORM SIZEサイズエクステントがサイズに指定したサイズで、均一に管理される。サイズを指定しない場合のデフォルトは、1MB

EXTENT MANAGEMENT句にDICTIONARYと指定すると、下位互換のディクショナリ管理表領域となる。ディクショナリ管理表領域では、エクステントの割当および解除をファイルのヘッダに格納されているビットマップではなく、データディクショナリで管理する。

エクステントの割当および解除のパフォーマンスは、ビットマップの方が優れているため、ローカル管理表領域がデフォルトとなっている。

○SEGMENT SPACE MANAGEMENT

こNオプションは、セグメント領域の管理方法の指定です。ローカル管理表領域のセグメント領域の管理方法は、自動と手動の2種類がある。

自動セグメントの領域管理では、セグメント内の空き領域を管理するためにビットマップを使用する。

手動セグメント領域管理では、セグメント内の空き領域を管理するために空きリストと呼ぶリンクされたリストを使用する。

従来から行われていた方法である。

自動セグメント領域管理の方が効率的であるため、通常は自動セグメントを選択する。

デフォルトはAUTO(自動セグメント領域管理)ASSM Automatic Segment Space Manaement

ローカル管理表領域のセグメント領域の管理方法

管理方法説明
AUTO自動セグメント領域管理(ASSM)。デフォルト値。セグメント内の空き領域をビットマップで管理する。
MANUAL手動セグメント領域管理。セグメント内の空き領域を空きリストで管理する。

■OMFを使用した表領域の新規作成

OMF(Oracle Managed Files)の機能を使用すると、Oracleデータベースを構成するOSファイルを、データベース管理者が直接管理する必要がなくなる。

OMFを使用する場合は、DB_CREATE_FILE_DEST初期化パラメータでfileの作成場所(ファイルシステムディレクトリまたは、Oracle ASMディスクグループの場所)を定義する。

データベースは、そのディレクトリにファイルを自動的に作成し、管理する。

ファイル名は、データベースが自動設定する。

▼fileの作成場所の指定

ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘ディレクトリ名’;

▼表領域の作成

CREATE TABLESPACE 表領域名;

上記のコマンドによって、その場所に表領域が作成される。

この方法で作成したデータファイルのデフォルトのサイズは、100MBで、無制限に自動拡張可能です。

ファイル名は、Oracleデータベースが命名して管理しているため、ファイル名を変更すると、データベースはOMFとして認識できなくなる。

■表領域の拡張

表領域のサイズを増やす場合は、データファイルを追加するか、表領域のデータファイルサイズを増やす方法がある。

・既存の表領域へデータファイルを追加する。

・既存のデータファイルのサイズを手動で拡張する。

・既存のデータファイルの自動拡張を設定する。

■既存の表領域へデータファイルを追加する

既存の表領域へデータファイルを追加するには、ALTER TABLESPACE文を使用する。

▼既存の表領域へのデータファイル追加

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

■既存のデータファイルのサイズを手動で拡張する

既存のデータファイルのサイズを手動で拡張するには、ALTER DATABASE 文を用いる。この方法では、データファイルを追加すること無く、データベースに領域を追加できる。

ファイルに格納されているデータ量が指定の縮小サイズよりも小さい場合は、データファイルを縮小することも可能。(すでに指定サイズ以上のデータが格納されている場合は縮小不可)

▼既存のデータファイルのサイズを手動で拡張する

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

■既存のデータファイルの自動拡張を設定する

既存のデータファイルに自動拡張の設定を行うと、より多くの領域が必要になった時に自動的にデータファイルのサイズが拡張される。

エクセテントがさらに必要になった場合は、NEXT句で指定した増分サイズをMAXSIZE句で指定した最大サイズになるまで自動的にサイズ割当が可能。

データファイルに割り当てられるディスク領域を制限しない場合は、UNLIMITEDを指定する。

▼既存のデータファイルの自動拡張設定

ALTER DATABASE DATAFILE ‘データファイル名’

AUTOEXTEND ON

NEXT サイズ

MAXSIZE {サイズ | UNLIMITED};

■表領域の拡張以外の表領域の変更

表領域の拡張以外の変更操作ができます。

・表領域使用率のアラートの閾値を変更する。

・表領域のステータス(状態)をオフラインに変更できる。

表領域のデータファイルには、自動拡張の設定ができる。自動拡張を有効にしていない場合、表領域のサイズがクリティカルまたは、警告の閾値に達すると、アラートが発生する。また、自動拡張された表領域が指定した制限サイズに近づいているときにも、アラートが発生する。

これらのアラートに対応するには、表領域の拡張操作にて、表領域のサイズを手動で増やしておく。

データベース管理者は、表領域のクリティカルまたは、警告の閾値パラメータを設定することができる。閾値パラメータは表領域のディスク領域を管理するのに役立つ。

通常、閾値パラメータを設定するには、Enterprise Manager Cloud Controlを使用する。表領域をオフライン化するのは、表領域を移動するなどのメンテナンスを行うために、ユーザがアクセスできないようにする場合、オフラインバックアップを実行する場合などである。

■表領域の削除

表領域を削除すると、表領域に格納されているオブジェクトや、データディクショナリに格納されているオブジェクトの定義も削除される。

対応するデータファイルについては、EM Expressを使用した場合は、デフォルトで削除される設定になっている。SQL文を使用した場合は、デフォルトでは削除されない。

■EM Expressを使用した表領域の削除

■SQL文を使用した表領域の削除

SQL文を使用して、表領域を削除するには、DROP TABLESPACE文を使用する。空でない表領域を内部のセグメントも含めて、削除する場合は、INCLUDING CONTENTSを指定する。

SQL文で表領域を削除する場合は、デフォルトで対応するデータファイルは、削除されない。

データファイルを削除するには、AND DATAFILESオプションを使用するか、OSコマンドを使用する必要がある。

▼表領域の削除

DROP TABLESPACE 表領域名 INCLUDING CONTENTS;

▼表領域の削除(データファイルも削除)

DROP TABLESPACE 表領域名 INCLUDING CONTENTS AND DATAFILES;

表領域を削除する際にアクティブセグメント(削除しようとしている表領域の内部の表が現在使用されている状態)が含まれている場合は、表領域を削除することはできない。表領域を削除する前にその表領域をオフラインにすることが推奨される。

▼表領域のオフライン化

ALTER TABLESPACE 表領域名 OFFLINE;

■オンラインでのセグメントの縮小

表領域内のセグメントに対して、DML操作(データの挿入、更新、削除)が行われ、それらを継続的に行うと、時間の経過とともにエクステント内に使用しているデータブロックと空き領域のデータブロックが混在し、データが断片化して、部分的な未使用領域が発生することがある。

断片化している小さな領域を放置すると、パフォーマンスに影響が出る恐れがある。オンラインでのセグメントの縮小を行い、断片化しているデータを統合する。この作業を行うと、表領域の空き領域を増やすことができる。

■セグメントの縮小

セグメントの縮小プロセスでは、最高水位標(HWM:High Water Mark/どのブロックまでデータを入れたことがあるかを示す値)の下の断片化されたデータを統合して、セグメントを縮小する。

縮小するとHWMが移動し、その結果、HWMの上に新しい空き領域ができる。

その後、HWMよりも上のエクステントは割当を解除できる。オンラインでセグメントの縮小を実行している場合、ユーザは、これらの縮小処理をしているセグメントに対して、この操作の開始から終了までの大半で、問合せおよびDML操作を実行できる。

また、特別なディスク領域の割り当ては不要である。

オンラインでセグメントの縮小を行うには、セグメントアドバイザを使用する方法が便利である。

■セグメントアドバイザとは

セグメントアドバイザとは、オブジェクトのデータを分析して、再利用できる未使用領域が存在するデータベースオブジェクトを特定することができる機能。

この機能は、自動セグメント領域管理(ASSM)を備えたローカル管理表領域のセグメントに対してのみ使用できる。

○セグメントアドバイザによるセグメントの縮小

Oracleデータベースでは、セグメントアドバイザが定期的に実行され、セグメントの分析が行われる。必要な場合は、手動で実行することも可能。

自動的に行われるセグメントアドバイザの分析を自動セグメントアドバイザと呼ぶ。

自動セグメントアドバイザの分析結果や、手動セグメントアドバイザ実行結果は、Enterprise Manager Cloud ControlまたはPL/SQLパッケージプロシージャで確認できる。

セグメントアドバイザの分析結果、セグメントアドバイザ推奨と表示されると、手動で縮小操作を実行して、セグメントを縮小することができる。

縮小操作を実行すると、断片化されたデータが統合されて、セグメントの前方部分に集められる。

空き領域は、他のセグメントが使用できるように表領域に戻すか、同一セグメントの今後のデータの挿入に備えてそのまま残すことができる。

あわせて読みたい