#DBMS_AUDIT_MGMT
DBMS_AUDIT_MGMT包提供了一组内置的存储过程,用于创建和管理审计清理任务。需要注意的是,所有相关程序的参数值必须按序输入。
分布式部署中,dba用户、拥有execute any procedure权限的用户在CN节点能够执行清理审计日志,在DN、MN节点需使用sys用户直连节点进行操作。
# SET_LAST_ARCHIVE_TIMESTAMP
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type IN INTEGER,
last_archive_time IN TIMESTAMP);
SET_LAST_ARCHIVE_TIMESTAMP程序用于设置清理时间点,成功设置的清理时间点可以在DBA_AUDIT_MGMT_LAST_ARCH_TS视图中查询。
参数 | 描述 |
---|---|
audit_trail_type | 审计清理类型,当前只支持DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。 |
last_archive_time | 清理时间点,不能超过当前时间。 |
示例
-- 设置清理时间点
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED ,
SYSDATE);
END;
/
# CLEAN_AUDIT_TRAIL
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type IN INTEGER,
use_last_arch_timestamp IN BOOLEAN DEFAULT TRUE);
CLEAN_AUDIT_TRAIL程序用于进行审计日志内容清理。
参数 | 描述 |
---|---|
audit_trail_type | 审计清理类型,当前只支持DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。 |
use_last_arch_timestamp | 是否使用清理时间,值为TRUE或FALSE。若为TRUE则只删除小于清理时间点的审计数据,若为FALSE则删除所有审计数据。 |
示例
-- 执行审计日志清理,清除审计清理时间点之前的审计数据。
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (
DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
true);
END;
/
# CREATE_PURGE_JOB
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
audit_trail_type IN INTEGER,
audit_trail_start_time IN timestamp,
audit_trail_purge_interval IN varchar,
audit_trail_purge_name IN VARCHAR,
use_last_arch_timestamp IN BOOLEAN DEFAULT TRUE);
CREATE_PURGE_JOB程序用于创建一个审计清理定时任务,成功创建的定时任务将可以在DBA_AUDIT_MGMT_CLEANUP_JOBS视图中查询,审计清理定时任务创建时默认状态为开启。
参数 | 描述 |
---|---|
audit_trail_type | 审计清理类型,当前只支持DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。 |
audit_trail_start_time | 定时任务开始时间。 |
audit_trail_purge_interval | 表达式文本,用于计算定时任务下次执行的时间。 |
audit_trail_purge_name | 定时任务名称。 |
use_last_arch_timestamp | 是否使用清理时间,值为TRUE或FALSE。若为TRUE则只有小于清理时间点的数据被删除,若为FALSE则会清理所有的审计记录。 |
定期更新审计清理时间点
使用审计清理定时任务处理审计数据清理时,默认将清理时间点之前的审计数据做清理。在数据库使用期间,审计日志不断积累,需要根据实际需要定期更新清理时间点。
可以通过YashanDB提供的DBMS_SCHEDULER.CREATE_JOB进行定期更新审计清理时间点,所创建的任务计划可在DBA_SCHEDULER_JOBS中查询。
示例
-- 将审计清理时间点设置为30天前,即只保留最近30天的审计日志,每天执行一次刷新
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
'update_audit_archive_time',
'PLSQL_BLOCK',
'BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, sysdate-30);END;' ,
0,
SYSDATE,
'sysdate+1',
NULL,
'DEFAULT_JOB_CLASS',
TRUE,
FALSE,
'update audit archive time');
END;
/
创建审计清理定时任务
创建审计清理时间点定时任务后,创建审计清理定时任务。
示例
-- 创建自动清理任务,5个小时后开始第一次执行,每次执行时间间隔为1天
BEGIN
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
SYSDATE + 5/24,
'sysdate + 1',
'audit_job',
TRUE);
END;
/
# SET_PURGE_JOB_STATUS
DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS(
audit_trail_purge_name IN VARCHAR,
audit_trail_status_value IN INTEGER);
SET_PURGE_JOB_STATUS程序用于设置定时任务的启停标志,被停止的定时任务将不再被系统进行任务调度。
参数 | 描述 |
---|---|
audit_trail_purge_name | 定时任务名称,可以通过DBA_AUDIT_MGMT_CLEANUP_JOBS视图查询。 |
audit_trail_status_value | 是否停止定时任务,DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE表示启动,DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE表示停止。 |
示例
-- 停止审计清理定时任务
BEGIN
DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS (
'audit_job',
DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE);
END;
/
# SET_PURGE_JOB_INTERVAL
示例
DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(
audit_trail_purge_name IN VARCHAR,
audit_trail_interval_value IN VARCHAR);
SET_PURGE_JOB_INTERVAL程序用于修改审计日志定时任务下次执行时间。
参数 | 描述 |
---|---|
audit_trail_purge_name | 定时任务名称,可以通过DBA_AUDIT_MGMT_CLEANUP_JOBS视图查询。 |
audit_trail_interval_value | 表达式文本,用于计算定时任务下次执行的时间。 |
示例
-- 修改审计清理定时任务的执行间隔为7天
BEGIN
DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(
'audit_job',
'sysdate + 7');
END;
/
# GET_LAST_ARCHIVE_TIMESTAMP
DBMS_AUDIT_MGMT.GET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type IN PLS_INTEGER)
RETURN TIMESTAMP;
GET_LAST_ARCHIVE_TIMESTAMP程序获取审计清理时间点。
参数 | 描述 |
---|---|
audit_trail_type | 审计清理类型,当前只支持DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。 |
示例
-- 获取审计清理时间点
DECLARE
last_time TIMESTAMP;
BEGIN
last_time := DBMS_AUDIT_MGMT.GET_LAST_ARCHIVE_TIMESTAMP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED);
IF last_time IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('last archive timestamp is: ' || TO_CHAR(last_time));
ELSE
DBMS_OUTPUT.PUT_LINE('last archive timestamp is null');
END IF;
END;
/
--result
last archive timestamp is: 2022-11-05 17:12:34.000000
# CLEAR_LAST_ARCHIVE_TIMESTAMP
DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type IN PLS_INTEGER);
CLEAR_LAST_ARCHIVE_TIMESTAMP程序用于清空审计清理时间点。
参数 | 描述 |
---|---|
audit_trail_type | 审计清理类型,当前只支持DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。 |
示例
-- 清空审计清理时间点
BEGIN
DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP
(DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED);
END;
/
删除审计清理定时任务
DBMS_AUDIT_MGMT.DROP_PURGE_JOB (
audit_trail_purge_name IN VARCHAR);
DROP_PURGE_JOB程序用于删除清理定时任务。
参数 | 描述 |
---|---|
audit_trail_purge_name | 定时任务名称。 |
# 异常说明
调用DBMS_AUDIT_MGMT高级包进行审计清理相关处理时,若参数设置不正确会抛出如下异常:
错误码 | 错误内容 | 解释 |
---|---|---|
YAS-30000 | invalid value of argument AUDIT_TRAIL_TYPE | 审计清理类型的设置非法 |
YAS-30001 | invalid value of argument AUDIT_TRAIL_STATUS_VALUE | 审计清理job状态的设置非法 |
YAS-30002 | invalid value of argument LAST_ARCHIVE_TIME | 审计清理时间点的设置非法 |
YAS-30003 | invalid value of argument AUDIT_TRAIL_PURGE_INTERVAL | 下次执行时间的设置非法 |
YAS-30004 | Cleanup job already existed for the given audit trail type | 给定类型的审计清理job已存在 |