Oracleエラー対応(ORA-01653):ORA-01653 発生時の対処方法について

現役DBAが解説-Oracleエラー対応

ORA-01653エラーが発生する場合、何が原因で、どう対処したらよいのでしょうか?
本記事では、ORA-01653発生時の対処方法を紹介します。

1.エラーメッセージ

ORA-01653: 表string.stringを拡張できません(string分、表領域string)
ORA-01653: unable to increase tablespace [tablespace_name] by [storage_allocated]
[storage_units] during insert or update on table [schema_name].[table_name]

2.事象

INSERTやUPDATEを実行した際、表セグメントの拡張が必要になることがあります。
その際に表領域の空きが足りないとORA-01653が発生します。

*このエラーが出ても、表領域に十分な空きがあるように見える場合があります。
そのような場合は、ユニフォームサイズについて再検討してみてください。
本記事でご紹介する表領域の補充でもエラーの解消はできますが、遊んでいる表領域が大きくなってしまう可能性があります。

3.対処方法

表領域を補充することで、エラーになった更新処理を再実行できます。
補充方法には3つあります。
運用設計時に方式を考慮できていない場合には、データベースサーバの利用用途や既存の運用に適した対処を検討します。

①既存のデータファイルの自動拡張を有効化する

データファイルの自動拡張設定を有効にすることで、表領域の空き領域が少なくなると自動的にデータファイルを拡張することができます。
自動拡張のON/OFFだけで設定はできますが、増分サイズ(1回あたりにどのくらい拡張するか)の適正値を設定する必要があります。
バッチ処理がメインの場合には、増分サイズが小さいと指定した増分サイズずつ拡張されるため、一度に大量にデータ投入されると複数回の自動拡張処理が必要となり、バッチ処理のオーバーヘッドとなってしまうことが考えられます。
一方でオンライン処理がメインの場合には、増分サイズが大きいと1回の拡張処理時間が長くなってしまいます。

上記を考慮しながら想定した増分サイズで運用し、経過観察しながら適正化していくのがおすすめです。
また、オンライン処理とバッチ処理が入り混じる混合ワークロードの環境への自動拡張の導入は慎重に検討しましょう。
自動拡張により運用対応を軽減することができますが、表領域に格納されるデータ量に応じて拡張されるため、一般的なデータベース運用項目である表領域使用率については監視の指標として利用できなくなります。
そのため、代わりにデータファイル格納領域のストレージ使用率の監視が必要になります。

<自動拡張を有効化するコマンド>

ALTER DATABASE DATAFILE '<対象のデータファイル>' AUTOEXTEND ON;

例:ALTER DATABASE DATAFILE '/oradata/datafile1.dbf' AUTOEXTEND ON;

②既存のデータファイルをリサイズする

2つ目は手動で既存のデータファイルを大きくリサイズする方法です。
日頃の運用で表領域の使用率を監視し、閾値超過の発報を受けたら速やかに拡張作業を行うことで、エラーが発生する前に対処することができます。
指定したサイズに拡張できるため、管理しやすいのが特長です。
注意点としては1つの表領域に複数のデータファイルを指定することができるため、特定のデータファイルだけ大きくしてしまうと負荷が偏ってしまいます。
同じ表領域内の全てのデータファイルが同じ大きさになるようにリサイズしましょう。

<既存のデータファイルをリサイズするコマンド>

ALTER DATABASE DATAFILE '<対象のデータファイル>' RESIZE <リサイズ後の大きさ>;

例:ALTER DATABASE DATAFILE '/oradata/datafile1.dbf' RESIZE 10G;

③データファイルを追加する

3つ目は手動でのデータファイル追加です。
こちらも先ほどのデータファイルをリサイズする場合と同様に、同じ表領域内の全てのデータファイルが同じ大きさになるようにサイズ指定して追加しましょう。

<データファイルを追加するコマンド>

ALTER TABLESPACE <表領域名> ADD DATAFILE ‘<追加するデータファイル>’ SIZE <追加するデーファイルの大きさ>;

例:ALTER TABLESPACE USERS ADD DATAFILE ‘/oradata/datafile2.dbf’ SIZE 5G;

4.最後に

ORA-01653 が発生した場合は、データベースサーバの運用に合った表領域の補充を行いましょう。
また、エラーによる業務への影響を防ぐためにも、自動拡張機能の導入に加え、運用する中でデータベースの稼働状況を分析して表領域使用率の傾向を予測し、事前に手動拡張を検討しておきましょう。