論理データベース構造

論理的にデータベースの領域を分割することにより、より効率的できめ細かい管理を行うことが出来る。

データベースは以下のように構成されている。

物理的構成
・ データファイル
・ 制御ファイル
・ REDOログファイル

論理的構成
・ 表領域
・ セグメント
・ エクステント
・ データブロック

 

論理的データベースについて

表領域について

1つのデータベースに属し、1つ以上のデータファイルで構成される。
データベース管理者は、表領域のオンライン/オフラインや、書き込み許可/禁止を切り替えて、表領域のアクセスを制御することができる。


セグメントについて

表領域内で、特定タイプの論理記憶構造に割り当てられる領域。
セグメントには、表セグメント、索引セグメント、一時セグメント、ロールバックセグメントなどの種類がある。セグメントは、同じ表領域に属する複数のファイルにまたがることもある。


エクステントについて

セグメント内の一連の連続するブロック。
セグメントは1つ以上のエクステントで構成される。エクステントは複数のファイルにまたがることができず、1つのデータファイル内に存在しなければならない。


データブロックについて

論理データベース構造の最小単位。
1つのデータファイルに属する1つ以上のOSブロックで構成されている。エクステントは、1つ以上のデータブロックで構成されている。データブロックのサイズは、データベース作成時に初期化パラメータ「 DB_BLOCK_SIZE 」で指定する。

 

 

表領域の管理

表領域を効率的に構成したり、運用したりすればデータベースをより柔軟に管理することができる。

例えば表領域ごとに、ユーザー領域を割り当てる、アクセスを制限する、I/O分散を行う、部分的にバックアップやリカバリを行う・・・など。

表領域は、1つのデータベースに対して最大で64000個作成が可能。
また、1つの表領域に対して、最大で1023個のデータファイルを割り当てることができる。

 

表領域の種類

SYSTEM表領域

すべてのデータベース操作で必要とされる。
データディクショナリ情報とSYSTEMロールバックセグメントを含む。


非SYSTEM表領域

ロールバックセグメント、一時セグメント、アプリケーションデータ、アプリケーション索引を含む。



表領域の作成

CREATE TABLESPACE 表領域名
DATAFILE 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }
[ AUTOEXTEND { OFF | ON [ NEXT サイズ [ K | M ] ] } ]
[ MAXSIZE { UNLIMITED | サイズ [ K | M ] } ]
[ , 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }... ]
[ MINIMUM EXTENT エクステント最小サイズ [ K | M ] ]
[ DEFAULT STORAGE ( 
[ INITIAL 初期エクステントサイズ [ K | M ] ]
[ NEXT 増分エクステントサイズ [ K | M ] ]
[ MINEXTENTS 作成エクステント数 ]
[ MAXEXTENTS { 最大エクステント数 | UNLIMITED } ]
[ PCTINCREATE エクステントサイズ拡大率 ]
)
]
[ PERMANENT | TEMPORARY ]
[ ONLINE | OFFLINE ]



OEMから表領域を作成する場合

Storage Managerで[ 表領域 ]⇒[ 作成 ]を選択 
プロパティシートの[ 一般ページ ]で表領域名を入力 
[ 追加 ]⇒[ データファイル作成 ]を選択し、データファイルを指定する
記憶領域情報は、プロパティシートの[ エクステント ]ページで指定。 
 

一時表領域 ( TEMPORARY句 )

ソート操作に使用する表領域のことをいう。この領域にはソートセグメントしか格納できない。

一時表領域を作成するには、CREATE TABLESPACE文で、TEMPORARY句を指定する。

OEMで作成する場合は、Storage Managerで表領域を作成するときに、[ 一時 ]ラジオボタンを選択してから、[ 作成 ]をクリックする。

※PERMANENT句を指定した場合、永続オブジェクトを格納するための表領域を作成する。(DEFAULT値)

 

DEFAULT STORAGE句

表領域内のセグメントで使用する記憶領域の割り当てに影響する。

次にキーワードとパラメータを示す。

INITIAL
最初のエクステンドサイズを指定する。
最小サイズは2データブロック(2×DB_BLOCK_SIZE)
デフォルトは5データブロック(5×DB_BLOCK_SIZE)
上記の最小サイズより、小さいサイズを指定した場合、自動的に上記の最小サイズに変更される。

NEXT
2番目のエクステントのサイズを指定。
最小サイズは1データブロック、デフォルトは5データブロック(5×DB_BLOCK_SIZE)
上記の最小サイズより、小さいサイズを指定した場合、自動的に上記の最小サイズに変更される。

また、一時表領域の場合はINITIALと同じ値でなくてはならない。

MAXEXTENTS
セグメントに含めることができる、エクステントの最大数を指定する。
最小値は1、最大値はデータブロックサイズにより異なる。
UNLIMITEDを指定すると、エクステントの最大数は2147483645になる。

MINEXTENTS
セグメントの作成時に割り当てられるエクステント数。
省略した場合、エクステントが1つだけ割り当てられる。

PCTINCREASE
エクステントのサイズ拡大率を指定する。
次のエクステントサイズは、前のエクステントサイズより、このパラメータで指定した割合だけ大きくなる。
デフォルト値は50。最小値は0、最大値は100。

エクステントのサイズは次の計算式を使って計算することができる。
n番目のエクステントサイズ = NEXT × { 1 + PCTINCREASE/100 }n-1


※計算された値は、5×DB_BLOCK_SIZEの倍数になるように切り上げられる。




MINIMUM EXTENT句

これを設定した場合、指定した値の倍数に相当するエクステントが表領域内のセグメントに割り当てられる。これを設定することで表領域内の断片化を制御することができる。

DEFAULT STORAGE句の、INITIALとNEXTは、このMINIMUM EXTENTで指定された値の倍数でなくてはならない。

 

 

記憶領域設定の変更

ALTER TABLESPACE構文を使用することで、設定を変更できる。

ALTER TABLESPACE 表領域名
[ MINIMUM EXTENT エクステント最小サイズ [ K | M ] ]
[ DEFAULT STORAGE ( 
[ INITIAL 初期エクステントサイズ [ K | M ] ]
[ NEXT 増分エクステントサイズ [ K | M ] ]
[ MINEXTENTS 作成エクステント数 ]
[ MAXEXTENTS { 最大エクステント数 | UNLIMITED } ]
[ PCTINCREATE エクステントサイズ拡大率 ]
)
]
[ PERMANENT | TEMPORARY ]
[ ONLINE | OFFLINE ]



OEMから記憶領域設定を変更する場合、Storage Managerから[ 表領域 ]を選択し、データファイルを指定して、プロパティシートの[ エクステント ]ページに記憶領域情報を入力する。

 

表領域のアクセス制御

データベース管理者は、表領域へのアクセスを制御したい場合、ALTER TABLESPASE構文を使うことで、表領域をオフラインにすることができる。
(ただしSYSTEM表領域とアクティブロールバックセグメントが含まれる表領域はオフラインにすることができない。)

表領域をオフラインにすると、ユーザーがその表領域にアクセス出来なくなり、データファイルの移動などの管理作業を行うことができる。


表領域をオンライン/オフラインにする構文

ALTER TABLESPACE 表領域名
{ ONLINE | OFFLINE [ NORMAL | TEMPORARY | IMMEDIATE ] };



OEMから表領域をオフラインにするには、Storage Managerで[ 表領域 ]を選択し、オフラインにする表領域を指定して、プロパティシートの[ 一般 ]ページで[ オフライン ]ラジオボタンを選択する。

 

 

表領域のデータ更新制御

表領域への書き込み許可/禁止をALTER TABLESPACE構文を使って、変更することが出来る。(ただし、アクティブロールバックセグメントが含まれる表領域は、読み込み専用に出来ない)
※Oracleサーバーより、表領域に属するファイルに対してチェックポイントが実行される。

表領域を読み込み専用にすると、その表領域をCD-ROMドライブなどの読み込み専用メディアに格納することができ、バックアップの必要もなくなる。


表領域へのデータ更新制御は、以下の構文を使用することで行える。
(コマンド実行中にデータの更新が行われないように、制限モードで起動する必要がある)

ALTER TABLESPACE 表領域名
 READ { ONLY | WRITE } ; 



OEMから表領域を読み取り専用にする場合、Storage Managerで[ 表領域 ]を選択し、読み取り専用にする表領域を指定して、[ 表領域 ]⇒[ 読み取り専用 ]を選択する。

 

表領域の削除

表領域と、その内容が不要になった場合、DROP TABLESPACE文を使用して表領域を削除することが出来る。
(実行中に、削除している表領域へのアクセスが発生しないよう、オフラインにする)


表領域の削除構文

DROP TABLESPACE 表領域名
 [ INCLUDING CONTENTS [ CASCADE CONSTRAINTS ] ] ; 



INCLUDING CONTENTS句

表領域内にオブジェクトが含まれている場合に、このオプションを指定し、データを削除する。


CASCADE CONSTRAINTS句

削除する表領域内のオブジェクトを参照する整合性制約も、別の表領域内から削除する。


OMEから表領域を削除する場合、Storage Managerで[ 表領域 ]を選択し、削除にする表領域を指定して[ 表領域 ]⇒[ 削除 ]を選択する。

※DROP TABLESPACE文を使用しても、制御ファイルのポインタが削除されるだけで、OS上のファイルは削除されない。

 

 

データファイル

データファイルはOS上の物理的なファイルで、表領域は1つ以上のデータファイルで構成される。データベース管理者は、表領域内のオブジェクトの増減に応じて、データファイルのサイズを変更したり、数を増やしたりすることができる。

 

表領域を拡大するには

データベース管理者は、データファイルを表領域に追加するか、データファイルのサイズを変更する必要がある。

追加する場合 ⇒ ALTER TABLESPACE文に、ADD DATAFILE句を指定する。

変更する場合 ⇒ ALTER DATABASE文に、RESIZE句を指定する。

 

 

データファイルの追加

データファイルを表領域へ追加する場合、以下の構文を使用する

ALTER TABLESPACE 表領域名
ADD DATAFILE 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }
[ AUTOEXTEND { OFF | ON [ NEXT サイズ [ K | M ] ] } ]
[ MAXSIZE { UNLIMITED | サイズ [ K | M ] } ]
[ , 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }... ]...;



OEMからデータファイルを追加する場合、Storage Managerで[ 表領域 ]⇒[ データファイル ]を選択し、プロパティシートの[ 一般 ]ページでファイル情報を追加する。

 

データファイルの変更

データファイルのサイズ変更を変更して表領域を拡大する場合には、以下の方法がある。

AUTOEXTEND句を指定して、自動的に行う方法

以下の構文で指定が出来る。
・ CREATE DATABASE文
・ CREATE TABLESPACE DATAFILE文
・ ALTER TABLESPACE ADD DATAFILE文

自動的に拡張されるデータファイルをOEMから追加する場合は、Storage Managerでデータファイルを作成するときに、プロパティシートの[ 自動拡張 ]ページに情報を入力する。



ALTER DATABASE文を使って、手動で変更する方法

ALTER DATABASE文にRESIZE句を使用することで手動で変更することが出来る。
ALTER DATABASE 表領域名
DATAFILE 'データファイル名' [ , 'データファイル名' ]...
RESIZE サイズ [ K | M ];




 

データファイルの移動

ALTER TABLESPACE文か、ALTER DATABASE文を使用することで、データファイルの移動が行える。
また、それぞれ何が対象となるかで、異なってくる。

ALTER TABLESPACE
アクティブロールバックセグメントや、一時セグメントが含まれていない非SYSTEM表領域のデータファイルを移動するときに使用する。

ALTER DATABASE
オフラインにすることが出来ない表領域のデータファイルを移動する際に使用する。 

 

ALTER TABLESPACE文を使用したデータファイルの移動

以下の順序を踏むことで、変更することができる。

表領域をオフラインにする 
移動するデータファイルをOSコマンドでコピーする 
ALTER TABLESPACE文を実行する 
表領域をオンラインにする

データファイル移動の構文は以下の通り。

ALTER TABLESPASE 表領域名
 RENAME DATAFILE ’データファイル名’ TO ’データファイル名’;



 

ALTER DATABASE文を使用したデータファイルの移動

以下の順序を踏むことで、変更することができる。

データベースを停止する 
移動するデータファイルをOSコマンドでコピーする 
データベースをマウントする 
ALTER DATABASE RENAME FILE文を実行する 
データベースをオープンする 
 

 

 

表領域の領域管理方法 (Oracle8i)

Oracle8iからの表領域の領域管理方法として、ディクショナリ管理とローカル管理の2種類がある。

この領域管理方法は、CREATE TABLESPACE文のEXTENT MANAGEMENT句で指定できる。
(後で変更することが出来ない)


ローカル管理について

ローカル管理とは、各データファイル内のエクステントの割り当て状況をビットマップで表示し、不要なブロックを解放するなどして自ら管理することをいう。
CREATE TABLESPACE文のEXTENT MANAGEMENT句で「 LOCAL 」を指定するとローカル管理となる。

ローカル管理の利点

ローカル管理は、ディクショナリ管理の表領域に比べ、次のような利点がある。

再帰的な領域管理操作の回避

再帰的な領域管理操作とは、表領域内の空き領域をOracleServerが内部的にデータディクショナリに対して発行するSQLのことをいう。

データディクショナリへの競合の軽減

ローカル管理領域では、データディクショナリ表において空き領域を記録しないため、エクステントの割り当てが同時に行われるような場合に、データディクショナリへの競合が現象する。

連続した空きエクステントを結合する必要がない

ロールバックセグメントが不要

データディクショナリを更新するためのロールバックセグメントが不要となる。
ただし、表領域内のオブジェクトに対して行われる、トランザクションのロールバックセグメントは作成される。 

 

ディクショナリ管理について

エクステント内の表領域を消費/解放するたびに、ロールバックセグメントやデータディクショナリ表の領域を消費/解放する操作が発生する。
(ローカル管理の表領域の場合は、データディクショナリ表が更新されないため、ロールバック情報は生成されず、データディクショナリ表に対する競合が最小限で済む)


領域管理方法の設定

CREATE TABLESPACE 表領域名
DATAFILE 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }
EXTENT MANAGEMENT { DICTIONARY 
                | LOCAL
                | { AUTOALLOCATE | UNIFORM [ SIZE サイズ [ K | M ] ] }
                };



EXTENT MANAGEMENT句のオプションは次の通り。

オプション 説明 
DICTIONARY ディクショナリ管理領域にする場合。
(DEFAULT値) 
LOCAL ローカル管理領域にする場合。 
AUTOALLOCATE ディクショナリ管理割り当てにする場合。 
UNIFORM このキーワードが無い場合は、ブロック単位でビット管理される。
指定した場合は、均一サイズのエクステント管理となり、ビットはエクステント単位になる。サイズを指定しない場合は、デフォルトのエクステントサイズ1MBが適用される。 

 

 

 

一時表領域

一時セグメントは、初期化パラメータ SORT_AREA_SIZE で指定したメモリ領域を超えるソート操作(ORDER BY、結合など)が行われた場合に必要となる。

ソート専用に指定した一時領域を使用することにより、ソート処理の効率を上げることが可能である。

CREATE TEMPORARY TABLESPACE 表領域名
TEMPFILE 'データファイル名' { SIZE サイズ [ K | M ] | REUSE }
EXTENT MANAGEMENT { DICTIONARY 
                | LOCAL
                | { AUTOALLOCATE | UNIFORM [ SIZE サイズ [ K | M ] ] }
                };



 ※注意点

ソート専用の表領域なので、永続オブジェクト(表、索引など)を格納することは出来ない。 
一時表領域を最適化するために「 UNIFORM SIZE 」は、パラメータSORT_AREA_SIZEの倍数に設定する。 

一時セグメントについて

・TEMPORARY表領域のINITIALとNEXTのサイズは常に同じとなる。
・PCTINCREASEは常に0に設定される。
・断片化させないために( SORT_AREA_SIZEの倍数+DB_BLOCK_SIZE )でなければならない。
・いくつかのトランザクションが同一の一時セグメントを同時に共有できる。
(エクステントを使用できるのは1つのトランザクションのみ)

 

表領域とデータファイルに関する情報の取得

表領域に関する情報は、データディクショナリビュー「 DBA_TABLESPACES 」から取得することができる。
また、動的パフォーマンスビュー「 V$TABLESPACE 」からも取得可能。

 

データファイルに関する情報は、データディクショナリビュー「 DBA_DATA_FILES 」から取得することができる。
また、動的パフォーマンスビュー「 V$DATAFILE 」からも取得可能。

 

V$SORT_SEGMENT

・ソートセグメントを含むTEMPORARY表領域に関する情報を表示する。
・現在のインスタンス用のソート・エクステント・プールの状態を調べることができる。 
V$SORT_USAGE

現在のインスタンス内のアクティブな
・ セッションアドレス
・ 表領域
・ 内容
・ エクステント
・ ブロック
を表示するのに使用する。 
・V$SESSIONとの結合により、アクティブなソートに使用されるエクステント数が取得できる。

DBA_TABLESPACES

列名 説明 
CONTENTS 表領域が一時表領域かどうか 
STATUS 表領域がオンラインかオフラインかどうか 

V$DATAFILE

列名 説明 
ENABLE 表領域が読み込み専用かどうか 

DBA_SEGMENTS

・データベース内の全セグメントのサイズと記憶領域設定を表示できる。

 



暗記用。

 

表領域

Oracleデータベースを論理的にグループ分けする単位 
1度に1つのデータベースに属することができる 
1つ以上のデータファイルで構成される 
1つ以上のセグメントから構成される 
SYSTEM表領域、アクティブロールバックセグメントが含まれる表領域を除き
データベース稼動中にオフラインにすることが可能 
読み書き専用、読み込み専用に切り替え可能 

データファイル

OracleServerが動作しているOSに準拠するファイル 
1つの表領域にだけ属することが可能 
作成後にサイズを変更したり、動的に拡張することが可能 

セグメント

表領域内で特定タイプの論理記憶構造に割り当てられる領域 
セグメントは1つ以上のエクステントで構成される 
セグメントは表領域をまたがることはできない 
セグメントは同じ表領域に属するデータファイルにまたがることはできる 

エクステント

1連の連続するデータブロック(Oracleブロック)で構成される 
セグメントが成長するに従い、エクステントがセグメントに追加される 
手動でセグメントにエクステントを追加することができる 
異なるデータファイルにまたがることはできない。
(1つのデータファイル内に存在する) 

データブロック

Oracle Serverが割り当て、データベースで使用するI/Oの最小単位。 
データベースの作成時、初期化パラメータ DB_BLOCK_SIZEで指定。 
不要な入出力を避けるため、OSブロックサイズの倍数にする必要がある 
データブロックの最大サイズは、OSにより異なる。 

既存の表領域に即時に追加領域を割り当てる方法

データファイルを追加する方法
ALTER TABLESPACE ADD DATAFILEコマンドを使用する。

データファイルのサイズを変更する方法
ALTER DATABASE DATAFILE RESIZEコマンドを使用する。 
 

パーティション化

パーティション化とは、頻繁にアクセスされう表などに対して、アクセスの分散を目的として、データをいくつかのパーティションに分けて、別の表領域に配置するというもの。

パーティション・オブジェクト

複数の表領域にまたがることができるオブジェクトのこと。非パーティションオブジェクトとはその逆。

 

表領域がオフラインになった場合

表領域内のオブジェクトを参照するようなSQLは発行できない。 
制御ファイルとデータディクショナリが更新される。 

 

 

 
最終更新:2008年11月15日 22:16