На одной из моих баз табличка AUD$UNIFIED стала крайне неповоротливой, в связи с чем я принял решение ее секционировать по одному дню, чтобы все эти миллионы записей не копились в одном сегменте. Делается так:
SQL код:
BEGIN
DBMS_AUDIT_MGMT.ALTER_PARTITION_INTERVAL(
interval_number => 1,
interval_frequency => 'DAY');
END;
/
Посмотреть результат потом можно так
SQL код:
select partition_name,INTERVAL,HIGH_VALUE from dba_tab_partitions where table_name='AUD$UNIFIED';
select owner,table_name,interval,partitioning_type,partition_count,def_tablespace_name from dba_part_Tables where owner='AUDSYS';
Соответственно, чистка потом через
SQL код:
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
use_last_arch_timestamp => TRUE);
END;
/
будет не только delete делать, но и дропать партиции, что сильно быстрее и легче для базы.
Если нужно, то можно определить табличное пространство для хранения аудита
SQL код:
create tablespace audit_data datafile '/oradata/audit.dbf' size 1g autoextend on next 1g maxsize 10g;
alter user audsys quota unlimited on audit_data;
SQL код:
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
audit_trail_type => dbms_audit_mgmt.audit_trail_unified,
audit_trail_location_value => 'AUDIT_DATA');
END;
/