Oracleの表領域(Tablespace)は1つ以上のデータファイル(Datafile)で構成されています。表領域の容量が不足した際や、新規表領域を構築する際には、データファイルの追加・自動拡張設定が必要です。
本記事では、データファイル追加の基本構文から、AUTOEXTEND設定・既存ファイルの変更・容量確認クエリ・TEMPファイルの扱いまでを実務レベルで解説します。
データファイルと表領域の関係
| 用語 |
説明 |
| 表領域(Tablespace) |
テーブル・インデックス等を格納する論理的な領域。1つ以上のデータファイルで構成される |
| データファイル(Datafile) |
表領域の実体となるOS上の物理ファイル(.dbf) |
| 一時ファイル(Tempfile) |
一時表領域(TEMPORARY TABLESPACE)の実体ファイル |
| AUTOEXTEND |
データファイルが満杯になったとき自動拡張する機能 |
データファイルを追加する(基本構文)
SQL — ALTER TABLESPACE ADD DATAFILE の基本構文
ALTER TABLESPACE 表領域名
ADD DATAFILE 'ファイルパス'
SIZE サイズ
[AUTOEXTEND {ON [NEXT 拡張サイズ [MAXSIZE 上限サイズ | UNLIMITED]] | OFF}];
シンプルな追加(自動拡張なし)
SQL — 固定サイズのデータファイルを追加
-- Linuxのパス例
ALTER TABLESPACE ts_sales
ADD DATAFILE '/oradata/orcl/ts_sales02.dbf'
SIZE 1G;
-- Windowsのパス例
ALTER TABLESPACE ts_sales
ADD DATAFILE 'C:\oradata\orcl\ts_sales02.dbf'
SIZE 500M;
自動拡張(AUTOEXTEND ON)を設定して追加
SQL — AUTOEXTEND ON で自動拡張を有効にして追加
ALTER TABLESPACE ts_sales
ADD DATAFILE '/oradata/orcl/ts_sales03.dbf'
SIZE 500M
AUTOEXTEND ON
NEXT 100M -- 拡張の刻み幅
MAXSIZE 4G; -- 最大サイズ(UNLIMITED も指定可)
| 句 |
意味 |
省略時の動作 |
| SIZE |
ファイルの初期サイズ(M=MB, G=GB) |
省略不可 |
| AUTOEXTEND ON |
容量不足時に自動拡張を有効化 |
OFFがデフォルト |
| NEXT |
1回の拡張サイズ |
デフォルトは1ブロック(通常は小さすぎるため明示推奨) |
| MAXSIZE |
拡張の上限サイズ(UNLIMITEDで無制限) |
UNLIMITED |
既存データファイルのAUTOEXTEND設定を変更する
既に存在するデータファイルの自動拡張設定は ALTER DATABASE DATAFILE で変更します。
SQL — 既存データファイルのAUTOEXTENDを有効化・変更・無効化
-- AUTOEXTENDを有効化して上限・拡張幅を設定
ALTER DATABASE DATAFILE '/oradata/orcl/ts_sales01.dbf'
AUTOEXTEND ON
NEXT 200M
MAXSIZE 10G;
-- AUTOEXTENDを無効化(固定サイズに戻す)
ALTER DATABASE DATAFILE '/oradata/orcl/ts_sales01.dbf'
AUTOEXTEND OFF;
-- ファイルサイズ自体を変更(縮小は使用済み領域以下には不可)
ALTER DATABASE DATAFILE '/oradata/orcl/ts_sales01.dbf'
RESIZE 2G;
データファイルの状態を確認するクエリ
DBA_DATA_FILES で全データファイルを確認
SQL — DBA_DATA_FILES でファイル一覧と自動拡張設定を確認
SELECT
tablespace_name,
file_name,
ROUND(bytes / 1024 / 1024 / 1024, 2) AS size_gb,
autoextensible,
ROUND(increment_by * 8192 / 1024 / 1024, 0) AS next_mb,
CASE maxbytes WHEN 0 THEN 'UNLIMITED'
ELSE TO_CHAR(ROUND(maxbytes / 1024 / 1024 / 1024, 2)) || 'GB'
END AS max_size,
status
FROM dba_data_files
ORDER BY tablespace_name, file_name;
表領域の空き容量を確認
SQL — 表領域ごとの使用量・空き容量を確認
SELECT
df.tablespace_name,
ROUND(df.total_gb, 2) AS total_gb,
ROUND(fs.free_gb, 2) AS free_gb,
ROUND(df.total_gb - fs.free_gb, 2) AS used_gb,
ROUND((df.total_gb - fs.free_gb) * 100 / df.total_gb, 1) AS used_pct
FROM (
SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 / 1024 AS total_gb
FROM dba_data_files
GROUP BY tablespace_name
) df
JOIN (
SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 / 1024 AS free_gb
FROM dba_free_space
GROUP BY tablespace_name
) fs ON df.tablespace_name = fs.tablespace_name
ORDER BY used_pct DESC;
一時ファイル(TEMPファイル)の追加
一時表領域(TEMPORARY TABLESPACE)のファイルは ADD TEMPFILE で追加します(ADD DATAFILE ではありません)。
SQL — 一時ファイルの追加と確認
-- 一時ファイルの追加
ALTER TABLESPACE temp
ADD TEMPFILE '/oradata/orcl/temp02.dbf'
SIZE 2G
AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED;
-- 一時ファイルの確認(DBA_TEMP_FILES を使用)
SELECT tablespace_name, file_name,
ROUND(bytes / 1024 / 1024 / 1024, 2) AS size_gb,
autoextensible
FROM dba_temp_files
ORDER BY tablespace_name, file_name;
注意: 一時ファイルの情報は DBA_DATA_FILES ではなく DBA_TEMP_FILES に格納されます。誤って ADD DATAFILE で一時表領域に追加しようとすると ORA-30044 エラーが発生します。
よくあるエラーと対処法
| エラー |
原因 |
対処法 |
| ORA-01119 |
指定パスが存在しない、またはOracleが書き込み権限を持っていない |
ディレクトリを作成し、oracle ユーザーに書き込み権限を付与する |
| ORA-01144 |
ファイルサイズが最大ブロック数を超えている(smallfile表領域) |
ファイルサイズを小さくするか、bigfile表領域を使用する |
| ORA-01537 |
同名ファイルが既に存在する |
別のファイル名を指定する |
| ORA-30044 |
一時表領域に ADD DATAFILE を使用した |
ADD TEMPFILE に変更する |
まとめ
| 操作 |
コマンド |
| 通常表領域にデータファイル追加 |
ALTER TABLESPACE ts ADD DATAFILE … |
| 一時表領域にファイル追加 |
ALTER TABLESPACE temp ADD TEMPFILE … |
| 既存ファイルのAUTOEXTEND変更 |
ALTER DATABASE DATAFILE ‘path’ AUTOEXTEND ON … |
| 既存ファイルのサイズ変更 |
ALTER DATABASE DATAFILE ‘path’ RESIZE nG |
| データファイル一覧確認 |
SELECT * FROM dba_data_files |
| 表領域の空き容量確認 |
dba_data_files + dba_free_space を結合 |
❓ よくある質問(FAQ) ▲ クリックで開閉
Q. AUTOEXTEND ON MAXSIZE UNLIMITED にするとディスクを使い果たす危険はないか?
A. あります。MAXSIZE UNLIMITED はOSのファイルシステムの上限まで拡張するため、ディスクフルのリスクがあります。本番環境では必ず現実的な上限(例: MAXSIZE 10G)を設定するか、定期的なディスク使用量監視を組み合わせることを推奨します。
Q. データファイルを削除(縮小)することはできるか?
A. 縮小は ALTER DATABASE DATAFILE 'path' RESIZE nG で可能ですが、実際に使用されている領域以下には縮小できません。削除(DROP)は通常表領域の場合、表領域ごと DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES で行います。個別のデータファイルのDROPは原則できません(Oracle 12c以降のプラガブルDBを除く)。
Q. OMF(Oracle Managed Files)環境ではファイルパスを指定しなくていいか?
A. はい。OMFが有効な場合(DB_CREATE_FILE_DEST が設定されている場合)、ファイルパスを省略してOracleに自動決定させることができます。例: ALTER TABLESPACE ts_sales ADD DATAFILE SIZE 1G AUTOEXTEND ON;