oracle 空间清理工具,Oracle 清理sysaux表空间

查看sysaux表空间使用排行

select SEGMENT_NAME,BYTES/1024/1024/1024 DGD from dba_segments  where tablespace_name='SYSAUX' ORDER BY DGD DESC;

ac9bf4d84347e52939b1b62d6d477d2f.png

I_WRI$_OPTSTAT_H_ST

WRI$_OPTSTAT_HISTGRM_HISTORY

I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST

这问题是由最近一个数据库SYSAUX使用空间过多引出来的.

SM/OPTSTAT是用于存储老的统计信息,10G之前,当对表/字段/索引做了相应的统计信息之后,新的统计信息就会覆盖老的统计信息,也就是说的无法直接找回统计信息,要找回,只能事先通过dbms_stats导出来。10G就不必了,它会自动的存到相应的表里,而这些表是存在sysaux的,但这也引出了一个问题:如果这些表的数据不断的增长,而不把老的数据删除的话,sysaux迟早会暴了的。默认的情况下,系统会为SM/OPTSTAT保留31天的记录,可以通过dbms_stats.get_stats_history_retention来确定。这里的统计信息跟AWR是有区别的, AWR默认保留7天. SM/OPTSTAT保留的时间可以通过dbms_stats.alter_stats_history_retention来控制。如果SM/OPTSTAT确实占用了比较多的空间,要删除某个时间前的记录可以用:dbms_stats.purge_stats. 这个SP其实只从存储历史统计信息的表里删除记录,这样的话,就会出现一种情况,删除了大量的数据,但这些表占用的空间并没有释放,也就是HWM不会降下来的。这时要手工处理,顺便说一下用于存储SM/OPTSTAT相关信息的表是由脚$ORACLE_HOME/rdbms/admin/catost.sql来创建的.下面是测试:

SQL> show parameter sga_target

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

sga_target big integer 0

SQL> select dbms_stats.get_stats_history_availability from dual;

GET_STATS_HISTORY_AVAILABILITY

---------------------------------------------------------------------------

10-APR-10 11.15.35.339756000 PM -04:00

SQL> select dbms_stats.get_stats_history_retention from dual;

GET_STATS_HISTORY_RETENTION

---------------------------

31

SQL> select * from v$sysaux_occupants where occupant_name='SM/OPTSTAT';

OCCUPANT_NAME OCCUPANT_DESC SCHEMA_NAM MOVE_PROCE MOVE_PROCEDURE_DESC SPACE_USAGE_KBYTES

-------------- ---------------------------------------------------- ---------- ---------- ---------------------------------------- ------------------

SM/OPTSTAT Server Manageability - Optimizer Statistics History SYS *** MOVE PROCEDURE NOT APPLICABLE *** 68416

SQL> select sum(SPACE_USAGE_KBYTES) from v$sysaux_occupants;

SUM(SPACE_USAGE_KBYTES)

-----------------------

175168

SQL> select owner,segment_name,sum(bytes)/1024/1024 from dba_extents where segment_name in (

2 'WRI$_OPTSTAT_TAB_HISTORY','I_WRI$_OPTSTAT_TAB_OBJ#_ST','I_WRI$_OPTSTAT_TAB_ST','WRI$_OPTSTAT_IND_HISTORY','I_WRI$_OPTSTAT_IND_OBJ#_ST'

,'I_WRI$_OPTSTAT_IND_ST','WRI$_OPTSTAT_HISTHEAD_HISTORY','I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST','I_WRI$_OPTSTAT_HH_ST','WRI$_OPTSTAT_HISTGRM_HISTORY'

3 4 ,'I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST','I_WRI$_OPTSTAT_H_ST','WRI$_OPTSTAT_AUX_HISTORY','I_WRI$_OPTSTAT_AUX_ST','WRI$_OPTSTAT_OPR'

5 ,'I_WRI$_OPTSTAT_OPR_STIME','OPTSTAT_HIST_CONTROL$')

6 group by owner,segment_name

7 order by 3;

OWNER SEGMENT_NAME SUM(BYTES)/1024/1024

------------------------------ --------------------------------------------------------------------------------- --------------------

SYS OPTSTAT_HIST_CONTROL$ .015625

SYS WRI$_OPTSTAT_AUX_HISTORY .0625

SYS I_WRI$_OPTSTAT_AUX_ST .0625

SYS WRI$_OPTSTAT_OPR .0625

SYS I_WRI$_OPTSTAT_OPR_STIME .0625

SYS I_WRI$_OPTSTAT_IND_ST .1875

SYS I_WRI$_OPTSTAT_TAB_ST .1875

SYS I_WRI$_OPTSTAT_IND_OBJ#_ST .25

SYS I_WRI$_OPTSTAT_TAB_OBJ#_ST .3125

SYS WRI$_OPTSTAT_TAB_HISTORY .3125

SYS WRI$_OPTSTAT_IND_HISTORY .3125

SYS I_WRI$_OPTSTAT_HH_ST 2

SYS I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST 3

SYS WRI$_OPTSTAT_HISTHEAD_HISTORY 4

SYS I_WRI$_OPTSTAT_H_ST 13

SYS WRI$_OPTSTAT_HISTGRM_HISTORY 17

SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST 26

17 rows selected.

从这里可以看出,总共使用了175M sysaux,其中SM/OPTSTAT占用68M.

SQL> exec dbms_stats.purge_stats(sysdate-1);

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_stats_history_availability from dual;

11-MAY-10 10.22.53.000000000 PM -04:00

把之前的历史数据清空了.

SQL> select owner,segment_name,sum(bytes)/1024/1024 from dba_extents where segment_name in (

2 'WRI$_OPTSTAT_TAB_HISTORY','I_WRI$_OPTSTAT_TAB_OBJ#_ST','I_WRI$_OPTSTAT_TAB_ST','WRI$_OPTSTAT_IND_HISTORY','I_WRI$_OPTSTAT_IND_OBJ#_ST'

,'I_WRI$_OPTSTAT_IND_ST','WRI$_OPTSTAT_HISTHEAD_HISTORY','I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST','I_WRI$_OPTSTAT_HH_ST','WRI$_OPTSTAT_HISTGRM_HISTORY'

3 4 ,'I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST','I_WRI$_OPTSTAT_H_ST','WRI$_OPTSTAT_AUX_HISTORY','I_WRI$_OPTSTAT_AUX_ST','WRI$_OPTSTAT_OPR'

5 ,'I_WRI$_OPTSTAT_OPR_STIME','OPTSTAT_HIST_CONTROL$')

group by owner,segment_name

6 7 order by 3;

OWNER SEGMENT_NAME SUM(BYTES)/1024/1024

------------------------------ --------------------------------------------------------------------------------- --------------------

SYS OPTSTAT_HIST_CONTROL$ .015625

SYS WRI$_OPTSTAT_AUX_HISTORY .0625

SYS I_WRI$_OPTSTAT_AUX_ST .0625

SYS WRI$_OPTSTAT_OPR .0625

SYS I_WRI$_OPTSTAT_OPR_STIME .0625

SYS I_WRI$_OPTSTAT_IND_ST .1875

SYS I_WRI$_OPTSTAT_TAB_ST .1875

SYS I_WRI$_OPTSTAT_IND_OBJ#_ST .25

SYS I_WRI$_OPTSTAT_TAB_OBJ#_ST .3125

SYS WRI$_OPTSTAT_TAB_HISTORY .3125

SYS WRI$_OPTSTAT_IND_HISTORY .3125

SYS I_WRI$_OPTSTAT_HH_ST 2

SYS I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST 3

SYS WRI$_OPTSTAT_HISTHEAD_HISTORY 4

SYS I_WRI$_OPTSTAT_H_ST 13

SYS WRI$_OPTSTAT_HISTGRM_HISTORY 17

SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST 26

17 rows selected.

SQL> select * from v$sysaux_occupants where occupant_name='SM/OPTSTAT';

OCCUPANT_NAME OCCUPANT_DESC SCHEMA_NAM MOVE_PROCE MOVE_PROCEDURE_DESC SPACE_USAGE_KBYTES

-------------- ---------------------------------------------------- ---------- ---------- ---------------------------------------- ------------------

SM/OPTSTAT Server Manageability - Optimizer Statistics History SYS *** MOVE PROCEDURE NOT APPLICABLE *** 68416

SQL> select sum(SPACE_USAGE_KBYTES) from v$sysaux_occupants;

SUM(SPACE_USAGE_KBYTES)

-----------------------

175168

这里可以看出purge完后,这些空间并没有释放.

SQL> show user

USER is "SYS"

SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space;

alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space

*

ERROR at line 1:

ORA-10631: SHRINK clause should not be specified for this object

SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY enable row movement;

Table altered.

SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space;

alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space

*

ERROR at line 1:

ORA-10631: SHRINK clause should not be specified for this object

报这个错误的原因是由于这张表有函数索引:

SQL> select owner,index_name from dba_indexes where table_name='WRI$_OPTSTAT_HISTGRM_HISTORY';

SYS I_WRI$_OPTSTAT_H_ST

SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST

SQL> select index_owner,index_name from dba_ind_expressions where table_name='WRI$_OPTSTAT_HISTGRM_HISTORY';

SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST

SYS I_WRI$_OPTSTAT_H_ST

只能用move来降HWM了,做完这个操作,要对相应的index重建.

SQL> alter table WRI$_OPTSTAT_HISTGRM_HISTORY move;

Table altered.

SQL> alter index I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST rebuild online;

Index altered.

SQL> alter index I_WRI$_OPTSTAT_H_ST rebuild online;

Index altered.

SQL> select * from v$sysaux_occupants where occupant_name='SM/OPTSTAT';

OCCUPANT_NAME OCCUPANT_DESC SCHEMA_NAM MOVE_PROCE MOVE_PROCEDURE_DESC SPACE_USAGE_KBYTES

-------------- ---------------------------------------------------- ---------- ---------- ---------------------------------------- ------------------

SM/OPTSTAT Server Manageability - Optimizer Statistics History SYS *** MOVE PROCEDURE NOT APPLICABLE *** 12736

SQL> select sum(SPACE_USAGE_KBYTES) from v$sysaux_occupants;

SUM(SPACE_USAGE_KBYTES)

-----------------------

119488

SQL> select owner,segment_name,sum(bytes)/1024/1024 from dba_extents where segment_name in (

2 'WRI$_OPTSTAT_TAB_HISTORY','I_WRI$_OPTSTAT_TAB_OBJ#_ST','I_WRI$_OPTSTAT_TAB_ST','WRI$_OPTSTAT_IND_HISTORY','I_WRI$_OPTSTAT_IND_OBJ#_ST'

,'I_WRI$_OPTSTAT_IND_ST','WRI$_OPTSTAT_HISTHEAD_HISTORY','I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST','I_WRI$_OPTSTAT_HH_ST','WRI$_OPTSTAT_HISTGRM_HISTORY'

3 4 ,'I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST','I_WRI$_OPTSTAT_H_ST','WRI$_OPTSTAT_AUX_HISTORY','I_WRI$_OPTSTAT_AUX_ST','WRI$_OPTSTAT_OPR'

5 ,'I_WRI$_OPTSTAT_OPR_STIME','OPTSTAT_HIST_CONTROL$')

6 group by owner,segment_name

7 order by 3;

OWNER SEGMENT_NAME SUM(BYTES)/1024/1024

------------------------------ --------------------------------------------------------------------------------- --------------------

SYS OPTSTAT_HIST_CONTROL$ .015625

SYS WRI$_OPTSTAT_AUX_HISTORY .0625

SYS I_WRI$_OPTSTAT_OPR_STIME .0625

SYS I_WRI$_OPTSTAT_AUX_ST .0625

SYS WRI$_OPTSTAT_OPR .0625

SYS I_WRI$_OPTSTAT_IND_ST .1875

SYS I_WRI$_OPTSTAT_TAB_ST .1875

SYS I_WRI$_OPTSTAT_IND_OBJ#_ST .25

SYS I_WRI$_OPTSTAT_TAB_OBJ#_ST .3125

SYS WRI$_OPTSTAT_IND_HISTORY .3125

SYS WRI$_OPTSTAT_TAB_HISTORY .3125

SYS I_WRI$_OPTSTAT_H_ST .4375

SYS I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST .5625

SYS WRI$_OPTSTAT_HISTGRM_HISTORY .625

SYS I_WRI$_OPTSTAT_HH_ST 2

SYS I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST 3

SYS WRI$_OPTSTAT_HISTHEAD_HISTORY 4

17 rows selected.

从总体上看:sysaux释放了56M, 这正是SM/OPTSTAT释放出来的。测试时碰到一问题,当SGA是自动管理时,purge时会被MMON进程阻塞的。

部分转载自:https://blog.csdn.net/wu_wei_jie/article/details/6331911?locationNum=13&fps=1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oraclesysaux表空间满了,需要进行清理或扩容操作。可以通过以下步骤进行处理: 1. 查看sysaux表空间的使用情况,确定是否需要扩容或清理。 2. 如果需要扩容,可以使用ALTER TABLESPACE命令进行扩容操作。 3. 如果需要清理,可以使用以下命令进行清理: a. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将移动到其他表空间。 b. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将索引移动到其他表空间。 c. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将LOB对象移动到其他表空间。 d. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将对象移动到其他表空间。 e. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将对象移动到其他表空间。 f. 执行DBMS_SPACE_ADMIN.TABLESPACE_MOVER.PROCEDURE_MOVE_TABLESPACE将对象移动到其他表空间。 4. 清理完成后,可以再次查看sysaux表空间的使用情况,确保已经解决问题。 ### 回答2: Oracle数据库中的SYSAUX表空间是用于管理和存储系统级别的关键性能数据的空间。当该表空间满时,可能会导致数据库性能下降或无法正常工作。那么,我们该如何处理这种情况呢? 首先,我们可以通过查询V$SYSAUX_OCCUPANTS视图来确定哪些对象占用了SYSAUX表空间,并分析这些占用情况。通过该视图,我们可以得知哪些对象是占用空间比较大的,可以采取针对性的对其进行管理和优化,比如移除或重建该对象。 其次,我们可以通过执行自动维护任务来释放SYSAUX表空间中不必要的数据。Oracle自动在SYSAUX表空间中创建了若干个自动维护任务,这些任务定时执行清理、移除或归档等操作,可以释放出一定的空间。我们可以通过查询DBA_AUTOTASK_CLIENT视图来查看自动维护任务的设置情况,并可以修改或禁用不必要的任务来释放更多的空间。 另外,我们可以考虑对SYSAUX表空间进行扩展,以增加其存储容量。在扩展SYSAUX表空间时,我们需要确保数据文件存储在一个有效的磁盘位置,并要注意数据文件的分布和扩展方式。在扩展完毕后,我们需要重新分配表空间数据文件中的数据块,并重新计算和索引的size,以保证数据结构的正确性和性能的稳定性。 综上所述,当SYSAUX表空间满了时,我们不必过于紧张,可以通过几种方式来解决问题。同时,我们也需要定期对数据库进行管理和优化,在日常运维过程中及时排查各种问题,以避免出现系统崩溃、数据丢失等问题。 ### 回答3: Oracle中的sysaux表空间是用来存储系统级别的常用数据和信息的,包括一些企业管理以及可选组件等等,通常占据大量的空间。当sysaux表空间满了时,会对数据库的正常运行造成重大影响,因此需要及时处理。 当sysaux表空间满了,我们可以采取以下措施: 1. 压缩sysaux表空间:对sysaux表空间中的数据进行压缩,从而减小该表空间的大小。可以使用Oracle提供的压缩工具或第三方工具来实现。 2. 重新分配sysaux表空间大小:通过修改数据库参数或使用Oracle提供的ALTER TABLESPACE命令进行重新分配表空间大小,以便更好地管理数据库空间,并解决sysaux表空间满的问题。 3. 清理和删除不必要的信息:可以通过查询sysaux表空间中的数据来确定哪些信息已过时或不再需要。然后,将这些信息清理并从sysaux表空间中删除,进一步减小表空间的大小。 总之,当Oracle中的sysaux表空间满了时,需要针对具体情况采取相应的措施来解决问题。在处理sysaux表空间的问题时,需慎重行事,以免影响整个数据库的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值