26.11.2021 13:27
На одной из моих баз табличка 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;
/ 
Часовой пояс GMT +3, время: 14:54.

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