犬ターネット

Oracle DBサーバのディスク容量が0%になっていたので対応した

2026-10-06 oracle linux server

ステージング環境の Oracle DBサーバの応答が全部エラーになっていて確認してみたらディスク容量が 0% になっていた。まずい。

dnf clean all を実行してDNFパッケージキャッシュを削除し、少しでも空き容量を確保しようとしたけれど、以下のように lockファイルすら作れないために失敗。いよいよまずい。

dnf clean all

[Errno 28] デバイスに空き領域がありません: '/var/lib/dnf/rpmdb_lock.pid' 

しかし、こここういうときこそ、あ、あ、あああ焦らずに作業、、、

まず、でかいファイルで削除できそうなのを探すため、以下コマンドを実行し、ルート配下の 100MB以上 のファイルを一覧表示してみる。

find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null

-rw-r--r--. 1 root root 2.2G  4月  1  2022 /root/work/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
-rw-r--r--. 1 root root 111M 12月 18  2024 /var/lib/rpm/Packages
... (略) ...

2.2Gのファイルがある!oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm は Oracleインストール時に使った rpm ファイルで不要なので速攻削除。

2Gの空きが出来たところで再度 dnf clean all を実行して無事に成功。DBの応答も復活した。まずは一安心、、、


原因は Oracle を何も考えずにディフォルト設定のまま使っていて、不要なログとかが溜まっていたため。また同じことが起こるとダルいから対策を考える。

まず、/opt/oracle/diag/ 配下にある7日以上前のトレースファイルやログを削除。これらのファイルは削除してもデータベースの動作には影響しない。

# 7日以上前の .trc / .trm ファイルを削除
find /opt/oracle/diag/ -type f \( -name "*.trc" -o -name "*.trm" \) -mtime +7 -exec rm -f {} \;

Oracle側の設定も変更し、自動生成されるトレースログやアラートログの保持期限を短くする。

# oracle ユーザーに切替
su - oracle

# ADRCI ツール起動
adrci

# ホームを設定
adrci> set base /opt/oracle
adrci> show homes
ADR Homes:
diag/rdbms/xe/XE
diag/clients/user_oracle/host_61728193_110
diag/tnslsnr/localhost/listener 

# 各ホームごとに保持期間を変更
# LONGP_POLICY : 30日 (720時間) 
# SHORTP_POLICY : 7日 (168時間) 
adrci> set homepath diag/rdbms/xe/XE
adrci> set control (LONGP_POLICY = 720)
adrci> set control (SHORTP_POLICY = 168)
adrci> set homepath diag/tnslsnr/localhost/listener
adrci> set control (LONGP_POLICY = 720)
adrci> set control (SHORTP_POLICY = 168)

# 終了
adrci> quit

crontab にもトレースログおよび監査ログの定期削除処理を追加する。以下の内容で削除スクリプトを作成し、実行権限を付与。

mkdir -p /root/work/sh/
vim /root/work/sh/clean-oracle-logs.sh
#!/bin/sh

# 7日以上前の Oracle トレース・メトリックファイルを削除
find /opt/oracle/diag/ -type f \( -name "*.trc" -o -name "*.trm" \) -mtime +7 -exec rm -f {} \;

# 30日以上前の監査ログを削除。これも削除してもデータベースの動作には影響なし。
find /opt/oracle/admin/*/adump/ -type f -name "*.aud" -mtime +30 -exec rm -f {} \;
chmod +x /root/work/sh/clean-oracle-logs.sh

最後に crontab に登録して毎日朝5時に実行させる。

crontab -e

0 5 * * * /root/work/sh/clean-oracle-logs.sh > /dev/null 2>&1

これで大丈夫だろう。

ステージング環境だったからよかったものの、本番環境だったら謝罪&始末書&下手したら賠償ものだった、、、怖ッ


こういう内容って今はAIが全部教えてくれるし、日記に書くまでもないんだけど、アウトプットすることで手順の再確認ができて記憶に定着するし、また同じようなことが起こったときに(そういや日記に書いてたっけ)と思い出すことができる。そしてそれは自分で理解しながら作業した内容でエビデンスがあるから安心できる。

最近読んだ 「AIでコード生成は加速、でも人間の確認が追いつかない問題。t-wadaが示す「レビュー解体」という答え」 という記事中でも以下のようなことが述べられている。

AIに実装を任せ、テストや仕組みの確認を一部担ってもらうことはできます。しかし、そのコードが何を意味し、システム全体にどう作用するのかという「人間の理解」だけは、どこまで技術が進化しようとも委託することは不可能なのです。

「AIが言ってるから」はただの思考停止。いままでのインターネットと同じで、疑い、考え、確認し、理解していかないと、AI時代もサバイブできないよね~


 

2026-10-02 ≫
最近読んでいる/読んだ本