【Oracle】データファイルを追加する方法完全解説|AUTOEXTEND・容量確認・既存ファイル変更まで

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;