Tratando o erro “Argument list too long” ao tentar limpar logs de determinado diretório

Limpeza de logs antigos e arquivos desnecessários é uma tarefa simples e recorrente para qualquer DBA Oracle.

Um simples comando rm -rf *.trc ou rm -rf *.trm limpa os arquivos antigos dos diretórios de logs do Oracle Database.

É comum acessar essa estrutura de pasta /u01/app/oracle/diag/rdbms/vs05/vs05/trace e se deparar com GBs e mais GBs de dados de trace, logs e afins.

Exemplo: meu banco de dados vs05 possui alarmantes 32GB de arquivos de logs, alert log, dentre outros:

[root@server01 vs05]# pwd
/u01/app/oracle/diag/rdbms/vs05/vs05
[root@server01 vs05]# du -sh
32G     
[root@server01 vs05]#

Vamos checar qual pasta possui mais arquivos:

[root@server01 vs05]# du -sh * | sort -h
4.0K    lck
4.0M    metadata
11G     trace
22G     alert
[root@server01 vs05]#

Tendo em vista que as maiores pastas são trace e alert, vamos fazer a limpeza nos arquivos contido nelas. Os arquivos a serem excluídos são: .trm e .trc:

[root@server01 trace]# rm -rf *.trm
-bash: /usr/bin/rm: Argument list too long

[root@server01 trace]# rm -rf *.trc
-bash: /usr/bin/rm: Argument list too long

Para contornar o erro acima, basta executar o comando abaixo, diferente do rm -rf *.trm, ele não irá estourar o buffer e retornar o erro:

[root@server01 trace]# find . -name "*.trm" -print0 | xargs -0 rm

Essa limitação para remover arquivos é do sistema operacional, varia de distribuição para distribuição e pode ser consultado através do comando # getconf ARG_MAX !

Aproveite e use por conta e risco 😀

Deixe uma resposta

Seu e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

× Como posso te ajudar?