TOP表領域とデータファイルの管理 > 表領域の管理

表領域の管理


表領域とは

表領域の作成

表領域の変更

表領域の削除

表領域の記憶領域設定

表領域の再配置

表領域に関するデータ・ディクショナリ・ビュー


表領域とは

Oracleでは表やINDEXを表領域(=TABLE SPACE)という論理的な領域に格納してデータを整理する。
物理的にはデータファイルと呼ばれる、1つ以上の論理的なファイルからと対応付けられている。

表領域を分けるメリット

表領域の種類

表領域の論理構造


表領域を分けるメリット


表領域の種類

○SYSTEM表領域
データベース作成時に自動的に作成され、すべてのデータベースに必要とされる。
データディクショナリやストアドプロシージャ、SYSTEMロールバックセグメントなどが含まれる。
オフラインにすることは出来ない。
ここにはユーザオブジェクトは作成しない。

○SYSTEM表領域以外の表領域
表、インデックス、ロールバッグセグメント、一時セグメントを格納する。
特定の用途を持った領域には慣習的にTEMPなどの名前がつけられるが、それは判別しやすいようにであってシステム的な意味合いはない。
オラクル社では、表、インデックス、ロールバッグセグメント、一時セグメントのために、それぞれ専用の表領域を作ることを推奨している。

ディクショナリ管理表領域

領域の使用率の追跡をSQL ディクショナリ表に依存する従来の方法で管理する表領域。
現在のデフォルト設定。

ローカル管理表領域

Oracle8iより提供された表領域の種類。
ビットマップを使用して、使用済領域と空き領域が追跡される。
メリット

 ・ディクショナリによる領域管理操作の回避
 ・ディクショナリ表の空き領域の競合軽減
 ・空き領域の結合が不要(ビットマップによる自動追跡)
 ・エクステント・サイズは自動決定
 ・ロールバック情報不要(ディクショナリの変更がないため)

一時表領域

Oracle 7.3より提供された表領域の種類。
複数のソート操作で1つのソート・セグメントを共有するため、オーバーヘッドを減少し、効率的にソート操作ができる。
特に、ローカル管理表領域は、再帰的領域管理を低減しデータ・ディクショナリの競合を削減する。また、セッション中はスキーマ・オブジェクトを含むことができ、領域の結合を必要としない。

一時表領域には、表などのオブジェクトは格納できない。
Oracle8iより、ディクショナリ管理またはローカル管理を選んで作成できる。
常にNOLOGGINGモードで、読込み専用にはできず、名前は変更できず、ALTER DATABASEコマンドでは生成できず、メディア・リカバリではリカバリされず、BACKUP CONTROLFILEコマンドでは情報は生成されず、CREATE CONTROLFILEコマンドには含まれない。

ソート・セグメントは、TEMPORARY表領域を使用する最初の文により作成される。
この一時セグメントは、データベースがシャットダウンしたときに解放される。


表領域の論理構造

・ブロック
Oracleの最小記憶単位。データベース作成時に決定し、後で変更は出来ない。
通常2〜8KB。

・エクステント
連続したデータブロック。Oracleではエクステント単位で領域を割り当てる。→パフォーマンス向上のため
セグメント作成時には1つ以上のエクステントが必要となる。
空き領域があっても、連続していなければエクステントとして確保は出来ない。データファイルをまたがって確保することも出来ない。
セグメントが成長するにつれ、エクステントをセグメントに(自動/手動で)追加できる。

・セグメント
特定のタイプのデータ構造に対して割り当てたエクステントの論理的な集合。
1つ以上のエクステントで構成される。
表領域をまたがることはできないが、同じ表領域に属する複数のファイルにまたがることができる。

※データファイル(物理構造)
データ・ファイルは、オペレーティング・システム・ブロックで構成される物理構造。
データ・ファイルは1つの表領域にのみ属す。
データ・ファイルのサイズは、データファイル内の最終オブジェクトの最終ブロックの下になるように減らすことはできまない。


表領域の作成

データベース管理者は、表領域の特徴を活かし、用途に応じて効果的な表領域を作成する必要がある。

ディクショナリ管理表領域の作成

ローカル管理表領域の作成


ディクショナリ管理表領域の作成

CREATE TABLESPACE文を使用する。

代表的なキーワードとパラメータ

tablespace 作成する表領域の名前
filespec 表領域を構成するデータ・ファイルの名前、サイズを指定する。
REUSEを指定すると、既存のファイルを再利用できる。
ONLINE 作成直後に、オンラインにする。(省略値)
OFFLINE 作成直後に、オフラインにする。
TEMPORARY ソート処理専用の一時表領域として作成する。

例)次の特性を持つ表領域TBSA を作成する。

新しい表領域のデータには、1 つのデータ・ファイル(サイズは50MB )が含まれる。
この表領域に作成されるすべてのセグメントに対して、デフォルト記憶域パラメータが明示的に設定される。

CREATE TABLESPACE tbsa
DATAFILE '/u02/oracle/data/tbsa01.dbf' SIZE 50M
DEFAULT STORAGE (
INITIAL 50K
NEXT 50K
MINEXTENTS 2
MAXEXTENTS 50
PCTINCREASE 0);

○一時表領域の作成

CREATE TABLESPACE 文にTEMPORARY キーワードを指定する。

例)ディクショナリ管理の一時表領域を作成する。

CREATE TABLESPACE sort
DATAFILE '/u02/oracle/data/sort01.dbf' SIZE 50M
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MINEXTENTS 1
PCTINCREASE 0)
TEMPORARY;


ローカル管理表領域の作成

CREATE TABLESPACE 文のエクステント管理句にLOCAL を指定する。
UNIFORM SIZE を指定すると表領域は特定サイズの均一エクステント数を持つように管理される。

代表的なキーワードとパラメータ

AUTOALLOCATE エクステントは自動的に管理される。
ある程度の領域は無駄になるが、Oracle によって領域が管理されるという利点があり、領域の割当てと割当て解除を厳密に制御しなくてもよい場合等に選択。
UNIFORM SIZE 指定した特定サイズの均一エクステント数を持つように管理される。
未使用領域の厳密な制御が必要で、オブジェクトに割り当てられる領域、オブジェクト、エクステントの数およびサイズを正確に予測できる場合選択。これにより、使用できない領域が表領域に生じなくなる。

例)ローカル管理表領域LMTBSB を作成する。この場合、AUTOALLOCATE を指定しているため、エクステント・サイズは自動的に管理される。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

例)128KBのエクステント・サイズを指定して、ローカル管理表領域LMTBSB を作成する。128KB の各エクステント(64 個のOracle ブロック)は、このファイルのビットマップに1 ビットで表される。

CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

○一時表領域の作成

CREATE TEMPORARY TABLESPACE文を使用する。
この文を発行するには、CREATE TABLESPACE システム権限が必要。
ローカルに管理される表領域の方が、領域管理がはるかに容易で効率的。ローカルに管理される一時表領域では、一時ファイルが使用される。
常にNOLOGGINGモードに設定されている。

例)lmtempという名のローカル管理一時表領域を作成。16MBの各エクステント(8000個のブロック)は、このファイルのビットマップに1 ビットで表される。

CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf'
SIZE 20M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

注意: ALTER TABLESPACE 文にTEMPORARY キーワードを指定して、ローカルに管理される永続表領域をローカルに管理される一時表領域に変更することはできない。ローカルに管理される一時表領域を作成するには、CREATE TEMPORARY TABLESPACE 文を使用する必要がある。


表領域の変更

データベース管理者は、表領域の特徴を活かし、用途に応じて効果的な表領域を作成する必要がある。

ディクショナリ管理表領域の変更

ローカル管理表領域の変更


ディクショナリ管理表領域の変更

ALTER TABLESPACE文を使用する。

代表的なキーワードとパラメータ

tablespace 変更する表領域の名前
ADD DATAFILE 追加するデータ・ファイル名を指定する。
RENAME DATAFILE データ・ファイルの改名
変更前と変更後のファイル名を指定する。
ONLINE 表領域をオンラインにする。
OFFLINE 表領域をオフラインにする。
  NORMAL 全データ・ファイルにチェックポイントを実行する。
TEMPORARY オフラインになっていないデータ・ファイルに、チェックポイントを実行する。
IMMEDIATE データ・ファイルに、チェックポイントを実行しない。
TEMPORARY ソート処理専用の一時表領域として変更する。
READ ONLY 読み込み専用の表領域として変更する。

例)proj1_ts表領域に、10Mバイトのデータ・ファイルを追加。

ALTER TABLESPACE proj1_ts ADD DATAFILE '/u03/data/proj1_added_ts.dbf' SIZE 10M ;

○一時表領域への変更

既存のディクショナリ管理の永続表領域を一時表領域に変更するには、ALTER TABLESPACE文を使用する。

例)tbsaという名の永続表領域を一時表領域に変更。

ALTER TABLESPACE tbsa TEMPORARY;

○一時表領域の変更

永続表領域の場合とほぼ同じキーワードと句を使用して、ディクショナリ管理の一時表領域にALTER TABLESPACE 文を発行。


ローカル管理表領域の変更

ローカルに管理される表領域の場合、記憶域パラメータの変更はオプションではなく、使用可能エクステントを合わせる必要はない。

○一時表領域への変更

ローカル管理の永続表領域を、ローカル管理の一時表領域に変更することはできない。

○一時表領域の変更

ALTER DATABASE TEMPFILE文を使用。

例)一時ファイルu02/oracle/data/lmtemp02.dbfのサイズが4MB に変更される。

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 4M;

また、一時ファイルの自動拡張(AUTOEXTEND)と改名(RENAME FILE)もできる。


表領域のオン/オフライン化

いずれもALTER TABLESPACE文にONLINE/OFFLINEオプションを使用する。

表領域をオフライン化する方法

表領域をオンライン化する方法


表領域をオフライン化する方法

表領域は、次のような理由の場合はオフライン化することができる。

表領域がオフライン化されると、その関連ファイルがすべてオフライン化される。SYSTEM 表領域をオフライン化することはできない。

表領域オフライン化オプション

NORMAL 表領域のどのデータ・ファイルにもエラー条件が存在していない場合は、この表領域を通常の方法でオフライン化できる。書込みエラーが発生していると、現時点では表領域のデータ・ファイルをオフライン化することはできない。通常のオフラインの優先順位では、Oracleは表領域のすべてのデータ・ファイルのチェックポイントを取って、データ・ファイルをオフライン化する。
TEMPORARY 表領域の1 つまたは複数のデータ・ファイルについてエラー条件が存在している場合でも、表領域を一時的にオフライン化できる。一時オフラインの優先順位では、Oracleはまだオフライン化されていないデータ・ファイルのチェックポイントを取って、これらのファイルをオフライン化する。
オフラインになっているファイルがないときに表領域を一時的にオフライン化する場合は、表領域をオンラインに戻す前にメディア・リカバリをする必要はない。ただし、表領域の1つまたは複数のファイルが書込みエラーのためにオフラインになっており、この表領域を一時的にオフライン化する場合は、表領域をオンラインに戻す前にリカバリをする必要がある。
IMMEDIATE 表領域を即時にオフライン化する場合は、Oracle がデータ・ファイルのチェックポイントを取る必要はない。即時オフラインの優先順位では、表領域をオンラインに戻す前に、表領域のメディア・リカバリが必要となる。データベースをNOARCHIVELOG モードで運用している場合、表領域を即時にオフライン化することはできない。
FOR RECOVER リカバリ・セット内の実働データベースの表領域が、表領域のPoint-in-Time リカバリのためにオフライン化される。

注意:表領域をオフライン化する必要がある場合、可能であればNORMALオプション(デフォルト)を使用する。これにより、表領域をオフライン化してからオンラインに戻すまでに、REDOログ順序が(不完全メディア・リカバリ後にALTER DATABASE OPEN RESETLOGS文を使用して)リセットされたとしても、表領域のリカバリを必要とすることなく、オンライン化できることが保証される。

表領域を通常どおりにオフライン化できない場合に限り、TEMPORARY を指定する。この場合、エラーが原因でオフライン化されたファイルのみをリカバリすると、表領域をオンライン化できる。IMMEDIATE は、NORMAL オプションとTEMPORARY オプションを試した後にのみ指定。

例)USERS 表領域を通常の方法でオフライン化する。

ALTER TABLESPACE users OFFLINE NORMAL;

オンライン状態の表領域をオフライン化する前に、次のことに注意。


表領域をオンライン化する方

Oracle データベースがオープンされていれば、いつでもデータベース内の任意の表領域をオンライン化できる。通常、表領域は、データベース・ユーザーがその中のデータを使用できるようにオンラインになっている。

注意:オンライン化しようとする表領域が、「明らかに」(ALTERTABLESPACE OFFLINE 文のNORMAL オプションを使用して)オフラ
イン化されていない場合、最初にメディア・リカバリをしない限りオンライン化できない。メディア・リカバリをしないと、エラーが戻されて表領域はオフラインのままになる。

例)USERS 表領域をオンライン化する。

ALTER TABLESPACE users ONLINE;


表領域の削除

DROP TABLESPACE文を使用。

代表的なキーワードとパラメータ

tablespace 削除する表領域の名前
INCLUDING CONTENTS 表領域内のものをすべて削除する。
CASCADE CONSTRAINTS 削除する表領域以外のオブジェクトを参照している場合、その参照整合性制約を削除する。

例) 表領域の削除

DROP TABLESPACE proj1_ts INCLUDING CONTENTS ;

注意;表領域を削除しても、ファイルはディスクから削除ず、データ・ディクショナリの管理情報や、制御ファイルが更新されるだけ。
オペレーティング・システム・コマンドを使用して、ファイルを削除する必要がある。

○一時ファイルの削除(ローカル管理)

ALTER DATABASE TEMPFILE文を使用。

例)

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP;


表領域の記憶領域設定

記憶領域(STORAGE)パラメータとは、表や索引などのオブジェクトを作成した時に、そのオブジェクトのために、どのくらいの大きさの領域をいくつ確保するかなどを設定する。
オブジェクトの格納領域を管理することができる。

記憶領域(STORAGE)パラメータの値は、複数箇所で指定できる。
オブジェクトを作成した時に、どこで設定した値が採用されるかは、次の優先順位に基づいて決定される。

  1. オブジェクト作成・変更時に指定した値
    CREATE TABLE文 や ALTER TABLE文の STORAGEパラメータ
  2. 表領域の作成・変更時に指定した値
    CREATE TABLESPACE文 や ALETR TABLESPACE文の DEFAULT STORAGEパラメータ
  3. システムのデフォルト値

ディクショナリ管理表領域の記憶領域の設定

ローカル管理表領域の記憶領域の設定


ディクショナリ管理表領域の記憶領域の設定

DEFAULT STORAGEパラメータは、CREATE TABLESPACE文でもALTER TABLESPACE文で設定できる。

代表的なキーワードとパラメータ

INITIAL 初期エクステントの大きさをバイト単位で指定する。
NEXT 2番目のエクステントの大きさをバイト単位で指定する。
PCTINCREASE 3番目以降のエクステントの大きさを決める時に使用する成長率。
成長率で指定したパーセントの割合で、エクステントは大きくなる。
成長率 0(ゼロ)% は、NEXTエクステントと同じ大きさを意味する。
システム・デフォルトは、50 %。
MINEXTENTS オブジェクト作成時に作られるエクステントの数。
MAXEXTENTS オブジェクトに割り当てることが可能なエクステントの最大数
無制限の場合は、UNLIMITED を指定する。

例)次の特性を持つ表領域proj2_tsを作成する。

3Mバイトのデータ・ファイルを持ち、最初に500Kの大きさのエクステントを1つ割り当て、
500Kバイトで足りない場合は、700Kバイトのエクステントが、随時追加される。

CREATE TABLESPACE proj2_ts
 DATAFILE '/u03/data/proj2_ts.dbf'
 SIZE 3M
 DEFAULT STORAGE ( INITIAL 500K NEXT 700K
 MINEXTENTS 1 PCTINCREASE 0 );

注意: MINIMUM EXTENTが指定されている場合、表領域内に割り当てられるエクステントは、それぞれMINIMUM EXTENTの倍数に指定する必要がある。
オブジェクトの特性と比べて、INITIALやNEXTが小さすぎると、多くのエクステントが発生し、パフォーマンスに影響を及ぼす場合がある。
また、INITIALやNEXTが大きすぎると、領域の浪費になる。


ローカル管理表領域の記憶領域の設定

デフォルトの記憶域パラメータや最小エクステント・サイズを指定できない。
AUTOALLOCATE を指定すると、表領域はシステム管理になり、最小エクステント・サイズは64KBとなる。
UNIFORM SIZE を指定すると、表領域は指定したSIZEの均一サイズのエクステントを持つように管理される。
デフォルトSIZE は1MB 。

ローカルに管理される表領域内でセグメントを割り当てると、記憶域句はディクショナリ管理の表領域とは異なる方法で解析される。ローカルに管理される表領域内でオブジェクトを作成すると、INITIAL、NEXT およびMINEXTENTSパラメータを使用して、そのオブジェクトのセグメントの初期サイズが計算される。


表領域の再配置

表や索引の作成や削除を繰り返すと、表領域が断片化し、パフォーマンスが悪くなる場合がある。
断片化を改善するためには、Oracle Enterprise Managerの機能を使用したり、SQLコマンドを使用する。
ローカル管理表領域の場合、断片化を改善する必要はない。

連続していない空きエクステントは、次の方法で結合できる。

  1. SMONが定期的に結合する。
    バックグラウンド・プロセスのSMONは、定期的にデータ・ファイルを監視し、不連続な空きエクステントを結合する。
  2. ALTER TABLESPACE文で明示的に結合する。
    ALTER TABLESPACE文で、COALESCEオプションを指定する。
    SMONが定期的に実施している結合を、コマンドを使って指示できる。

例)proj2_ts表領域の空き領域を結合し、連続する大きなエクステントに結合する。
   ALTER TABLESPACE proj2_ts COALESCE ;

注意;COALESCEオプションは排他的なので、ALTER TABLESPACE文の他のオプションと、同時に指定することはできない。

DBA_FREE_SPACE およびDBA_FREE_SPACE_COALESCEDビューを使用して、空き領域を監視し、結合アクティビティの統計情報を表示できる。
次の文では、表領域TABSP_4の空き領域を表示す。

SELECT block_id, bytes, blocks
FROM dba_free_space
WHERE tablespace_name = 'TABSP_4'
ORDER BY block_id;

結合アクティビティの統計情報を表示すには、DBA_FREE_SPACE_COALESCED ビューを使用する。 このビューは、領域を合わせる必要があるかどうかを判断する場合にも役立つ。


表領域に関するデータ・ディクショナリ・ビュー

V$TABLESPACE 制御ファイルからのすべての表領域の名前と番号
DBA_TABLESPACES
USER TABLESPACES
すべての(またはユーザーがアクセス可能な)表領域の説明
DBA_SEGMENTS
USER_SEGMENTS
すべての(またはユーザーがアクセス可能な)表領域内のセグメントに関する情報
DBA_EXTENTS
USER_EXTENTS
すべての(またはユーザーがアクセス可能な)表領域内のデータ・エクステントに関する情報
DBA_FREE_SPACE
USER_FREE_SPACE
すべての(またはユーザーがアクセス可能な)表領域内の使用可能エクステントに関する情報
V$DATAFILE 所有する表領域の表領域番号など、すべてのデータ・ファイルに関する情報
V$TEMPFILE 所有する表領域の表領域番号など、すべての一時ファイルに関する情報
DBA_DATA_FILES 表領域に属するファイル(データ・ファイル)を表示
DBA_TEMP_FILES 一時表領域に属するファイル(一時ファイル)を表示
V$TEMP_EXTENT_MAP すべてのローカル管理一時表領域内のすべてのエクステントに関する情報
V$TEMP_EXTENT_POOL ローカル管理一時表領域の場合:キャッシュに送られ各インスタンスに使用される一時領域の状態
V$TEMP_SPACE_HEADER 各一時ファイルの使用済/空き領域を表示
DBA_USERS すべてのユーザーのデフォルト表領域と一時表領域
DBA_TS_QUOTAS すべてのユーザーの表領域割当て制限を表示
V$SORT SEGMENT 特定インスタンス内のすべてのソート・セグメントに関する情報。このビューは、表領域がTEMPORARY タイプの場合にのみ更新される
V$SORT_USER ユーザーおよび一時/永続表領域に使用される一時ソート領域

例)データベース内のすべての表領域の名前とデフォルト記憶域パラメータをすべて記述するには、DBA_TABLESPACES ビューに対して次の問合せを使用。

SELECT tablespace_name "TABLESPACE",
initial_extent "INITIAL_EXT",
next_extent "NEXT_EXT",
min_extents "MIN_EXT",
max_extents "MAX_EXT",
pct_increase
FROM dba_tablespaces;

例)データ・ファイルの名前、サイズおよびデータベースの対応する表領域を記述するには、DBA_DATA_FILES ビューに対して次の問合せを入力。

SELECT file_name, blocks, tablespace_name
FROM dba_data_files;

例)データベース内の各表領域について、使用可能エクステントと結合アクティビティの統計を生成するには、次の問合せを入力する。

SELECT tablespace_name "TABLESPACE", file_id,
COUNT(*) "PIECES",
MAX(blocks) "MAXIMUM",
MIN(blocks) "MINIMUM",
AVG(blocks) "AVERAGE",
SUM(blocks) "TOTAL"
FROM sys.dba_free_space
WHERE tablespace_name = 'SYSTEM'
GROUP BY tablespace_name, file_id;


TOP表領域とデータファイルの管理 > 表領域の管理

2001/07/20 担当:R.S