============ 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>