我试图弄清楚如何创建/安排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;
我还有另一种方法吗?
它似乎没有start_date参数,例如DBMS_SCHEDULER.CREATE_JOB,您可以在其中指定时间。
答案 0 :(得分:1)
清除作业功能只是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版本执行。
答案 1 :(得分:0)
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE
( name => 'DAILY_AUDIT_PURGE_JOB'
,attribute => 'START_DATE'
,value => trunc(sysdate) + interval '5' hour + interval '10' minute
);
END;
/