1.

Oracle Tablespace (表領域) 完全ガイド|LMT/BIGFILE/AUTOEXTEND/TDE

編集
この記事の要点
  • 表領域 (Tablespace) は Oracle の論理ストレージ単位。物理 Datafile を 1 つ以上束ねる
  • 種類: 永続 (USERS/SYSAUX/SYSTEM) / 一時 (TEMP) / UNDO
  • 管理方式: LMT (Locally Managed Tablespace) が標準。Dictionary 管理は廃止
  • サイズ形態: Smallfile(複数 Datafile)vs Bigfile(1 Datafile / 最大 128TB)
  • 運用: AUTOEXTEND ON + MAXSIZEDBA_TABLESPACES / DBA_DATA_FILES で監視、TDE で暗号化

表領域とは

表領域 (Tablespace) は Oracle Database における論理的なストレージの単位です。テーブル・索引・LOB などのスキーマオブジェクトは表領域に属し、表領域は物理的なデータファイル (Datafile) を 1 つ以上束ねます。データファイルが OS 上のファイルそのものなのに対し、表領域は「論理的なまとまり」を提供し、ユーザーやアプリは表領域名でストレージを扱えます。

表領域の種類

種別主要表領域用途
永続 (Permanent)SYSTEM, SYSAUX, USERS通常のテーブル・索引
一時 (Temporary)TEMPソート、ハッシュ結合、グローバル一時表
UNDOUNDOTBS1トランザクションの取り消し情報、読み取り一貫性
ビッグファイル任意1 つの巨大データファイルで構成

標準で作られる表領域

  • SYSTEM: データディクショナリ。ユーザー表は置かないのが原則
  • SYSAUX: AWR / Statspack / 各種メタ。SYSTEM の補助
  • USERS: ユーザー作成オブジェクト用のデフォルト
  • TEMP: 一時セグメント (ソート等)
  • UNDOTBS1: UNDO データ

LMT vs Dictionary Managed

方式エクステント管理備考
LMT (Locally Managed)表領域内のヘッダにビットマップOracle 9i 以降の標準。高速・断片化少
Dictionary ManagedSYSTEM のディクショナリ表で管理レガシー。新規不可

Smallfile vs Bigfile

形態Datafile 数最大サイズ用途
Smallfile (既定)1 表領域に複数1 Datafile = 4M ブロック × ブロックサイズ (例: 32GB)従来通り
Bigfile1 表領域に 1 つだけ4G ブロック × ブロックサイズ (例: 32TB / 128TB)ASM / DWH 等の巨大 DB

CREATE TABLESPACE 例

-- 永続表領域 (LMT + AUTOALLOCATE + AUTOEXTEND)
CREATE TABLESPACE app_data
  DATAFILE '/u01/oradata/orcl/app_data01.dbf'
    SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 30G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO;

-- 複数 Datafile の Smallfile 表領域
CREATE TABLESPACE app_data2
  DATAFILE
    '/u01/oradata/orcl/app2_01.dbf' SIZE 4G,
    '/u02/oradata/orcl/app2_02.dbf' SIZE 4G
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

-- Bigfile 表領域
CREATE BIGFILE TABLESPACE app_big
  DATAFILE '/u01/oradata/orcl/app_big.dbf' SIZE 100G AUTOEXTEND ON;

-- 一時表領域
CREATE TEMPORARY TABLESPACE temp2
  TEMPFILE '/u01/oradata/orcl/temp2.dbf' SIZE 4G AUTOEXTEND ON
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

-- UNDO 表領域
CREATE UNDO TABLESPACE undotbs2
  DATAFILE '/u01/oradata/orcl/undotbs2.dbf' SIZE 4G AUTOEXTEND ON;

ALTER TABLESPACE (変更・拡張)

-- 表領域にデータファイル追加
ALTER TABLESPACE app_data
  ADD DATAFILE '/u02/oradata/orcl/app_data02.dbf' SIZE 4G AUTOEXTEND ON;

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

-- AUTOEXTEND 設定変更
ALTER DATABASE DATAFILE '/u01/oradata/orcl/app_data01.dbf'
  AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED;

-- 読み取り専用化
ALTER TABLESPACE app_data READ ONLY;
ALTER TABLESPACE app_data READ WRITE;

-- オフライン化
ALTER TABLESPACE app_data OFFLINE;
ALTER TABLESPACE app_data ONLINE;

-- 削除
DROP TABLESPACE app_data INCLUDING CONTENTS AND DATAFILES;

監視ビュー

-- 表領域一覧と設定
SELECT tablespace_name, contents, status, extent_management,
       allocation_type, segment_space_management, bigfile
FROM dba_tablespaces;

-- 表領域使用率
SELECT df.tablespace_name,
       ROUND(SUM(df.bytes)/1024/1024, 2) total_mb,
       ROUND(SUM(df.bytes - NVL(fs.free, 0))/1024/1024, 2) used_mb,
       ROUND((SUM(df.bytes - NVL(fs.free, 0)) / SUM(df.bytes)) * 100, 2) used_pct
FROM dba_data_files df
LEFT JOIN (SELECT file_id, SUM(bytes) free FROM dba_free_space GROUP BY file_id) fs
       ON df.file_id = fs.file_id
GROUP BY df.tablespace_name
ORDER BY used_pct DESC;

-- データファイル一覧
SELECT file_name, tablespace_name, bytes/1024/1024 mb,
       autoextensible, maxbytes/1024/1024 max_mb
FROM dba_data_files;

-- TEMP の使用率
SELECT tablespace_name,
       tablespace_size/1024/1024 size_mb,
       allocated_space/1024/1024 alloc_mb,
       free_space/1024/1024 free_mb
FROM dba_temp_free_space;

ユーザーのデフォルト表領域

-- データベースのデフォルト表領域
ALTER DATABASE DEFAULT TABLESPACE users;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

-- ユーザー単位
ALTER USER scott
  DEFAULT TABLESPACE app_data
  TEMPORARY TABLESPACE temp
  QUOTA UNLIMITED ON app_data
  QUOTA 0 ON system;

-- ユーザーの設定確認
SELECT username, default_tablespace, temporary_tablespace FROM dba_users;
SELECT * FROM dba_ts_quotas WHERE username = 'SCOTT';

Tablespace 暗号化 (TDE)

Oracle Advanced Security の透過的データ暗号化 (TDE) で表領域単位の暗号化が可能。アプリ無改修で実現できます。

-- 暗号化された表領域の作成 (TDE Master Key 設定済み前提)
CREATE TABLESPACE app_enc
  DATAFILE '/u01/oradata/orcl/app_enc01.dbf' SIZE 2G AUTOEXTEND ON
  ENCRYPTION USING 'AES256'
  DEFAULT STORAGE (ENCRYPT);

-- 既存表領域のオンライン暗号化 (12.2+)
ALTER TABLESPACE app_data ENCRYPTION ONLINE USING 'AES256' ENCRYPT;

-- 確認
SELECT tablespace_name, encrypted, encryptionalg FROM dba_tablespaces;

FAQ

Q: 表領域とスキーマの関係
A: スキーマ (ユーザー) はオブジェクトの所有者、表領域は格納場所。1 つのスキーマで複数の表領域を使うことも、1 つの表領域に複数スキーマのオブジェクトを置くことも可能。

Q: AUTOEXTEND を OFF にすべきケースは?
A: 共有ディスクが満杯になると DB 全体が止まるため、テスト環境やパーティション内のディスク容量を厳密に制御したい本番ではあえて OFF にし、容量監視で先回り運用するケースもあります。

Q: Bigfile への移行
A: オンラインでの直接変換は不可。DBMS_REDEFINITION や Data Pump で対象オブジェクトを Bigfile 表領域へ移動するのが現実解。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 表領域
  2. セグメント
  3. エクステント
  4. データブロック

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