1. Identify Large Segments in the SYSTEM Tablespace
Before deleting records, you may want to identify which segments occupy the most space in the SYSTEM tablespace. Run the following SQL command:
SET PAGES 999
SET LINES 300
COL OWNER FOR A10
COL SEGMENT_NAME FOR A20
COL SEGMENT_TYPE FOR A15
COL MB FOR 9999999
SELECT OWNER,
SEGMENT_NAME,
SEGMENT_TYPE,
ROUND(BYTES/1024/1024) MB
FROM
DBA_SEGMENTS
WHERE
TABLESPACE_NAME='SYSTEM'
ORDER BY BYTES DESC
FETCH FIRST 5 ROWS ONLY;
2. Count Audit Records Older Than 180 Days
To estimate the number of audit records that are older than 180 days, use this query:
SELECT COUNT(*)
FROM SYS.AUD$
WHERE ntimestamp# < SYSDATE - 180;
3. Delete Audit Records in Batches
To prevent undo tablespace issues during deletion, remove records in smaller batches. Use the following PL/SQL block:
DECLARE
v_limit NUMBER := 10000; -- Define batch size
BEGIN
LOOP
DELETE FROM SYS.AUD$
WHERE ntimestamp# < SYSDATE - 180
AND ROWNUM <= v_limit;
EXIT WHEN SQL%ROWCOUNT = 0;
COMMIT;
END LOOP;
END;
/
4. Notes and Recommendations
- Always take a backup of the database before performing bulk deletions.
- Monitor the undo tablespace during deletion to ensure it does not run out of space.
- Adjust the
v_limitvariable based on your system’s capacity and performance. - After cleaning up, consider purging or archiving old audit logs periodically to avoid similar issues in the future.
Tip: Regularly monitor the size of SYS.AUD$ and implement an automated cleanup job to manage its growth.