在Oracle 10g 版本中,引入了SYSTEM表空间的一个辅助表空间: SYSAUX表空间。
SYSAUX 表空间存放一些其他的metadata组件,如OEM,Streams 等会默认存放在SYSAUX表空间里。这样也能降低SYSTEM表空间的负载。 因此SYSAUX 表空间也是在DB创建或者升级时自动创建的。
如果在手工使用SQL创建DB时没有指定SYSAUX tablespace,那么创建语句会报错,无法执行。
在正常操作下,不能drop 和rename SYSAUX 表空间。 如果SYSAUX 表空间不可用时,数据库的核心功能还是可以继续运行的。只是一些存放在SYSAUX表空间里的功能受到限制,就如我们之前说的OEM。
通常,OEM信息库是Sysaux表空间的最大用户。

v$sysaux_occupants视图显示sysaux表空间中每个占有物理使用空间的详细信息。如果你希望把某个占有物移动到不同的表空间,它还提供了该占有物的移动过程。

SQL> desc v$sysaux_occupants
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OCCUPANT_NAME                                      VARCHAR2(64)
 OCCUPANT_DESC                                      VARCHAR2(64)
 SCHEMA_NAME                                        VARCHAR2(64)
 MOVE_PROCEDURE                                     VARCHAR2(64)
 MOVE_PROCEDURE_DESC                                VARCHAR2(64)
 SPACE_USAGE_KBYTES                                 NUMBER

  

如果希望将sysaux的占有物ULTRASEARCH移动到一个新表空间ULTRA1,可以使用WKSYS模式拥有的MOVE_WK过程来完成:

SQL> EXECUTE WKSYS.MOVE_WK('ULTRA1');

Sysaux表空间特性:
不能置为只读read only
不能重命名
不能删除

 

下面说一下SYSAUX表空间满的处理方案:

1、查看表空间不足是哪些文件占用比较大:

SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'SYSAUX'
and bytes >1048576 order by bytes asc;  

2、从第一步中查看出是哪张表占用较多

如果是awr基础表 WRH$_ACTIVE_SESSION_HISTORY 过大,首先看下目前快照保留期限

SQL> select RETENTION from dba_hist_wr_control;

确认该保留期限是否过长,如果过长的话也会导致SYSAUX里面存有的历史信息过多而导致表空间满。

3、清理较大的表(此处以清理sys.WRH$_ACTIVE_SESSION_HISTORY表为例)

清除1周前快照

SQL> select max(SNAP_ID) from sys.WRH$_ACTIVE_SESSION_HISTORY where SAMPLE_TIME <=sysdate-7;

MAX(SNAP_ID)
------------
33616

SQL> select min(SNAP_ID) from sys.WRH$_ACTIVE_SESSION_HISTORY;

MIN(SNAP_ID)
------------
32195
SQL> execute dbms_workload_repository.drop_snapshot_range(low_snap_id => 32195,high_snap_id =>33616,dbid => 3815288676);

 

 

posted on 2013-12-20 16:08  ylyloving  阅读(1874)  评论(0编辑  收藏  举报