WRI$_ADV_OBJECTS表过大,导致sysaux表空间不足
问题:
环境是oracle19c,windows2012 R2,在进行一次oracle字段备份的时候,发现备份报错,但是单独登陆使用dblink是可以查询源端数据库的内容,然后使用命令行操作备份,下图是数据库的报错,如下:
提示sysaux表空间不足。
处理方式1:
--查看表空间剩余空间
select a.TABLESPACE_NAME tbs_name, round(a.BYTES/1024/1024) Total_MB, round((a.BYTES-nvl(b.BYTES, 0)) /1024/1024) Used_MB, round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) Pct_Free, nvl(round(b.BYTES/1024/1024), 0) Free_MB , auto from (select TABLESPACE_NAME, sum(BYTES) BYTES, max(AUTOEXTENSIBLE) AUTO from sys.dba_data_files group by TABLESPACE_NAME) a, (select TABLESPACE_NAME, sum(BYTES) BYTES from sys.dba_free_space group by TABLESPACE_NAME) b where a.TABLESPACE_NAME = b.TABLESPACE_NAME (+) order by ((a.BYTES-b.BYTES)/a.BYTES) desc;
awrinfo查看sysaux使用的情况
这里为ADVISOR组件功能模块导致SYS.WRI$_ADV_OBJECTS表过大。
查看前10名最大的表
这里也比较明显主要是由于WRI$_ADV_OBJECTS表占用空间较多导致,WRI$_ADV_OBJECTS表主要是12.2以及以上版本新特性Optimizer Statistics Advisor 功能使用到的表,用来存储相关数据。
查看Optimizer Statistics Advisor 任务:
select OWNER,DESCRIPTION,TASK_NAME,ADVISOR_NAME,EXECUTION_START,EXECUTION_END from dba_advisor_tasks;
select RULE_ID, NAME, RULE_TYPE, DESCRIPTION from V$STATS_ADVISOR_RULES order by 1;
清理WRI$_ADV_OBJECTS相关数据
--表越大,索引越大的执行时间越长,耐心等待
DECLARE v_tname VARCHAR2(32767); BEGIN v_tname := 'AUTO_STATS_ADVISOR_TASK'; DBMS_STATS.DROP_ADVISOR_TASK(v_tname); END; / EXEC DBMS_STATS.INIT_PACKAGE(); ALTER TABLE WRI$_ADV_OBJECTS MOVE; ALTER INDEX WRI$_ADV_OBJECTS_IDX_01 REBUILD; ALTER INDEX WRI$_ADV_OBJECTS_PK REBUILD;
DECLARE filter1 CLOB; BEGIN filter1 := DBMS_STATS.CONFIGURE_ADVISOR_RULE_FILTER('AUTO_STATS_ADVISOR_TASK','EXECUTE',NULL,'DISABLE'); END; /
查看并修改禁用Optimizer Statistics Advisor Task
--查看保留时间
select task_name,parameter_name, parameter_value
FROM DBA_ADVISOR_PARAMETERS
WHERE task_name='AUTO_STATS_ADVISOR_TASK' and parameter_name='EXECUTION_DAYS_TO_EXPIRE';
--修改保留时间 10天
BEGIN
DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER(task_name => 'AUTO_STATS_ADVISOR_TASK',
parameter => 'EXECUTION_DAYS_TO_EXPIRE',
value => 10);
END;
/
处理方式2:
添加sysaux表空间数据文件。