============ oracle審計表遷移到新的表空間 ============

前言

oracle資料庫開啟審計功能後會佔用大量的SYSTEM系統表空間,要麼定時對審計表進行清理,要麼對系統表空間進行擴容(不建議)

1) 檢查審計表現在所在表空間

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$                 SYSTEM
FGA_LOG$             SYSTEM

2)檢查審計表的當前資料量

select segment_name,bytes/1024/1024 size_in_mb from dba_segments where segment_name in ('AUD$','FGA_LOG$');

SEGMENT_NAME         SIZE_IN_MB
------------------- -----------------------------
FGA_LOG$             10380

AUD$                 4413

3) 建立新表空間 (審計用)

SQL>create tablespace audit_tbs datafile size 16G autoextend on;

Tablespace created.

4) 遷移儲存表

使用儲存過程:DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION

#遷移aud$

SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,--this moves table AUD$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.

#遷移FGA_LOG$表

SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,--this moves table FGA_LOG$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.

5) 檢查遷移結果

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$                    AUDIT_TBS
FGA_LOG$                AUDIT_TBS

#對於沒有特別要求的可以直接對審計表進行清理

SQL>truncate table sys.aud$;

#對於有要求保留審計日誌的可以進行定期備份後再清理

$nohup exp    \'/ as sysdba\' rows=y indexes=n compress=n buffer=65536 file=web_audit_20190516.dmp log=exp_web_audit_20190516.log tables=sys.aud$ &

<end>