Многие включают аудит и обращают внимание, что таблицы AUD$ и FGA_LOG$ начинают расти (они располагаются в табличном пространстве SYSAUX). Необходимо отслеживать их рост и ежедневно контролировать их размеры.
Количество строк
SQL код:
SELECT COUNT(*) FROM AUD$;
Размер таблицы
SQL код:
SELECT SUM(BYTES) FROM DBA_SEGMENTS WHERE SEGMENT_NAME='AUD$';
Самая старая запись
SQL код:
SELECT MIN(NTIMESTAMP#) FROM AUD$;
В каких табличных пространствах находятся
SQL код:
SELECT table_name, tablespace_name
FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;
Пример вывода
Код:
TABLE_NAME TABLESPACE_NAME
---------- ---------------
AUD$ SYSAUX
FGA_LOG$ SYSAUX
Если вам необходимо переместить журнал, например, в другое табличное пространство, можете сделать это с помощью процедуры
SQL код:
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
audit_trail_location_value => '<tablespace_name>') ;
END;
/
Можно использовать следующие типы записей аудита
AUDIT_TRAIL_AUD_STD
AUDIT_TRAIL_FGA_STD
AUDIT_TRAIL_OS
AUDIT_TRAIL_XML
Либо, для всех из них: AUDIT_TRAIL_ALL
Прежде, чем что-либо менять, убедитесь, что автоочистка журнала не включена
SQL код:
set pagesize 150
set linesize 200
column parameter_name format a30
column parameter_value format a20
SELECT * FROM DBA_AUDIT_MGMT_CONFIG_PARAMS;
Код:
PARAMETER_NAME PARAMETER_ AUDIT_TRAIL
------------------------- ---------- --------------------
DB AUDIT TABLESPACE SYSAUX STANDARD AUDIT TRAIL
DB AUDIT TABLESPACE SYSAUX FGA AUDIT TRAIL
AUDIT FILE MAX SIZE 10000 OS AUDIT TRAIL
AUDIT FILE MAX SIZE 10000 XML AUDIT TRAIL
AUDIT FILE MAX AGE 5 OS AUDIT TRAIL
AUDIT FILE MAX AGE 5 XML AUDIT TRAIL
DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL
DB AUDIT CLEAN BATCH SIZE 10000 FGA AUDIT TRAIL
OS FILE CLEAN BATCH SIZE 1000 OS AUDIT TRAIL
OS FILE CLEAN BATCH SIZE 1000 XML AUDIT TRAIL
в этом выводе не должно быть параметра DEFAULT CLEAN UP INTERVAL, если он есть, то лучше его сначала отключить.
SQL код:
BEGIN
DBMS_AUDIT_MGMT.DEINIT_CLEANUP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL);
END;
и инициализируем очистку раз в 14 дней
SQL код:
BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
DEFAULT_CLEANUP_INTERVAL => 24*14
);
END;
/
ну и процедура полной очистки журналов аудита
SQL код:
CREATE OR REPLACE PROCEDURE SP_PURGE_AUDIT_TRAIL
AS
BEGIN
DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL);
SYS.DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (
AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
/
или частичной, за 14 дней
SQL код:
CREATE OR REPLACE PROCEDURE SP_PURGE_AUDIT_TRAIL
AS
retention NUMBER;
BEGIN
retention := 14;
SYS.DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP (
AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
LAST_ARCHIVE_TIME => SYSTIMESTAMP - retention
);
SYS.DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (
AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
/
которые можно запихнуть в задание
SQL код:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB (
job_name => 'JOB_PURGE_AUDIT_TRAIL',
schedule_name => 'SYS.MAINTENANCE_WINDOW_GROUP',
job_class => 'DEFAULT_JOB_CLASS',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN SP_PURGE_AUDIT_TRAIL(); END;',
comments => 'Job to purge all audit trails'
);
SYS.DBMS_SCHEDULER.ENABLE(name => 'JOB_PURGE_AUDIT_TRAILS');
END;
/
Ну и неплохо зарегистрировать наш джоб в DBMS_AUDIT_MGMT
SQL код:
BEGIN
DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS(
audit_trail_purge_name => 'JOB_PURGE_AUDIT_TRAIL',
audit_trail_status_value => DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE);
END;
/
Соответственно, проверить события очистки можно будет запросом
SQL код:
SELECT * FROM DBA_AUDIT_MGMT_CLEAN_EVENTS;