1.

Oracle データファイル(datafile)の役割・構成・作成・追加・拡張方法まとめ

編集
この記事の要点
  • データファイル (datafile) は Oracle が表領域 (tablespace) の実体としてディスク上に持つファイル。表・索引・LOB 等の実データを格納
  • 構成: ヘッダー / ビットマップ / データブロック (デフォルト 8KB)
  • 確認: SELECT * FROM DBA_DATA_FILES; / V$DATAFILE
  • 追加: ALTER TABLESPACE users ADD DATAFILE '/u01/users02.dbf' SIZE 100M;
  • 自動拡張: AUTOEXTEND ON NEXT 10M MAXSIZE 4G でデータ増加に追従

データファイルとは

Oracle Database におけるデータファイル (Datafile) は、表領域 (Tablespace) の実体としてオペレーティングシステムに作成される物理ファイルです。テーブル・インデックス・LOB データ・ロールバックセグメントなど、すべての永続データはデータファイルに保存されます。

論理構造との対応

論理単位物理単位説明
データベース複数の表領域1 つの Oracle インスタンスが管理する全データ
表領域 (Tablespace)1〜N 個のデータファイル論理的な格納領域の単位
セグメント (テーブル/索引)1〜N 個のエクステントオブジェクト単位の領域
エクステント連続したデータブロック群領域割り当ての単位
データブロックOS ブロック × NI/O の最小単位(既定 8KB)

標準的な構成のデータファイル

表領域役割典型的ファイル名
SYSTEMデータ辞書、PL/SQL ソースsystem01.dbf
SYSAUXAWR、サポートツールデータsysaux01.dbf
UNDOTBS1UNDO 情報(トランザクション巻き戻し)undotbs01.dbf
TEMPソート / GROUP BY などの一時データtemp01.dbf
USERSユーザーオブジェクトusers01.dbf

データファイルの確認

-- 全データファイル
SELECT file_name, tablespace_name,
       bytes/1024/1024 AS size_mb,
       autoextensible, maxbytes/1024/1024 AS max_mb
  FROM dba_data_files
ORDER BY tablespace_name;

-- 一時データファイル(TEMP 表領域)
SELECT * FROM dba_temp_files;

-- V$ ビュー: ファイル ID / ステータス
SELECT file#, name, status, bytes/1024/1024 AS size_mb
  FROM v$datafile;

データファイルの追加

-- USERS 表領域にデータファイルを追加
ALTER TABLESPACE users
  ADD DATAFILE '/u01/app/oracle/oradata/ORCL/users02.dbf'
  SIZE 100M
  AUTOEXTEND ON NEXT 10M MAXSIZE 4G;

サイズ拡張・縮小

-- 手動でサイズ変更
ALTER DATABASE DATAFILE '/u01/.../users01.dbf' RESIZE 500M;

-- 自動拡張の ON/OFF
ALTER DATABASE DATAFILE '/u01/.../users01.dbf' AUTOEXTEND ON NEXT 50M MAXSIZE 8G;
ALTER DATABASE DATAFILE '/u01/.../users01.dbf' AUTOEXTEND OFF;

-- データファイル単位のオフライン化(バックアップ等で使用)
ALTER DATABASE DATAFILE '/u01/.../users01.dbf' OFFLINE;
ALTER DATABASE DATAFILE '/u01/.../users01.dbf' ONLINE;

使用率の確認

SELECT df.tablespace_name,
       df.file_name,
       df.bytes / 1024 / 1024                       AS allocated_mb,
       (df.bytes - NVL(fs.free_bytes, 0)) / 1024 / 1024 AS used_mb,
       ROUND((df.bytes - NVL(fs.free_bytes, 0)) / df.bytes * 100, 1) AS used_pct
  FROM dba_data_files df
  LEFT JOIN (
        SELECT file_id, SUM(bytes) AS free_bytes
          FROM dba_free_space
         GROUP BY file_id
       ) fs
    ON df.file_id = fs.file_id
ORDER BY used_pct DESC;

運用上の注意

  • パス変更: データファイルを別ディスクに移動する場合は ALTER DATABASE MOVE DATAFILE を使用(12c 以降は無停止可能)
  • 削除: 通常は表領域ごと削除 (DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES)。データファイル単独削除は限定的条件下のみ
  • サイズ計画: AUTOEXTEND を ON にしつつも MAXSIZE で上限を設定し、ディスクフルを防ぐ
  • I/O 分散: 高負荷システムでは別ディスク / ASM ディスクグループに分割配置
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. データファイル
  2. 制御ファイル
  3. REDOログファイル (物理構造 Oracle)

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