今天用户反馈sap有些因为有问题,所以寻找一下原因:
1、用db02看空间情况
看这里好像空间是没有了,99%使用掉了
2、用toad看空间也是类型情况,所以确实这个表空间没有了
3、检查SYSAUX项目空间占比
SELECT occupant_name"Item", round(space_usage_kbytes/1024/1024,3)"Space Used (GB)", schema_name "Schema", move_procedure "MoveProcedure" FROM v$sysaux_occupants ORDER BY 2 Desc;
如上图所示,SM/AWR组件使用空间是4.557GB,占用量最高。
4、检查数据库的AWR保留参数,确认其是否配置了较大的值。
select * from dba_hist_wr_control;
如上图所示,snap_interval代表采样间隔,示例是1H;retention代表保留天数,11g版本开始一般默认是8天。
5、检查数据库的AWR当前快照的最大值和最小值,以确认清理范围。
命令:
select min(snap_id) as min_snap_id, max(snap_id) as max_snap_id from SYS.WRH$_ACTIVE_SESSION_HISTORY;
如上图所示,min_snap_id为1,max_snap_id为18247,根据每小时产生一个快照,每天则产生24个,而18247个快照约为600多天以上,远超默认的8天保留时间。
关键结论:因此可以直接判断出本数据库的AWR自动清理机制出了问题,需要手动清理。
6、先用toad先增加表空间,清理出现问题,以后考虑处理
先考虑增加1G吧,如下变成6000MB
7、查看sap db02 现在出现下面情况,有剩余空间了
8、检查SYSAUX中表大小情况
命令(获取占用空间最多的20个表):
select * from (select segment_name,tablespace_name, round(sum(bytes)/1024/1024,2) current_size_mb from dba_segments where tablespace_name = 'SYSAUX' and segment_type like '%TABLE%' group by segment_name,tablespace_name order by current_size_mb desc) where rownum
如上图所示,WRH$开头的表占用空间最多。
9、查看SYSAUX表空间使用量
当清理操作执行完毕后,请用下列命令确认SYSAUX表空间的当前使用情况(该步骤也可以贯穿整个清理过程不断检查校验执行结果)。
SELECT UPPER(F.TABLESPACE_NAME) "tablespace_name", D.TOT_GROOTTE_MB "tablesapce_size(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "used_tablespace_size(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "used%", F.TOTAL_BYTES "free_size(M)", F.MAX_BYTES "max_byte(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE where TABLESPACE_NAME = 'SYSAUX' GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD where TABLESPACE_NAME = 'SYSAUX' GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 4 DESC;
10、以后可以考虑使用TRUNCATE命令清理
考虑到官方的存储过程清理会导致数据库产生海量的归档日志的情况,因此还可以选择手动truncate基表的方式进行清理,以规避大量的归档产生、UNDO占用和耗时较长的问题。而手动truncate基表主要有以下几个步骤:
注意:以下操作,建议使用sys用户登录数据库之后操作