系统alert.log中有很多错误提示:
ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition WRH$_ACTIVE_SESSION_HISTORY_3840252989_15027 by 128 in tablespace SYSAUX
2021-08-11T16:18:45.388052+08:00
ORA-1652: unable to extend temp segment by 128 in tablespace SYSAUX
2021-08-11T16:19:45.498345+08:00
ORA-1652: unable to extend temp segment by 128 in tablespace SYSAUX
百度一搜,告诉可能时开启审计的原因,于是按照这个思路处理。
SQL> SET SERVEROUTPUT ON
BEGIN
IF sys.DBMS_AUDIT_MGMT.is_cleanup_initialized(sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD) THEN
DBMS_OUTPUT.put_line('YES');
ELSE
DBMS_OUTPUT.put_line('NO');
END IF;
END;
/SQL>
NO
PL/SQL procedure successfully completed.
SQL> BEGIN
sys.DBMS_AUDIT_MGMT.set_last_archive_timestamp(
audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
last_archive_time => SYSTIMESTAMP-7 /* Day */);
END;
/ 2 3 4 5 6
BEGIN
*
ERROR at line 1:
ORA-46258: Cleanup not initialized for the audit trail
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 181
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 996
ORA-06512: at line 2
SQL> EXEC DBMS_AUDIT_MGMT.INIT_CLEANUP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, 12)
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, TRUE);
PL/SQL procedure successfully completed.
SQL> SELECT COUNT(*) FROM AUD$;
COUNT(*)
----------
0
SQL> EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, FALSE)
PL/SQL procedure successfully completed.
其实审计都没有开启,看来原因不在这个上面。
那就查看这个表空间到底都被哪些表占用了。
查看大于100M的数据表
SQL>SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, BYTES / 1024 / 1024 FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = 'SYSAUX' and BYTES / 1024 / 1024>100;
发现 wri$_adv_objects 这个表占用了20G
SQL> select count(*) from wri$_adv_objects where task_id=(select distinct id from wri$_adv_tasks where name='AUTO_STATS_ADVISOR_TASK');
COUNT(*)
----------
138554669
看来这个表里面记录真不少,这个是因为优化器统计顾问的执行。
找到一个处理方法:
SQL> create table wri$_adv_objects_new as select * from wri$_adv_objects where task_id !=(select distinct id from wri$_adv_tasks where name='AUTO_STATS_ADVISOR_TASK');
Table created.
SQL> select count(*) from wri$_adv_objects_new;
COUNT(*)
----------
99504
SQL> truncate table wri$_adv_objects;
Table truncated.
SQL> insert /*+ APPEND */ into wri$_adv_objects select * from wri$_adv_objects_new;
99504 rows created.
SQL> commit;
Commit complete.
SQL> drop table wri$_adv_objects_new;
Table dropped.
SQL> alter index wri$_adv_objects_idx_01 rebuild;
Index altered.
SQL> alter index wri$_adv_objects_pk rebuild;
Index altered.
SQL> quit
Alert.log里面中终于不报错误了。