Oracle のデータベースサーバーで「-bash: cannot create temp file for here-document: No space left on device」のエラーが表示された

ショコラ
ショコラ

Oracle のデータベースサーバーで「-bash: cannot create temp file for here-document: No space left on device」のエラーが表示された

オラクルのマシンでHDD の空き容量があるのに、このエラーがでるパターンは「i-node の残りが無くなった」可能性が大です。

もっさん先輩
もっさん先輩

まずは、以下のコマンドで i-node の残りがあるか調べてみましょう。

df -i

現在、↓こんな状態でした。

# df -i
Filesystem      Inodes   IUsed   IFree IUse% Mounted on
devtmpfs        998439     378  998061    1% /dev
tmpfs          1001041       1 1001040    1% /dev/shm
tmpfs          1001041    1276  999765    1% /run
tmpfs          1001041      16 1001025    1% /sys/fs/cgroup
/dev/vda2      6553600 6553600       0  100% /
tmpfs          1001041      13 1001028    1% /run/user/0

ルート(/) の IFree が 0 なので i-node の残りが無くなったことが分かります。

Oracle の場合、i-node を使い果たすのは adump(監査ログ) の可能性が高いです。

adump を調べてみます。

cd $ORACLE_BASE/admin/ORC1/adump

ファイル数を確認します。

ls -U|wc -l
$ ls -U|wc -l
5485678

大量のファイルがあると、ls のソートに時間がかかるので、-Uオプション を付けて ls でソートを行わないようにします。

ls -U | head -n 10

↓こんな感じの audファイル があります。

$ ls -U | head -n 10
orc1_ora_6998_1.aud
orc1_ora_23830_c5.aud
orc1_ora_30383_12.aud
orc1_ora_2931_b3.aud
orc1_ora_2909_7.aud
orc1_ora_4949_84.aud
orc1_ora_29897_53.aud
orc1_ora_30293_8b.aud
orc1_ora_31876_6c.aud
orc1_ora_5034_b1.aud

audファイル を削除します。

rm -f orc1_ora_100*.aud

少し ルート が空きました。

# df -i
Filesystem      Inodes   IUsed   IFree IUse% Mounted on
devtmpfs        998439     378  998061    1% /dev
tmpfs          1001041       1 1001040    1% /dev/shm
tmpfs          1001041     605 1000436    1% /run
tmpfs          1001041      16 1001025    1% /sys/fs/cgroup
/dev/vda2      6553600 6531942   21658  100% /
tmpfs          1001041      13 1001028    1% /run/user/0

「orc1_ora_10*」のレベルでは、ファイルが多すぎて削除できませんでした。

rm -f orc1_ora_10*.aud
# rm -f orc1_ora_10*.aud
-bash: /usr/bin/rm: Argument list too long

rm で消すなら↓このレベルですね。

rm -f orc1_ora_101*.aud
rm -f orc1_ora_102*.aud
rm -f orc1_ora_103*.aud

PHPで削除コマンドを生成してもいいかも。

php -r 'for($i=1;$i<=100;$i++) echo sprintf("rm -f orc1_ora_%03d*.aud",$i),PHP_EOL;'

20回繰り返して、なんとか93%までもっていくことができました。

# df -i
Filesystem      Inodes   IUsed   IFree IUse% Mounted on
devtmpfs        998439     378  998061    1% /dev
tmpfs          1001041       1 1001040    1% /dev/shm
tmpfs          1001041     596 1000445    1% /run
tmpfs          1001041      16 1001025    1% /sys/fs/cgroup
/dev/vda2      6553600 6094639  458961   93% /
tmpfs          1001041      13 1001028    1% /run/user/0

以上

Scroll to Top