应查dba_segments确认AUD$物理位置,再用SHOW PARAMETER audit_trail验证是否写入库表;SYSTEM满时禁用TRUNCATE,须用DBMS_AUDIT_MGMT分批清理并重设DB_DEFAULT_TABLESPACE。

查确认AUD$是不是真在SYSTEM里
别凭经验猜,直接看物理段位置。dba_segments才反映真实存储,dba_tables可能误导:
-
SELECT owner, segment_name, tablespace_name FROM dba_segments WHERE segment_name = 'AUD$' AND owner = 'SYS';—— 如果tablespace_name返回SYSTEM,就是它了 - 再补一句:
SHOW PARAMETER audit_trail;—— 返回DB或DB, EXTENDED才说明审计日志真写进库内表,不是写文件 - RAC环境必须所有实例都查,不能只连一个节点就下结论
紧急释放空间:别TRUNCATE,用DELETE+COMMIT分批删
当SYSTEM已满到连sqlplus / as sysdba都卡住时,TRUNCATE TABLE aud$会失败——它需要临时空间建回滚段。此时唯一可行的是可控的逐批删除:
- 先强制刷盘减轻压力:
ALTER SYSTEM CHECKPOINT; - 然后执行:
DELETE FROM aud$ WHERE ntimestamp# (按时间删老数据) - 每删10万行左右就
COMMIT;一次,避免撑爆UNDO表空间 - 删完立刻跑:
ALTER SYSTEM ARCHIVE LOG CURRENT;和ALTER DATABASE BACKUP CONTROLFILE TO TRACE;留操作痕迹
迁移AUD$出SYSTEM:MOVE + ENABLE ROW MOVEMENT缺一不可
清空只是临时解法,不迁移,下次照样涨。迁移必须两步一起做,漏一步就会报错或无效:
用于设计、审查、生成或重构使用Effector、effector-react、Farfetched、AtomicRouter、@effector/next等库的React应用。
- 先确保目标表空间(比如
USERS)在线且有足够空闲:SELECT tablespace_name, status, contents FROM dba_tablespaces WHERE tablespace_name = 'USERS'; - 启用行移动:
ALTER TABLE SYS.AUD$ ENABLE ROW MOVEMENT;—— 没这句,MOVE会报ORA-10635 - 执行迁移:
ALTER TABLE SYS.AUD$ MOVE TABLESPACE USERS; - 收缩空间:
ALTER TABLE SYS.AUD$ SHRINK SPACE;—— 这步才能真正回收SYSTEM里的碎片空间
设自动清理策略:DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP是关键
靠人定期登录删太危险,必须让Oracle自己管。但初始化和归档时间设置顺序不能错,否则CLEAN_AUDIT_TRAIL会静默失败:
- 只做一次:
BEGIN DBMS_AUDIT_MGMT.INIT_CLEANUP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD); END;—— 若报ORA-46262,说明没初始化,必须先跑这句 - 设保留窗口(如90天):
EXEC DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, last_archive_time => SYSTIMESTAMP - 90); - 真正清理:
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, cleanup_only => TRUE); - 注意:
cleanup_only => TRUE表示只清理不归档;若想归档到外部表,需配合DBMS_AUDIT_MGMT.CREATE_PURGE_JOB
最常被跳过的点是:迁移AUD$后没重设DB_DEFAULT_TABLESPACE属性,导致新审计记录仍尝试写入SYSTEM(尤其RAC多实例场景)。执行完MOVE,务必补一句:EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD, property_name => DBMS_AUDIT_MGMT.DB_DEFAULT_TABLESPACE, property_value => 'USERS');

















