Oracle Windows/Linux定期清理归档日志

注:本文转载自https://www.jianshu.com/p/8c13a4c9539e

Oracle Windows/Linux定期清理归档日志

 

一、Windows环境下的配置

原理:通过系统的任务计划执行Oracle归档日志。

1、设置系统环境变量ORACLE_SID,如实例名称:ORCL

image.png

2、创建删除归档日志命令的del_archivelog.txt文件,写入内容:

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

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //删除七天前的归档日志

3、创建执行删除归档日志的del_archivelog.bat脚本文件,写入内容为:

@echo off
set "filename=del_archivelog_task_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt"
(
echo.
echo =========================  正在清除过期归档文件,请稍等...... %date% %time%  =========================
echo.
rman cmdfile=D:\app\admin\del_archivelog.txt
echo.
echo =========================              【结束清理 %date% %time%】                  =========================
echo.
)>>D:\app\admin\%filename% 2>&1<nul
pause

* 注意修改文件路径

4、测试删除归档日志的脚本

下图是根据上面教程创建的两个文件

 

image.png

 

(1)、先查看归档日志路径,确认归档日志文件信息情况。

  • 首先进入SQL Plus查看归档日志的位置
SQL > show parameter recover;

image.png

  • 随便打开一个在清理范围内的日期文件夹

     

    image.png

 

image.png


(2)、双击del_archivelog.bat脚本,然后将自动生成日志文件del_archivelog_task_log_20190202.txt

image.png


(3)、双击日志文件del_archivelog_task_log_20190202.txt,查看执行情况

del_archivelog_task_log_20190202.txt


(4)、再回到前面打开的清理范围内的日期文件夹查看文件是否已被删除

 

5、添加系统任务计划,位置:开始 => 所有程序 => 附件 => 系统工具 => 任务计划

打开任务计划

  • 双击打开任务计划程序
  • 点击右侧新建任务

    image.png


    填写任务基本信息

    添加任务基本信息


    新建触发器

    新建触发器


    选择操作 > 新建操作 - >浏览选择del_archivelog.bat脚本文件

    image.png

     

    image.png

     

    image.png


    到此整个Windows下的配置已结束,注意定期观察任务的运行情况。

    观察结果

二、Linux环境下的配置

  • 执行 sqlplus /nolog进入SQLPlus, 执行 conn / as sysdba
[oracle@custom04 data]$  sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sat Feb 2 16:37:55 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn / as sysdba
Connected.
SQL> 
  • 执行show parameter recover;查询归档日志的位置,注意:如果更改过归档日志路径,请执行archive log list;查看
SQL> show parameter recover;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /data/oracle/flash_recovery_area
db_recovery_file_dest_size           big integer 70G
recovery_parallelism                 integer     0
SQL> 

更改过归档日志路径的情况查看,执行archive log list;

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /home/oracle/oracle_fast_recovery_area
Oldest online log sequence     1622
Next log sequence to archive   1624
Current log sequence           1624
SQL> 
  • 进入归档日志目录,查看并记住文件个数。执行ls -l |grep "^-"|wc -l
[root@custom04 oracle_fast_recovery_area]# ls -l |grep "^-"|wc -l
1215
  • 建立del_archivelog.sh脚本,执行vi del_archivelog.sh
[oracle@custom04 oracle]$ vi del_archivelog.sh 

输入内容,注意修改/data/oracle/del_archivelog/路径

#!/bin/bash
echo "----------------------------------------`date`---------------------------------------"
source ~/.bash_profile
LOG_DIR=/data/oracle/del_archivelog/
DATEL=`date '+%Y-%m-%d'`
LOG_NAME=${LOG_DIR}${DATEL}".log"

rman log=$LOG_NAME target / <<EOF
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate-7';
EOF
echo -e "\n"
echo "------------------------------------- FINISHED -------------------------------------"

注意赋予文件的可执行权限,执行chmod 777 del_archivelog.sh

[oracle@custom04 oracle]$ chmod 777 del_archivelog.sh 
  • 测试脚本是否有效,执行./del_archivelog.sh
[oracle@custom04 oracle]$ ./del_archivelog.sh 
----------------------------------------Sun Feb  3 13:41:11 CST 2019---------------------------------------
RMAN> RMAN> RMAN> RMAN> 

------------------------------------- FINISHED -------------------------------------
[oracle@custom04 oracle]$ 
  • 再次查看归档日志目录文件个数。执行ls -l |grep "^-"|wc -l
[root@custom04 oracle_fast_recovery_area]# ls -l |grep "^-"|wc -l
1189

对比结果

  • 创建 crontab定时任务,执行crontab -e
[oracle@custom04 oracle]$ crontab -e

写入内容,每天凌晨4点执行脚本del_archivelog.sh,并将执行结果输出到task.log

00 4 * * * sh /data/oracle/del_archivelog.sh >> /data/oracle/del_archivelog/task.log 2>&1 &

查看crontab所有定时任务,执行crontab -l

[oracle@custom04 oracle]$ crontab -l 
00 4 * * * sh /data/oracle/del_archivelog.sh >> /data/oracle/del_archivelog/task.log 2>&1 &

到此整个Linux下的配置已结束,注意定期观察任务的运行情况。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值