sysaux 表空间不足问题处理

本文详细解析了Oracle数据库中SYSAUX表空间满错误的原因,并提供了检查和优化SYSAUX表空间的方法,包括查看占用空间的组件、调整SM/OPTSTAT统计信息的保存时间、删除过期统计数据以及移动占用大量空间的表,同时重建相关索引以释放空间。
部署运行你感兴趣的模型镜像

一现场,备份库alter 日志出现错误
ORA-1688: unable to extend table SYS.WRH$_SQLSTAT partition WRH$_SQLSTA_3344221469_3956 by 128 in                 tablespace SYSAUX
ORA-1688: unable to extend table SYS.WRH$_SQLSTAT partition WRH$_SQLSTA_3344221469_3956 by 128 in                 tablespace SYSAUX

根据错误提示是sysaux 表空间满了

 从10G 开始引入的,以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX表空间中创建.
通过分离这些组件和功能,SYSTEM表空间的负荷得以减轻.反复创建一些相关对象及组件引起SYSTEM表空间的碎片问题得以避免。
如果SYSAUX表空间不可用,数据库核心功能将保持有效;使用SYSAUX表空间的特点将会失败或功能受限.

可以从V$SYSAUX_OCCUPANTS view 查看情况

V$SYSAUX_OCCUPANTS

V$SYSAUX_OCCUPANTS displays SYSAUX tablespace occupant information.
Column  Datatype  Description
OCCUPANT_NAME  VARCHAR2(64)  Occupant name
OCCUPANT_DESC  VARCHAR2(64)  Occupant description
SCHEMA_NAME  VARCHAR2(64)  Schema name for the occupant
MOVE_PROCEDURE  VARCHAR2(64)  Name of the move procedure; null if not applicable
MOVE_PROCEDURE_DESC  VARCHAR2(64)  Description of the move procedure
SPACE_USAGE_KBYTES  NUMBER  Current space usage of the occupant (in KB)

查看那些 occupant空间占用情况

select OCCUPANT_NAME,SPACE_USAGE_KBYTES/1024/1024 from V$SYSAUX_OCCUPANTS;
SELECT s.object_name from dba_objects s where s.object_name like '%OPTSTAT%' and s.object_type='TABLE';


在Oracle10中表空间SYSAUX引入,oracle把统计信息存储在这里,这也是为了更好的优化system表空间,
我们可以用视图V$SYSAUX_OCCUPANTS 查看,oracle有哪些数据存贮在SYSAUX中。


 
oracle的SM/AWR, SM/ADVISOR, SM/OPTSTAT and SM/OTHER的统计信息都存储在SYSAUX中
 
查询当前SM/OPTSTAT的统计信息的保存时间
SQL> select dbms_stats.get_stats_history_retention from dual;
 
GET_STATS_HISTORY_RETENTION
---------------------------
                         31
 
修改SM/OPTSTAT的统计信息的保存时间为10天
SQL> exec dbms_stats.alter_stats_history_retention(10);
 
PL/SQL procedure successfully completed
 
SQL> select dbms_stats.get_stats_history_retention from dual;
 
GET_STATS_HISTORY_RETENTION
---------------------------
                         10
 


删除16天前的统计数据
SQL> exec dbms_stats.purge_stats(sysdate-20);
 
PL/SQL procedure successfully completed
 
SQL>

查看当前有效的统计数据是到什么时间的
SQL> select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;
 
GET_STATS_HISTORY_AVAILABILITY
--------------------------------------------------------------------------------
12-2月 -12 07.15.49.000000000 下午 +08:00
 
再删除7天前的统计数据
SQL> exec dbms_stats.purge_stats(sysdate-7);
 
PL/SQL procedure successfully completed
 
这个时候发现有效的统计信息时间已经变了
SQL> select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;
 
GET_STATS_HISTORY_AVAILABILITY
--------------------------------------------------------------------------------
14-2月 -12 07.15.57.000000000 下午 +08:00
 

 
 
 
没有释放空间是因为“purge_stats”用delete的方式删除数据,虽然数据没了,但是HWM还没降下来,查看OPTSTAT使用哪些表,然后降低其高水位即可。
SQL> SELECT s.object_name from dba_objects s where s.object_name like '%OPTSTAT%' and s.object_type='TABLE'
  2  ;
 
OBJECT_NAME
--------------------------------------------------------------------------------
WRI$_OPTSTAT_TAB_HISTORY
WRI$_OPTSTAT_IND_HISTORY
WRI$_OPTSTAT_HISTHEAD_HISTORY
WRI$_OPTSTAT_HISTGRM_HISTORY
WRI$_OPTSTAT_AUX_HISTORY
WRI$_OPTSTAT_OPR
OPTSTAT_HIST_CONTROL$
 
7 rows selected
 
SQL>

再结合如下sql判断哪个表大,然后就move哪个表
SQL> select a.table_name,a.num_rows from dba_tables a where  a.tablespace_name='SYSAUX' and a.table_name like '%OPTSTAT%'
  2  ;
 
TABLE_NAME                       NUM_ROWS
------------------------------ ----------
WRI$_OPTSTAT_OPR                      151
WRI$_OPTSTAT_AUX_HISTORY                0
WRI$_OPTSTAT_HISTGRM_HISTORY       139933
WRI$_OPTSTAT_HISTHEAD_HISTORY       14406
WRI$_OPTSTAT_IND_HISTORY             1196
WRI$_OPTSTAT_TAB_HISTORY             1323
 
6 rows selected
 
SQL>

再用如下语句查出相关表的索引,因为move表,索引会失效,需要重建索引
SQL> select i.index_name,i.table_name,i.status,i.table_owner
  2   from dba_indexes i,dba_objects s where i.table_name=s.object_name and  s.object_name like '%OPTSTAT%' and s.object_type='TABLE'
  3  ;
 
INDEX_NAME                     TABLE_NAME                     STATUS   TABLE_OWNER
------------------------------ ------------------------------ -------- ------------------------------
I_WRI$_OPTSTAT_TAB_OBJ#_ST     WRI$_OPTSTAT_TAB_HISTORY       VALID    SYS
I_WRI$_OPTSTAT_TAB_ST          WRI$_OPTSTAT_TAB_HISTORY       VALID    SYS
I_WRI$_OPTSTAT_IND_OBJ#_ST     WRI$_OPTSTAT_IND_HISTORY       VALID    SYS
I_WRI$_OPTSTAT_IND_ST          WRI$_OPTSTAT_IND_HISTORY       VALID    SYS
I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST  WRI$_OPTSTAT_HISTHEAD_HISTORY  VALID    SYS
I_WRI$_OPTSTAT_HH_ST           WRI$_OPTSTAT_HISTHEAD_HISTORY  VALID    SYS
I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST WRI$_OPTSTAT_HISTGRM_HISTORY   VALID    SYS
I_WRI$_OPTSTAT_H_ST            WRI$_OPTSTAT_HISTGRM_HISTORY   VALID    SYS
I_WRI$_OPTSTAT_AUX_ST          WRI$_OPTSTAT_AUX_HISTORY       VALID    SYS
I_WRI$_OPTSTAT_OPR_STIME       WRI$_OPTSTAT_OPR               VALID    SYS
 
10 rows selected
 
SQL>

 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>嗯,用户需要解决OracleSYSAUX表空间问题。这个问题Oracle数据库管理中挺常见的,让我仔细想想该怎么处理。用户提到参考信息里有ORA-1688错误,说明问题已经实际发生了。SYSAUX表空间了确实会影响数据库运行,得尽快解决。我记得SYSAUX主要存放AWR快照、优化器统计信息这些诊断数据,所以清理思路应该从这里入手。首先得确认具体是什么占用了空间。根据引用[2]提到的查询语句,可以列出SYSAUX中大于1GB的对象。不过这个阈值可能需要调整,现在数据库都比较大,也许改成500MB更合适?或者直接按大小排序看前几名也行。清理策略要考虑几个方向:最直接的是清理旧的AWR快照,默认保留8天可能太多了,业务不忙的话保留5天就够了。ADDM报告也可以清理,还有那些自动任务的历史记录。这里要注意不能直接delete,得用Oracle提供的包才安全。如果清理后空间还不够,可能要考虑扩容。但用户没说是否允许加数据文件,所以得准备两种方案。表空间resize是比较干净的做法,但前提是数据文件还能扩展。不能扩展的话可能得新增数据文件了。突然想到还有个隐患:如果自动扩展没开,单纯清理可能很快又了。所以最后一定要检查自动扩展设置。另外最好建议用户设置定期清理任务,引用[1]的案例就是因为没定期清理才出问题的。用户是DBA吗?看提问方式应该是技术人员,但没具体说环境。回复时要避免太专业的术语,比如"段收缩"这种可能要简单解释下。不过核心步骤不能省,毕竟涉及数据库稳定性。对了,所有操作都要强调先备份!尤其是修改表空间的操作。可以提醒用户操作前拍快照,万一出问题能回滚。有些DBA会忘记这个。最后生成的三个问题要覆盖延伸知识点:空间监控方法、自动维护任务优化、表空间管理机制。这样用户下次遇到类似问题能自己处理。</think>以下是解决 Oracle SYSAUX 表空间问题的系统化步骤,结合诊断、清理与扩容方案: --- ### **一、诊断空间占用源** 1. **定位大对象** 执行以下 SQL 确认 SYSAUX 中占用空间最多的对象: ```sql SELECT segment_name, segment_type, ROUND(bytes/1024/1024, 2) size_mb FROM dba_segments WHERE tablespace_name = 'SYSAUX' ORDER BY bytes DESC; ``` **重点关注对象**: - `WRH$_*` 系列(AWR 快照) - `WRI$_ADV_*`(优化建议相关) - `LOGSTDBY$*`(逻辑备库) - 审计表(如 `AUD$`) 2. **检查 AWR 保留策略** AWR 快照是常见空间占用源: ```sql SELECT * FROM dba_hist_wr_control; ``` 输出中 `RETENTION` 列显示保留天数(默认 **8 天**),`SNAP_INTERVAL` 为快照间隔。 --- ### **二、清理空间方案** #### **▶ 方案1:清理过期 AWR 快照** ```sql BEGIN DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range( low_snap_id => (SELECT MIN(snap_id) FROM dba_hist_snapshot WHERE retention_days > 7), high_snap_id => (SELECT MAX(snap_id) FROM dba_hist_snapshot WHERE retention_days > 7), dbid => (SELECT dbid FROM v$database) ); END; / ``` > **注意**:调整 `retention_days > N` 中的 `N` 可清理指定天数前的快照。 #### **▶ 方案2:缩减优化建议数据** ```sql -- 清理无效优化任务 EXEC DBMS_ADVISOR.delete_all_tasks; -- 清空自动诊断监视器(ADDM)数据 EXEC DBMS_ADVISOR.reset_all; ``` #### **▶ 方案3:清理审计日志(若迁移至此)** ```sql TRUNCATE TABLE sys.aud$; -- 需谨慎操作并提前备份 ``` --- ### **三、扩容表空间** #### **▶ 步骤1:添加数据文件** ```sql ALTER TABLESPACE SYSAUX ADD DATAFILE '/oradata/sysaux02.dbf' SIZE 2G AUTOEXTEND ON NEXT 500M MAXSIZE 30G; ``` #### **▶ 步骤2:调整现有文件大小** ```sql ALTER DATABASE DATAFILE '/oradata/sysaux01.dbf' RESIZE 10G; ``` --- ### **四、预防措施** 1. **修改 AWR 保留策略** 减少保留天数至合理值(如 5 天): ```sql EXEC DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(retention => 4320); -- 4320分钟=5天 ``` 2. **开启自动清理任务** 确保 `AUTO_SPACE_ADVISOR_JOB` 正常运行: ```sql SELECT job_name, enabled FROM dba_scheduler_jobs WHERE job_name = 'AUTO_SPACE_ADVISOR_JOB'; ``` 3. **监控脚本** 定期运行诊断查询([参考引用^2]): ```sql SELECT segment_name, segment_type, bytes/1024/1024 size_mb FROM dba_segments WHERE tablespace_name='SYSAUX' AND bytes/1024/1024 > 1000 ORDER BY bytes DESC; ``` --- ### **关键操作验证** ```sql -- 检查剩余空间 SELECT tablespace_name, ROUND(used_space/1024/1024, 2) used_mb, ROUND(tablespace_size - used_space)/1024/1024 free_mb FROM dba_tablespace_usage_metrics WHERE tablespace_name = 'SYSAUX'; ``` > **⚠️ 重要提示** > - 清理前**必须备份数据库** > - 生产环境操作建议在维护窗口进行 > - 若清理后空间未释放,尝试重建索引或移动表: > ```sql > ALTER INDEX <index_name> REBUILD TABLESPACE SYSAUX; > ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值