Uma empresa parceira

Design sem nome (2)

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:

[code lang=”sql”]
[root@server01 vs05]# pwd
/u01/app/oracle/diag/rdbms/vs05/vs05
[root@server01 vs05]# du -sh
32G
[root@server01 vs05]#
[/code]

Vamos checar qual pasta possui mais arquivos:

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

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:

[code lang=”sql”]
[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
[/code]

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:

[code lang=”sql”]
[root@server01 trace]# find . -name "*.trm" -print0 | xargs -0 rm
[/code]

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 😀

Uma resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados