如何自动清理Oracle数据库归档文件

Oracle归档模式:在归档模式下,当重做日志文件被填满后,Oracle不会直接覆盖旧的日志,而是将它们保存到归档日志文件中。这意味着所有的事务日志都会被保留,包括在线Redo日志和归档日志。
优点:
1、可以进行完全、不完全恢复:由于所有的数据库改动都记录在日志文件中,如果发生数据丢失,可以利用物理备份和归档日志完全恢复数据库。
2、可以进行联机热备:在数据库运行状态下进行备份,备份时用户对数据库的使用不受影响。
3、更多的优化选项:随着Oracle版本升级,在联机热备方面不断有新的优化策略出现。
缺点:
1、需要更多的磁盘空间保存归档日志。
2、DBA会有更多的管理工作,包括维护归档空间、备份归档日志。

因此Oracle归档文件大小达到了上限(由db_recovery_file_dest_size参数指定)或所在磁盘目录已满,就会影响数据库的正常运作,所以很有必要设置一个自动化清理归档文件的任务。

解决方案

Windows操作系统

一、d:\rman目录下新建一个txt文件,比如auto_rman.txt,输入以下内容,然后修改为bat格式

@echo off
set date=%date:~,10%
set fileName=log_%date:/=%.txt
(
echo 正在清除过期归档文件,请稍等......
rman cmdfile=d:\rman\arch_delete.txt
)>d:\rman\%fileName% 2>&1<nul

二、同样在该目录下,新建一个arch_delete.txt的文件,输入以下内容

connect target  /
run{
crosscheck archivelog all;
delete expired archivelog all;
DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-15'; 
}

注:sysdate-15代表删除15天以前的归档日志文件,建议各位根据实际情况,去修改归档文件的保留时间

三、测试auto_rman.bat文件能否成功执行。双击它,会弹出cmd对话框,测试成功。

四、使用window自带的任务管理器,设定自动化任务

程序启动顺序如下
开始>windows管理工具>任务计划程序>任务计划程序库>创建基本任务>设置执行频率及指定执行文件auto_rman.bat

Linux操作系统

一、设定定时任务
crontab -e
0 1 * * * /home/oracle/del_ora_log.sh >>del_ora_log.log 2>&1

注:代表每天执行一次

二、在home/oracle目录下
编辑文件del_ora_log.sh,内容如下

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
export ORACLE_SID=orcl1
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib 
rman target/ cmdfile=/home/oracle/del_ora_log.rman msglog=/home/oracle/del_ora_log.rman.log >>/home/oracle/rman.log 2>&1

编辑del_ora_log.rman ,内容如下

crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'sysdate-10';
exit;

本页作者:czhdawn,如若转载,请注明出处:https://www.czhdawn.cn/archives/4609

(0)
czhdawn的头像czhdawn
上一篇 2024年1月14日 12:00
下一篇 2024年3月6日 08:59

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注