| この記事の要点 |
|
表領域 (Tablespace) とは
表領域は Oracle データベースの論理的なストレージ単位です。テーブルやインデックスなどのスキーマオブジェクトはすべてどこかの表領域に属し、表領域は 1 つ以上のデータファイル (OS 上の物理ファイル) に裏付けられます。
Oracle のストレージ階層を整理すると以下のようになります。
| 階層 | 論理 / 物理 | 説明 |
|---|---|---|
| データベース | 論理 | 最上位の入れ物 |
| 表領域 | 論理 | 論理的なグループ化単位 |
| セグメント | 論理 | テーブル / インデックスなど 1 オブジェクト分 |
| エクステント | 論理 | 連続したブロックの集まり |
| ブロック | 論理 | I/O の最小単位 (通常 8KB) |
| データファイル | 物理 | OS 上のファイル (.dbf) |
標準で用意される主な表領域
| 表領域 | 役割 |
|---|---|
SYSTEM | データディクショナリ (システムカタログ)。触らない |
SYSAUX | SYSTEM の補助。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 | 領域不足時に自動拡張 |
NEXT | 1 回の拡張量 |
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 — 特殊用途の表領域
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- MariaDB Monitor (mysql コマンド) の使い方 2026-10-14 15:21:02
- MariaDB の管理ツール (phpMyAdmin / DBeaver 等) 2026-10-14 15:21:02
- Google Custom Search JSON API|新規受付終了・移行期限と既存実装の確認 2026-10-14 14:50:13
- MySQL rootの初期パスワード確認|導入方式・Docker既存DB・復旧の注意 2026-10-14 14:39:34
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧) 2026-10-14 14:39:34
- MySQL ALTER USER の使い方|パスワード変更・アカウントロック 2026-10-14 14:39:34
- MySQL ERROR 1129|ホスト遮断の原因・カウンタ・解除前の確認 2026-10-14 14:04:49
- MySQL ERROR 1820・1862|期限切れパスワードの安全な更新と確認 2026-10-14 14:04:49
- MySQL ERROR 1698|ソケット認証・OSユーザー・接続経路の確認 2026-10-14 14:04:49
- mysql_configが見つからない|mysqlclientの旧ビルドとpkg-configの確認 2026-10-14 13:36:32
- MySQLエラー一覧|番号・SQLSTATE別の原因と安全な確認手順 2026-10-14 13:36:32
- インストール直後にNetbeansが反応しない 2026-10-14 13:07:02
- NetBeans でよくあるエラー一覧と対処法 — JDK / Tomcat / PHP / メモリ不足 2026-10-14 13:07:02
- Apache NetBeans入門|起動JDK・プロジェクト作成・関連手順 2026-10-14 13:07:02
- 【Laravel】ページング(ページネーション)をする方法 2026-10-14 12:31:44