The retention of alert log cannot be controlled by ADRCI utility, it needs manual intervention. In this post, I'd like to share how I reduce the size of alert log by means of trimming the content of alert log file.
Purge Alert Log
Whenever you want to clear alert log in a hurry or the space problem becomes serious, you can empty all content of alert log in this way:
[oracle@test ~]$ cat /dev/null > /path/to/alert_ORCL.log
This command can solve your space problem in a second if you have no time to think over a better solution. Just don't forget to change the location of alert log.
Deleting the alert log directly is also a way to do it as long as no one locks the file at that moment, the database will create a new file for the alert log afterwards. However, emptying is my first choice.
Trim Alert Log
If you want to keep most recent entries in the alert log just like trimming obsolete records off the alert log file, you may play this trick.
Here are the steps:
- Backup specific number of records
- Copy those records back
- Empty backup file
Backup the last certain number of lines of the alert log into a second file which is temporary and transitional in the first command. In this example, we keep 50000 lines.
[oracle@test ~]$ tail -50000 /path/to/alert_ORCL.log > /path/to/alert_ORCL.log.copy
Copy the temporary and transitional file back to the alert log with force option.
[oracle@test ~]$ cp -f /path/to/alert_ORCL.log.copy /path/to/alert_ORCL.log
Empty the transitional file in order to free its space if the space is still sensitive.
[oracle@test ~]$ cat /dev/null > /path/to/alert_ORCL.log.copy
For convenience, I concatenate all commands in one line for executing them without any gaps. Additionally, this could also reduce the loss of log entries between executions.
[oracle@test ~]$ tail -50000 /path/to/alert_ORCL.log > /path/to/alert_ORCL.log.copy; cp -f /path/to/alert_ORCL.log.copy /path/to/alert_ORCL.log; cat /dev/null > /path/to/alert_ORCL.log.copy
Of course, you can wrap these commands in a shell script and schedule it for regularlly purging.
With respect to alert log in rdbms, you may have to handle listener.log in listener with the same manner as well, but first, you need to know the location of listener before preparing your script.
By the way, although 50000 lines that we keep in the alert log sounds large in quantity, the text file is not so big in size as you thought.
For rest of other files, there's an integrated way to delete all trace logs, audit files and the alert log.