Oracleデータベースを運用していると、表領域(Tablespace)のディスク容量不足で突然エラーが発生することがあります。その対策として重要なのが AUTOEXTEND(自動拡張) の設定です。
AUTOEXTENDを有効にしておくと、データファイルが満杯になったとき自動的にサイズを拡張してくれるため、ORA-01653 や ORA-01654 などの容量不足エラーを防ぐことができます。
- DBA_DATA_FILES で現在のAUTOEXTEND設定を確認する方法
- ALTER DATABASE DATAFILE で設定をON/OFFに変更する方法
- 新規表領域作成時のAUTOEXTEND指定方法
- TEMP表領域(TEMPFILE)での注意点
- NEXT/MAXSIZEの推奨設定値と運用指針
AUTOEXTENDの設定を確認するSQL
DBA_DATA_FILESビューで確認する
まず現在の設定を確認します。DBA_DATA_FILES ビューの AUTOEXTENSIBLE 列で自動拡張が有効かどうかを確認できます。
-- 全表領域のデータファイルとAUTOEXTEND設定を確認
SELECT
TABLESPACE_NAME,
FILE_NAME,
BYTES / 1024 / 1024 AS SIZE_MB,
MAXBYTES / 1024 / 1024 AS MAXSIZE_MB,
INCREMENT_BY * 8192 / 1024 / 1024 AS NEXT_MB,
AUTOEXTENSIBLE
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME, FILE_NAME;
主な列の意味は以下の通りです。
| 列名 | 説明 |
|---|---|
| AUTOEXTENSIBLE | YES=自動拡張有効、NO=無効 |
| SIZE_MB | 現在のデータファイルサイズ(MB) |
| MAXSIZE_MB | 最大拡張サイズ(MB)。0=UNLIMITEDの場合は無制限 |
| NEXT_MB | 1回あたりの拡張量(MB)。INCREMENT_BY×ブロックサイズで算出 |
特定の表領域だけを絞り込む
-- USERS表領域のデータファイルを確認
SELECT
FILE_NAME,
BYTES / 1024 / 1024 AS SIZE_MB,
MAXBYTES / 1024 / 1024 AS MAXSIZE_MB,
AUTOEXTENSIBLE
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = 'USERS';
USER_DATA_FILESで自分のスキーマのみ確認する
DBA権限がない場合は USER_DATA_FILES ビューを使います。ただし、このビューには自分のデフォルト表領域に属するデータファイルのみが表示されます。
-- DBA権限不要(自スキーマの情報のみ)
SELECT
FILE_NAME,
BYTES / 1024 / 1024 AS SIZE_MB,
AUTOEXTENSIBLE
FROM USER_DATA_FILES;
DBA_DATA_FILES はデータディクショナリ(静的)で確認でき、自動拡張設定を含む詳細情報が得られます。V$DATAFILE は動的パフォーマンスビューで、ファイルのステータスやI/O統計に特化しており、AUTOEXTENSIBLEの確認にはDBA_DATA_FILESが適しています。
AUTOEXTENDを有効にする方法(ALTER DATABASE DATAFILE)
基本構文
既存のデータファイルに対して自動拡張を有効にするには ALTER DATABASE DATAFILE コマンドを使います。
-- 基本構文 ALTER DATABASE DATAFILE 'ファイルパス' AUTOEXTEND ON NEXT 拡張サイズ MAXSIZE 最大サイズ; -- 実例: /u01/app/oracle/oradata/ORCL/users01.dbf を -- 1回につき50MBずつ、最大2GBまで自動拡張する ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf' AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
パラメータの意味は以下の通りです。
| パラメータ | 説明 | 例 |
|---|---|---|
| NEXT | 1回の拡張量 | 50M、100M、256M など |
| MAXSIZE | 拡張の上限サイズ | 2G、4G、UNLIMITED など |
ファイル番号(FILE#)を使う方法
ファイルパスが長い場合はファイル番号で指定することもできます。
-- まずファイル番号を確認 SELECT FILE#, NAME FROM V$DATAFILE; -- ファイル番号で指定 ALTER DATABASE DATAFILE 4 AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
MAXSIZE UNLIMITEDの注意点
MAXSIZE UNLIMITEDを設定すると、ファイルシステムの空きがある限り無制限に拡張します。予期しないデータ増加でディスクが枯渇し、OSやOracle自体が停止するリスクがあります。本番環境では必ず適切なMAXSIZEを設定してください。
-- 上限なしで拡張(本番環境では要注意) ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
AUTOEXTENDを無効にする方法
自動拡張を無効にしてディスク使用量を厳密に管理したい場合は AUTOEXTEND OFF を指定します。
-- パスで指定して無効化 ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf' AUTOEXTEND OFF; -- ファイル番号で指定して無効化 ALTER DATABASE DATAFILE 4 AUTOEXTEND OFF;
新規表領域作成時のAUTOEXTEND設定
CREATE TABLESPACE 時にAUTOEXTENDを指定することで、作成直後から自動拡張が有効になります。既存表領域の詳細については 【Oracle】表領域の作成・削除・変更・確認方法 も参照してください。
-- AUTOEXTEND付きで新規表領域を作成 CREATE TABLESPACE my_ts DATAFILE '/u01/app/oracle/oradata/ORCL/my_ts01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 4G;
データファイルを複数持つ表領域を作成する場合も、各ファイルにAUTOEXTENDを指定できます。
-- データファイル2本構成で作成
CREATE TABLESPACE sales_ts
DATAFILE '/u01/oradata/sales01.dbf' SIZE 1G AUTOEXTEND ON NEXT 200M MAXSIZE 4G,
'/u01/oradata/sales02.dbf' SIZE 1G AUTOEXTEND ON NEXT 200M MAXSIZE 4G;
TEMP表領域のAUTOEXTEND設定
DATAFILEではなくTEMPFILEを使う
TEMP表領域の一時ファイルを変更する場合は ALTER DATABASE DATAFILE ではなく ALTER DATABASE TEMPFILE を使います。この違いを間違えるとエラーになるため注意してください。
-- TEMP表領域の一時ファイルを確認
SELECT
TABLESPACE_NAME,
FILE_NAME,
BYTES / 1024 / 1024 AS SIZE_MB,
MAXBYTES / 1024 / 1024 AS MAXSIZE_MB,
AUTOEXTENSIBLE
FROM DBA_TEMP_FILES;
-- TEMP表領域のAUTOEXTENDを有効化(TEMPFILEを使う) ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/ORCL/temp01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 4G; -- TEMP表領域のAUTOEXTENDを無効化 ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/ORCL/temp01.dbf' AUTOEXTEND OFF;
TEMP表領域に対して ALTER DATABASE DATAFILE を実行すると「ORA-02236: ファイル名が無効です」が発生します。TEMP表領域には必ず TEMPFILE を指定してください。また、TEMP表領域の肥大化問題については 【Oracle】TEMP表領域の肥大化原因とクリーンアップ方法 を参照してください。
TEMP表領域の作成時にAUTOEXTENDを設定する
-- AUTOEXTEND付きでTEMP表領域を作成 CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/app/oracle/oradata/ORCL/temp02.dbf' SIZE 1G AUTOEXTEND ON NEXT 256M MAXSIZE 8G;
設定値の目安と運用指針
環境や用途によって適切なNEXTおよびMAXSIZEの値は異なります。以下の表を参考に設定してください。
| 環境/用途 | 初期SIZE | NEXT(拡張量) | MAXSIZE(上限) | 備考 |
|---|---|---|---|---|
| 開発環境 一般 | 200M | 50M | 2G | ディスク節約優先 |
| 開発環境 TEMP | 500M | 100M | 4G | 大規模ソートを考慮 |
| 本番環境 一般 | 1G〜2G | 200M〜500M | 8G〜16G | MAXSIZE必須・監視必須 |
| 本番環境 TEMP | 2G | 256M〜512M | 8G〜16G | バッチ処理量に応じて調整 |
| 本番環境 UNDO | 2G | 200M | 8G | 長時間トランザクションを考慮 |
| DWH/分析用 | 4G〜10G | 1G | 50G〜100G | データ量の見積もりに応じて設定 |
- NEXTサイズは大きめに設定する: 頻繁な小刻み拡張はパフォーマンスに影響します。1回あたり最低50M〜100Mを推奨。
- MAXSIZEは必ず設定する: UNLIMITED設定はディスク全体を圧迫するリスクがあります。
- ディスク空き容量の80%を超えないよう監視: 表領域使用率が80%に達したらアラートを設定してください。
- 容量確認は定期的に実施: 表領域の空き容量確認SQLで定期チェックを自動化することを推奨します。
よくあるトラブルと対処
ORA-01653: TEMP表領域不足
ORA-01653 はデータ表領域、ORA-01652 はTEMP表領域の不足で発生します。詳細な対処法は 【Oracle】ORA-01653の解決方法 を参照してください。
緊急の場合、まず空き容量を確認します。
-- TEMP表領域の使用状況を確認
SELECT
TABLESPACE_NAME,
TOTAL_BLOCKS * 8192 / 1024 / 1024 AS TOTAL_MB,
USED_BLOCKS * 8192 / 1024 / 1024 AS USED_MB,
FREE_BLOCKS * 8192 / 1024 / 1024 AS FREE_MB
FROM V$TEMP_SPACE_HEADER;
空きが少ない場合、TEMPFILEのAUTOEXTENDを有効化するか、一時ファイルを追加します。
-- 一時ファイルを追加してTEMP表領域を拡張 ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORCL/temp02.dbf' SIZE 2G AUTOEXTEND ON NEXT 256M MAXSIZE 8G;
ファイルシステム圧迫による自動拡張の停止
AUTOEXTENDが有効でもファイルシステムの空き容量がなければ拡張できません。以下のSQLでデータファイルの現在サイズと最大サイズを確認し、実際のディスク残量と照らし合わせてください。
-- ファイルシステムへの影響を事前に見積もる
SELECT
TABLESPACE_NAME,
SUM(BYTES) / 1024 / 1024 AS CURRENT_MB,
SUM(MAXBYTES) / 1024 / 1024 AS MAX_POTENTIAL_MB
FROM DBA_DATA_FILES
WHERE AUTOEXTENSIBLE = 'YES'
GROUP BY TABLESPACE_NAME
ORDER BY MAX_POTENTIAL_MB DESC;
よくある質問(FAQ)
関連記事
- 【Oracle】表領域の作成・削除・変更・確認方法
- 【Oracle】表領域の空き容量を調べる方法
- 【Oracle】TEMP表領域の肥大化原因とクリーンアップ方法
- 【Oracle】ORA-01653: セグメントを拡張できません(表領域不足)の解決方法
- AUTOEXTENDの設定確認は
DBA_DATA_FILESのAUTOEXTENSIBLE・MAXBYTES・INCREMENT_BY列で行う - 既存ファイルへの設定変更は
ALTER DATABASE DATAFILE ... AUTOEXTEND ON NEXT XXM MAXSIZE XXG - TEMP表領域は必ず
TEMPFILEを使う(DATAFILEではない) - 本番環境では
MAXSIZE UNLIMITEDを避け、必ず上限を設定する - NEXTサイズは最低50M〜100Mの大きめ設定でパフォーマンス低下を防ぐ
- 空き容量は DBA_FREE_SPACEで定期監視 し、80%超えでアラートを設定する

