如何使用数据库SCHEDULER来执行清归档脚本

一  日常运维过程中是如何定期删除归档日志的呢?

对于定期删归档,比较普遍的做法是是使用操作系统的crontab或者windows的任务计划功能来调用删归档脚本,今天小编给大家带来一种使用oracle的Scheduler来调用清归档脚本以实现定期清理归档文件的方法。

Oracle在10g开始就提供了Scheduler来管理定时任务,这是一个企业作业调度程序,可以帮助您简化成百上千个任务的调度。Oracle调度器(Scheduler)由DBMS_Scheduler PL/SQL包中的过程和函数实现。Scheduler帮助您有效地管理和计划任务。确保许多例行任务在没有人工干预的情况下执行,有效降低操作成本,实现更可靠的管理,最大限度地减少人为错误。它可以执行任何类型的脚本(例如:PL/SQL、OS shell脚本、第三方程序等等)。在RAC),可以指定作业应在哪个数据库节点上运行,参数项instance_id。

 

下面我们以删除归档日志为例,来使用Scheduler。

01 前期数据库环境设置

# 修改externaljob.ora属性

#cd $ORACLE_HOME/rdbms/admin/
#chown root externaljob.ora
#chmod 640 externaljob.ora

# 修改extjob属性

#cd $ORACLE_HOME/bin
#chmod 4750 extjob

# 修改externaljob.ora文件内容

run_user = oralce        #oralce用户名
eun_group = oinstall     #oralce用户组

 

02  准备一个删除归档脚本

#!/bin/bash
export ORACLE_HOME=/oralce/app/product/11.2.0/db_1
export ORACLE_SID=ora11g1
$ORACLE_HOME/bin/rman target/<EOF
crosscgeck archivelog all;
delete noprompt archivelog until time 'sysdate-7';
exit;

##注意:脚本中必须使用绝对路径,你要的环境变量必须指定,且脚本必须拥有执行权限

03  给执行Scheduler的用户赋权

SQL> grant scheduler_admin to username;
SQL> grant manage scheduler to username;
SQL> grant create job to username;

04  在数据库创建一个program

begin
    db_ms_sheduler.create_program
    (
    peogram_name =>'DEL_ARCS',
    program_type =>'EXECUTABLE',
    program_action=>'/home/oracle/delarch.sh',
    enabled      =>TRUE,
    comments     =>'delete Archived Logs'
  );
  end;

我们创建一个在每天凌晨一点运行一次的任务计划,该计划的名称为  'EVERY_DAY_1_00。

06 创建一个job 来调用之前创建的程序及计划

begin
    dbms_scheduler.create_job
    (
        job_name    =>'ARC_DEL',
        peogram_nmae=>'DEL_ARCS',
        schedule_name=>'EVERY_DAY_1_00',
        comments     =>'Del Archived Logs',
        enabled      =>TRUE
    );
    end;

07 如何更改Scheduler属性设置

使用

SET_ATTRIBUTE与SET_SCHEDULER_ATTRIBUTE

存储过程来更改设置。

例如,我们将该计划的执行节点改为2检点:

SQL> exec DBMS_SCHEDULER.SET_ATTRIBUTE (name=>'ARC_DEL',attribute=>'instance_id',value=>'2';

08  禁用,删除任务

禁用job(多个)
BEGIN
    DBMS_SCHEDULER.DISABLE('job1,job2,job3,sys,jobclass1,sys,jobclass2');
END

删除job(多个)
BEGIN
    DBMS_SCHEDULER.DROP_JOB('job1,job3,sys,jobclass1,sys,jobclass2');
END

09  设置查看记录日志

设置日志:

BEGIN
    DBMS_SCHEDULER.SET_ATTRIBUTE('ARC_DEL','logging_level',
DBMS_SCHEDULER.LOGGING_FALLED_RUNS);
END;  

查看日志记录:

select to_char(log_date,'DD_MON_YY HH24:MI:SS') TIMESTAMP, job_name,status, SUBSTR(additional_info,1,40) ADDITIONAL_INFO
from user_acheduler_job_run_delails oder by log_date;

 

oralce的Scheduler(任务计划),相对于oralce之前的JOB ,更加灵活易用,且支持调用shell命令或第三方程序,并提供详细的日志记录,

更为详细的用法大家可以参考以下提供的官方文档,里面包括详细的使用方法以及可能会遇到的报错及处理方法。

 

 

参考文献

DBMS_SCHEDULER FAILS WITH ORA-27369 WHEN JOB TYPE IS EXECUTABLE (Doc ID 279866.1)

https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72308

https://docs.oracle.com/database/121/ADMIN/schedadmin.htm#ADMIN12062

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

English太次郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值