美文网首页我的专题
Oracle Windows/Linux定期清理归档日志

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

作者: 承诺一时的华丽 | 来源:发表于2019-02-03 14:06 被阅读41次

    一、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下的配置已结束,注意定期观察任务的运行情况。

    相关文章

      网友评论

        本文标题:Oracle Windows/Linux定期清理归档日志

        本文链接:https://www.haomeiwen.com/subject/japssqtx.html