5.

Oracle表領域とは|SYSTEM・UNDO・TEMPと自動拡張の仕組み

編集
この記事の要点
  • 表領域 (Tablespace) は Oracle データベースの論理的なストレージ単位
  • 物理的には 1 つ以上のデータファイル (.dbf) で構成される
  • 主要表領域: SYSTEM (辞書) / SYSAUX (補助) / UNDO (取消) / TEMP (作業)
  • テーブル・インデックス作成時に格納先表領域を指定 (TABLESPACE 句)
  • 自動拡張 (AUTOEXTEND) を設定すると領域不足を防げる — ただし上限 (MAXSIZE) は必須

表領域 (Tablespace) とは

表領域は Oracle データベースの論理的なストレージ単位です。テーブルやインデックスなどのスキーマオブジェクトはすべてどこかの表領域に属し、表領域は 1 つ以上のデータファイル (OS 上の物理ファイル) に裏付けられます。

Oracle のストレージ階層を整理すると以下のようになります。

階層論理 / 物理説明
データベース論理最上位の入れ物
表領域論理論理的なグループ化単位
セグメント論理テーブル / インデックスなど 1 オブジェクト分
エクステント論理連続したブロックの集まり
ブロック論理I/O の最小単位 (通常 8KB)
データファイル物理OS 上のファイル (.dbf)

標準で用意される主な表領域

表領域役割
SYSTEMデータディクショナリ (システムカタログ)。触らない
SYSAUXSYSTEM の補助。AWR / Statspack 等のリポジトリ
UNDO (UNDOTBS1 等)ロールバック / 読み取り一貫性に使う UNDO データ
TEMP (TEMP)ソートやハッシュ結合の中間データを格納する一時表領域
USERSユーザー作成オブジェクトのデフォルト格納先

業務用には専用の表領域を作るのが定石。SYSTEM や USERS に業務テーブルを置くのは原則 NG。

表領域の作成 (DDL)

-- 永続表領域の作成
CREATE TABLESPACE app_data
    DATAFILE '/u01/app/oracle/oradata/ORCL/app_data01.dbf' SIZE 500M
    AUTOEXTEND ON NEXT 100M MAXSIZE 10G
    EXTENT MANAGEMENT LOCAL
    SEGMENT SPACE MANAGEMENT AUTO;

-- 一時表領域
CREATE TEMPORARY TABLESPACE app_temp
    TEMPFILE '/u01/app/oracle/oradata/ORCL/app_temp01.dbf' SIZE 200M
    AUTOEXTEND ON NEXT 100M MAXSIZE 5G;

-- UNDO 表領域
CREATE UNDO TABLESPACE app_undo
    DATAFILE '/u01/app/oracle/oradata/ORCL/app_undo01.dbf' SIZE 200M
    AUTOEXTEND ON NEXT 100M MAXSIZE 5G;

-- ビッグファイル表領域 (1 表領域 = 1 巨大ファイル、最大 128TB)
CREATE BIGFILE TABLESPACE big_data
    DATAFILE '/u01/app/oracle/oradata/ORCL/big_data.dbf' SIZE 1G
    AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;

主要句の意味

意味
DATAFILE裏付けとなる物理ファイル名とサイズ
AUTOEXTEND ON領域不足時に自動拡張
NEXT1 回の拡張量
MAXSIZE最大サイズ。UNLIMITED も指定可能
EXTENT MANAGEMENT LOCALエクステント管理方式 (現代はほぼ LOCAL)
SEGMENT SPACE MANAGEMENT AUTOセグメント空き領域の自動管理 (ASSM)
BIGFILE巨大な単一ファイル形式

表領域へのオブジェクト割り当て

-- テーブル作成時に表領域を指定
CREATE TABLE orders (
    order_id   NUMBER PRIMARY KEY,
    user_id    NUMBER NOT NULL,
    amount     NUMBER(10,2)
) TABLESPACE app_data;

-- インデックスは別表領域に置くのが定番 (I/O 分散)
CREATE INDEX idx_orders_user ON orders(user_id)
    TABLESPACE app_index;

-- ユーザーのデフォルト表領域を変更
ALTER USER app_user
    DEFAULT TABLESPACE app_data
    TEMPORARY TABLESPACE app_temp
    QUOTA UNLIMITED ON app_data;

表領域の管理 (運用)

-- データファイル追加 (拡張)
ALTER TABLESPACE app_data
    ADD DATAFILE '/u01/.../app_data02.dbf' SIZE 1G
    AUTOEXTEND ON NEXT 200M MAXSIZE 10G;

-- データファイルのリサイズ
ALTER DATABASE DATAFILE '/u01/.../app_data01.dbf' RESIZE 2G;

-- 自動拡張のオン / オフ
ALTER DATABASE DATAFILE '/u01/.../app_data01.dbf'
    AUTOEXTEND ON NEXT 100M MAXSIZE 5G;

-- オフラインに
ALTER TABLESPACE app_data OFFLINE;

-- 削除 (中身ごと、ファイルも消す)
DROP TABLESPACE app_data INCLUDING CONTENTS AND DATAFILES;

使用量の確認 SQL

-- 表領域ごとの使用量
SELECT
    df.tablespace_name,
    ROUND(df.bytes/1024/1024, 1)     AS total_mb,
    ROUND(NVL(fs.free,0)/1024/1024,1) AS free_mb,
    ROUND((df.bytes - NVL(fs.free,0))/df.bytes * 100, 1) AS used_pct
FROM
    (SELECT tablespace_name, SUM(bytes) AS bytes
     FROM dba_data_files GROUP BY tablespace_name) df
LEFT JOIN
    (SELECT tablespace_name, SUM(bytes) AS free
     FROM dba_free_space GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
ORDER BY used_pct DESC;

-- 表領域内のセグメントランキング
SELECT segment_name, segment_type,
       ROUND(bytes/1024/1024, 1) AS mb
FROM dba_segments
WHERE tablespace_name = 'APP_DATA'
ORDER BY bytes DESC
FETCH FIRST 20 ROWS ONLY;

表領域設計のベストプラクティス

  • 業務オブジェクトは専用表領域に分ける (SYSTEM / USERS を汚さない)
  • データとインデックスを別表領域に置くと I/O 分散できる
  • 長期データはパーティションで複数表領域に分散 (古いパーティションは別ディスクに)
  • 自動拡張は ON にしておく。ただし MAXSIZE を必ず指定 (UNLIMITED は監視必須)
  • 監視: 80% 使用で警告、90% で対応開始のしきい値が一般的
  • UNDO と TEMP はセッション同時実行数に応じてサイズ決定

FAQ

Q: 表領域とスキーマの違いは?
A: スキーマは所有者 (ユーザー) 単位のオブジェクト集まり、表領域は物理ストレージのグループ。1 つのテーブルは「ユーザー A が所有」「表領域 X に格納」のように直交する。

Q: 移行や削除で気をつけることは?
A: DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES物理ファイルも消えるので慎重に。RMAN バックアップ必須。

Q: BIGFILE 表領域のメリットは?
A: 単一の大容量ファイル管理で運用シンプル。大規模 DWH 向け。ただしファイル単位のリカバリ単位が大きいのはデメリット。

関連

  • エクステント — 表領域内の連続ブロック
  • セグメント — テーブル / インデックスの実体
  • データファイル — 物理ストレージ
  • UNDO / TEMP — 特殊用途の表領域
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 環境構築
  2. データベースの構成
  3. SQL
  4. DBオブジェクト
  5. 表領域
  6. 管理ツール
  7. パフォーマンス関連

最近更新/作成されたページ