Oracleデータベースの記憶域

※ポイント※
     表領域とデータファイル、表領域の管理などが対象となる。
     表領域の変更・削除の際の特徴や使用オプションについても押さえておく。
     
 表領域とデータファイル 

Oracleサーバでは、データは論理的には表領域に格納され、物理的にはデータファイルに格納される。

表領域のサイズは、対応付けられたデータファイルの合計サイズになる。

領域を確保して保存する必要のあるオブジェクトは「セグメント」と呼ばれる。
表や索引などはセグメントである。
実際の領域割り当ては、データファイル内に「エクステント」という単位で獲得することで行われ、
セグメントの領域拡張(追加領域割り当て)にも対応する。
エクステントは「データブロック」で構成され、実際のレコードはデータブロックに格納されている。

エクステントの割り当て管理方法によって、表領域は2種類に分けられる。

・ ディクショナリ管理表領域 
エクステントの管理は、データディクショナリによって行われる。
エクステントの割り当て/解除が行われるとデータディクショナリが更新されるため、内部的なSQL(再帰的SQL)の発行が多くなる。


・ ローカル管理表領域 
エクステントの管理は、データファイルのヘッダに格納されるビットマップという領域で行われる。
ビットマップは、エクステントの割り当て/解除が行われると変化するようになっている。
ディクショナリ管理表領域と異なり、ディクショナリアクセスがいらないため、内部的なSQL(再帰的SQL)は不要。

デフォルトの表領域はローカル管理表領域である。
SYSTEM表領域がディクショナリ管理表領域として作成された場合に限り、ディクショナリ管理を使用することができる。

ローカル管理表領域の場合、さらにセグメント内の空き領域管理方法として次の2種類がある。

・ 手動セグメント領域管理 
セグメント内の空き領域管理に空きリストを使用する方法。
空きリストは、行が挿入されるデータブロックの決定のために使用されるリストである。
空きリストの数は、セグメント属性FREELISTSとFREELIST GROUPSで決定される。
データブロック内の使用済み領域がセグメント属性PCTUSEDを下回ると、空きリストに登録される。


・ 自動セグメント領域管理 
セグメント内の空き領域管理にセグメント内のビットマップブロックを使用する方法である。
行の挿入時や削除時にメンテナンスされるため、空きリストを使用しない。
従って、セグメント属性FREELISTS、FREELIST GROUPS、PCTUSEDは設定できない(設定しても無視される)。

Oracle Database 10g Release1までは手動セグメント領域管理がデフォルトだが、
Oracle Database 10g Release 2より、自動セグメント領域管理がデフォルトになる。

 表領域の変更 

既存の表領域に対して、さまざまな変更を行うことができる。次のような特徴がある。
・ ステータス 
READ WRITE(読み込みと書き込みが可能)、READ ONLY(読み込みのみ可能)、OFFLINEの3つがある。
READ ONLYは、SYSTEM表領域とSYSAUX表領域に対して指定することはできない。
表領域をOFFLINEにする際、IMMEDIATE(即時)オプションを使用すると、次回ONLINEに戻すときにリカバリが必要になる。


・ サイズ変更 
表領域のサイズを大きくする方法として、表領域にデータファイルを追加する方法と、既存のデータファイルサイズを大きくする方法の2つがある。
既存のデータファイルを大きくする方法には、手動と自動(AUTOEXTEND ON)がある。
既存のデータファイルを小さくすることも可能だが、使用されているサイズよりも小さくすることはできない。

データファイルを追加する

ALTER TABLESPACE 表領域名 ADD DATAFILE 'ファイル名' SIZE サイズ;

既存のデータファイルサイズを大きくする

ALTER DATABASE DATAFILE 'ファイル名'

 表領域の削除 

表領域を削除する場合、その表領域に格納されているセグメントも同時に削除する必要がある。
デフォルトでは空の表領域のみ削除することができる。
次のようなオプションを使用することで、この動作を変更できる。

・ INCLUDING CONTENTS句 
表領域に格納されているセグメントも同時に削除する。


・ INCLUDING CONTENTS AND DATAFILES句 
表領域に格納されているセグメントと、表領域に対応付けられているデータファイルも同時に削除する。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License