Oracle テーブルスペース容量不足対応方針

この記事を書いたチーム:frontier

 

はじめに

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

OracleDBを使用しているシステムで、テーブルスペースの容量が不足したため、DBにデータを書き込めず、エラーが発生していました。

今回はエラーの確認方法と対応方針について、解説していきます。
※今回対応したDBのバージョンは、Oracle 12cとなります。

 

エラーの確認方法

アラートログ(DBの動作状況やエラー情報を記録しているログ)を確認することで、エラー状況を確認できます。
ログ格納場所:$ORACLE_BASE/diag/rdbms/<db_name>/<sid>/trace/alert_<sid>.log
過去ログ格納場所:$ORACLE_BASE/diag/rdbms/<db_name>/<sid>/alert/

今回は以下のエラーがログに出力されており、テーブルスペースの容量不足が発覚しました。
ORA-01653: unable to extend table <schema>.<table_name> by <n> in tablespace <tablespace_name>

 

対応方針

以下の3つの対応方法を検討しました。
 ①テーブルスペースの容量拡張
 ②不要な過去データの削除(+定期的な自動削除)
 ③テーブルスペースの最適化 

今回は、稼働中のシステムの為、影響を最小限に抑えられる②③を採用することにしました。 

  • ①を採用しなかった理由
     対象テーブルスペースはすでに最大容量の32GB(※ブロックサイズによって上限は異なります)に達していました。
     この状態からさらに容量を拡張するには、新たなデータファイルを追加する必要があり、システム構成の変更を伴うため今回は見送りました。
     補足:データファイルとは、テーブルスペースのデータが実際に格納されている物理ファイルのことです。

  • ②③を採用した理由
     ②不要な過去データの削除(+定期的な自動削除)
     蓄積された不要な過去データを削除することで、テーブルスペースの空き容量を確保しました。
     また、今回のシステムには過去データを定期的に自動削除するバッチ機能がすでに組み込まれていたため、そちらを活用することで恒久的な対策としました。 

  • ③テーブルスペースの最適化
     データの削除を繰り返すと、断片化によって空き領域が断続的に散らばった状態になります。
     その為、②の対応後、この断片化を解消しテーブルスペースを最適化することで、空き容量をより効率的に確保しました。

 

おわりに

具体的な対応では、テーブルスペースの容量確認や最適化など、各種SQLを実行しながら作業を進めました。

SQLの知識が必要になる場面も多いですが、昨今はAIに聞けば必要なSQLを生成してもらえるので、ぜひ活用してみてください。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス