26.11.2021 13:27
OlegON
 
На одной из моих баз табличка 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;


Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.