【问题标题】:Oracle DBMS_AUDIT_MGMT.CREATE_PURGE_JOB at a specifc time of dayOracle DBMS_AUDIT_MGMT.CREATE_PURGE_JOB 在一天中的特定时间
【发布时间】:2015-10-03 12:11:59
【问题描述】:

我试图弄清楚如何创建/安排 DBMS_AUDIT_MGMT.CREATE_PURGE_JOB 在一天中的特定时间执行,而不是在间隔执行, 这似乎在您执行 CREATE_PURGE_JOB 时开始?

我唯一能想到的就是暂时更改SYSTEM时间,运行这个程序,然后修复系统时间??? (哑巴)

BEGIN
  DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
    AUDIT_TRAIL_TYPE           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    AUDIT_TRAIL_PURGE_INTERVAL => 24 * 30 /* hours */,
    AUDIT_TRAIL_PURGE_NAME     => 'Daily_Audit_Purge_Job',
    USE_LAST_ARCH_TIMESTAMP    => TRUE
  );
END;

还有其他我想念的方法吗?

它似乎没有诸如 DBMS_SCHEDULER.CREATE_JOB 之类的 start_date 参数,您可以在其中指定时间。

【问题讨论】:

    标签: oracle auditing purge


    【解决方案1】:
    BEGIN
      DBMS_SCHEDULER.SET_ATTRIBUTE
        ( name      => 'DAILY_AUDIT_PURGE_JOB'
         ,attribute => 'START_DATE'
         ,value     => trunc(sysdate) + interval '5' hour + interval '10' minute
         );
    END;
    /
    

    【讨论】:

      【解决方案2】:

      清除作业功能只是对 DBMS_SCHEDULER 包的包装,因此如果您想安排此任务在其他时间执行,您应该使用 DBMS_SCHEDULER 功能。

      在您的情况下,执行代码后,DBA_AUDIT_MGMT_CLEANUP_JOBS 具有以下信息:

      SQL> SELECT JOB_NAME,JOB_STATUS,AUDIT_TRAIL,JOB_FREQUENCY FROM DBA_AUDIT_MGMT_CLEANUP_JOBS ;
      
      JOB_NAME                  JOB_STAT AUDIT_TRAIL                  JOB_FREQUENCY
      ------------------------- -------- ---------------------------- ------------------------------
      DAILY_AUDIT_PURGE_JOB     ENABLED  STANDARD AUDIT TRAIL         FREQ=HOURLY;INTERVAL=720
      

      而 DBA_SCHEDULER_JOBS 有以下内容:

      SQL> SELECT job_name, next_run_date, state, enabled FROM dba_scheduler_jobs WHERE job_name LIKE '%AUDIT%' ;
      
      JOB_NAME                  NEXT_RUN_DATE                                                STATE           ENABL
      ------------------------- ------------------------------------------------------------ --------------- -----
      DAILY_AUDIT_PURGE_JOB     15-AUG-15 01.11.40.411757 AM AMERICA/ARGENTINA/RIO_GALLEGOS  SCHEDULED       TRUE
      

      照常安排新的“手动”作业:

      BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
         job_name             => 'MANUAL_AUDIT_PURGE_JOB',
         job_type             => 'PLSQL_BLOCK',
         job_action           => 'BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(1, TRUE, 1);  END;',
         enabled              =>  TRUE,
         comments             => 'Manual Audit Purge Job');
      END;
      /
      

      然后你可以通过如下查询 dba_scheduler_job_log 来验证它的执行:

      select log_date
      , job_name
      , status
      from dba_scheduler_job_log
      order by log_date asc;
      

      你会得到这样的东西:

      LOG_DATE                                                                    JOB_NAME                  STATUS
      --------------------------------------------------------------------------- ------------------------- ------------------------------
      16-JUL-15 01.50.03.081815 AM -03:00                                         ORACLE_APEX_MAIL_QUEUE    SUCCEEDED
      16-JUL-15 01.52.29.935133 AM -03:00                                         MANUAL_AUDIT_PURGE_JOB    SUCCEEDED
      

      注意:此 POC 是使用 12.1.0.2.0 版本执行的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        相关资源
        最近更新 更多