定期清理审计日志

257 阅读2分钟

定期清理审计日志

DM技术交流QQ群:940124259

1. 问题描述

针对安全版达梦数据库(包括企业版有审计需要可以打开)的审计日志文件不断增多,迟早一天撑满磁盘空间,况且不同时期的数据库版本,对于审计日志文件的处理方式实属迥然不同,但总体来说,肯定是后面的版本的维护方式越来越方便。前不久遇到一伙人需要搞分保测试,考虑到审计日志的磁盘空间占用问题,又遇他们当前版本不支持新版的处理方式,特此为他们写一个定时清理作业,预防无休止地增大。

温馨提示: 审计文件名一般是 AUDIT_<实例名>_<十六进制字符串>_<YYYY-MM-DD-HH24-MI-SS>.log


2. 解决方法

前提:一定要初始化代理。倘若未初始化代理,请用SYSDBA(DBA)执行函数sp_init_job_sys(1)

-- 保留半年的审计日志,即6个月。
call SP_CREATE_JOB('PURGE_AUDIT',1,0,'',0,0,'',0,'清理6个月前的审计文件');
call SP_JOB_CONFIG_START('PURGE_AUDIT');
call SP_ADD_JOB_STEP('PURGE_AUDIT', 'STEP1', 0, 'SP_DROP_AUDIT_FILE(dateadd(M, -6, sysdate)||'''', 0);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('PURGE_AUDIT', 'EVEYDAY_23PM', 1, 1, 1, 0, 0, '23:00:00', NULL, '2022-04-15 10:56:44', NULL, '');
call SP_JOB_CONFIG_COMMIT('PURGE_AUDIT');

友情提示

1. 对于SP_ADD_JOB_STEP存储过程的执行成功和执行失败采取何种处理方式,以保守方式指定1,2,如此一来在不同时期版本的数据库中执行都不会报错。
非要较真的话,按本人的建议做:
1-1-126前版本:SP_ADD_JOB_STEP(jobname, jobstep, jobtype, jobcontent, 0, 2, 0, 0, NULL, 0)
1-1-190后版本:SP_ADD_JOB_STEP(jobname, jobstep, jobtype, jobcontent, 1, 1, 0, 0, NULL, 0)

2. SP_DROP_AUDIT_FILE存储过程主要用于清理指定时间点前的历史审计信息。为何强调历史审计信息呢?
   因为它不能删除当前正在使用的当前审计文件(即正在刷盘记录的审计文件),也就说它仅能删除非当前审计文件前的任意时间点审计文件。
   
3. 审计文件记录超过单个审计文件的大小上限(它会像Oracle联机日志一样写满当前文件后,切换下一组产生新的文件),继续在下一个新的审计文件中审计记录。