SYSAUX表空间满的解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SYSAUX表空间满的解决方法相关的知识,希望对你有一定的参考价值。

转载自:https://www.cnblogs.com/yiyuf/p/4284448.html

 

step1.  确认到底是哪个段占用了sysaux空间:

select segment_name,sum(bytes)/1024/1024 from dba_segments where tablespace_name=‘SYSAUX‘ group by segment_name order by 2 desc

SEGMENT_NAME               SUM(BYTES)/1024/1024
WRH$_ACTIVE_SESSION_HISTORY     7360.375
WRH$_ACTIVE_SESSION_HISTORY_PK   1400.257

从上面看就是ASH(v$active_session_history)历史记录没有清理造成

 

step2. 检查有多少条无效记录:

SQL> SELECT COUNT(1) Orphaned_ASH_Rows
 FROM wrh$_active_session_history a
 WHERE NOT EXISTS
 (SELECT 1
 FROM wrm$_snapshot
 WHERE snap_id = a.snap_id
 AND dbid = a.dbid
 AND instance_number = a.instance_number
 );

ORPHANED_ASH_ROWS
-----------------
23392228 

 

step3.清楚多余记录,由于rows过多,清理速度有点慢。

SQL>DELETE FROM wrh$_active_session_history a
WHERE NOT EXISTS (SELECT 1
FROM wrm$_snapshot
WHERE snap_id = a.snap_id
AND dbid = a.dbid
AND instance_number = a.instance_number);

23392228 rows deleted.

SQL>commit;

期间需要注意归档日志的产生量,避免造成磁盘空间不足等麻烦。同时可以适当的多添加几组redolog来加速delete操作。

 

step4. shrink tablespace

alter table WRH$_ACTIVE_SESSION_HISTORY shrink space;

 

step5. re-check

column OCCUPANT_NAME format a15
SELECT occupant_name,
occupant_desc,
space_usage_kbytes
FROM v$sysaux_occupants
WHERE occupant_name LIKE ‘%AWR%‘;

 

SELECT PARTITION_NAME FROM DBA_IND_PARTITIONS WHERE INDEX_NAME=‘WRH$_ACTIVE_SESSION_HISTORY_PK‘;

PARTITION_NAME
------------------------------
WRH$_EVENT_HISTO_MXDB_MXSN
WRH$_ACTIVE_2645903699_6157

step6 rebuild index

SQL> alter index sys.WRH$_ACTIVE_SESSION_HISTORY_PK rebuild partition WRH$_ACTIVE_2645903699_12505;

Index altered.

SQL> alter index sys.WRH$_ACTIVE_SESSION_HISTORY_PK rebuild partition WRH$_ACTIVE_2645903699_6157;

Index altered.

 

以上是关于SYSAUX表空间满的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

如何处理Oracle中TEMP表空间满的问题

ubuntu下/boot空间被占满的解决方法

SYSAUX表空间占用过大情况下的处理(AWR信息过多)

如何恢复 sysaux 表空间?

oracle占用的空间特别大,该如何解决?

清理 SYSAUX 表空间