【Oracle】表領域の自動拡張(AUTOEXTEND)設定を確認・変更する方法完全ガイド

【Oracle】表領域の自動拡張設定を確認・変更する方法|AUTOEXTENDの使い方 Oracle

Oracleデータベースを運用していると、表領域(Tablespace)のディスク容量不足で突然エラーが発生することがあります。その対策として重要なのが AUTOEXTEND(自動拡張) の設定です。

AUTOEXTENDを有効にしておくと、データファイルが満杯になったとき自動的にサイズを拡張してくれるため、ORA-01653ORA-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 の違い
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 は本番環境では非推奨
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を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;
DATAFILE と TEMPFILE を間違えると ORA-02236 エラーになる
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;
AUTOEXTEND ON で MAXSIZE UNLIMITED を設定しているファイルが多いと、上記SQLの MAX_POTENTIAL_MB が非常に大きい値(数テラバイト)になります。ディスクの実容量と乖離していないか確認してください。

よくある質問(FAQ)

AUTOEXTEND設定はすべてのデータファイルに個別に設定する必要がありますか?
はい、AUTOEXTENDはデータファイル(またはテンポラリファイル)単位で設定します。表領域単位での一括設定はできないため、同じ表領域内のファイルが複数ある場合はそれぞれに対してALTER DATABASE DATAFILE文を実行してください。
既存のデータファイルのMAXSIZEだけを後から変更できますか?
できます。AUTOEXTENDの再設定はいつでも可能です。ALTER DATABASE DATAFILE … AUTOEXTEND ON NEXT 100M MAXSIZE 8G; のように再度実行することでNEXTとMAXSIZEの両方を変更できます。
DBA_DATA_FILESでINCREMENT_BYが0なのにAUTOEXTENSIBLEがYESになっています。なぜですか?
AUTOEXTEND ONで設定したにもかかわらずNEXTを省略した場合、NEXT値がデフォルトの最小ブロック(1ブロック=8KB)になり、INCREMENT_BYが1(1×8KB=8KB)という非常に小さい値になることがあります。NEXTを明示的に指定して再設定することを推奨します。
AUTOEXTEND ONにすると既存データに影響しますか?
既存データには影響しません。AUTOEXTEND ONは「容量が足りなくなったときに自動でサイズを拡張する」という動作設定であり、即座にファイルサイズが変わるわけではありません。現在の使用中データはそのまま維持されます。
表領域のAUTOEXTEND設定をSYSTEM/SYSAUXにも適用すべきですか?
本番環境では SYSTEM/SYSAUX 表領域にもAUTOEXTEND ONを設定しておくことを推奨します。これらが満杯になるとOracleが起動できなくなる深刻な問題に発展します。ただしMAXSIZEは必ず明示的に設定し、無制限拡張にはしないでください。

関連記事

まとめ

  • AUTOEXTENDの設定確認は DBA_DATA_FILESAUTOEXTENSIBLEMAXBYTESINCREMENT_BY 列で行う
  • 既存ファイルへの設定変更は ALTER DATABASE DATAFILE ... AUTOEXTEND ON NEXT XXM MAXSIZE XXG
  • TEMP表領域は必ず TEMPFILE を使う(DATAFILEではない)
  • 本番環境では MAXSIZE UNLIMITED を避け、必ず上限を設定する
  • NEXTサイズは最低50M〜100Mの大きめ設定でパフォーマンス低下を防ぐ
  • 空き容量は DBA_FREE_SPACEで定期監視 し、80%超えでアラートを設定する