oracle-ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

一、背景

dts服务报错,查看具体报错内容如下

ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM

二、解决办法

1、使用sysdba登陆

sqlplus / as sysdba

2、设置每行字节数(超过则换行显示)

set linesize 1000

3、查看表空间情况

select * from (
Select  a.tablespace_name,
        a.bytes/1024/1024 total_bytes,
        b.bytes/1024/1024 free_bytes,
        a.bytes/1024/1024 - b.bytes/1024/1024 use_bytes,
        to_char(trunc((1 - b.bytes/a.bytes)*100)) || '%' use
from         (select tablespace_name,       
                sum(bytes) bytes
           from dba_data_files
          group by tablespace_name) a,
        (select tablespace_name,       
                sum(bytes) bytes
           from dba_free_space
          group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select         c.tablespace_name,
                c.bytes/1024/1024 total_bytes,
                (c.bytes-d.bytes_used)/1024/1024 free_bytes,
                d.bytes_used/1024/1024 use_bytes,
                to_char(trunc(1 - d.bytes_used/c.bytes)) || '%' use
from                
(select tablespace_name,
                sum(bytes) bytes
from dba_temp_files
group by tablespace_name) c,
(select tablespace_name,
                sum(bytes_used) bytes_used
from v$temp_space_header
group by tablespace_name               
) d
where c.tablespace_name = d.tablespace_name               
)
order by tablespace_name;

4.查看表空间是否有自动扩展能力

SELECT T.TABLESPACE_NAME,D.FILE_NAME,     
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS     
FROM DBA_TABLESPACES T,DBA_DATA_FILES D     
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME     
 ORDER BY TABLESPACE_NAME,FILE_NAME;

5、查看数据文件路径和数据文件大小

select name from v$datafile;   
# shell里执行,路径写具体已经满的表空间路径
du -sh /.../system04.dbf 

6、 扩充表空间

# 方法一、增加自动一个扩展的表空间
ALTER TABLESPACE SYSTEM ADD DATAFILE '/../system05.dbf' SIZE 5000M AUTOEXTEND ON NEXT 5000M MAXSIZE 32G;

# 方法二、如果已满的表空间特别小,也可以直接将表空间增大一些
alter database datafile '/.../system05.dbf' resize 40000M;

# 方法三、如果已满的表空间特别小,且没有开启自动增长,也可以使表空间自动增长
# 设置无限制的自动增长
alter database datafile '/userdata/app/Administrators/oradata/ORCL/system01.dbf' autoextend on next 5000M maxsize unlimited;

# 设置有最大限制的自动增长
alter database datafile '/userdata/app/Administrators/oradata/ORCL/system01.dbf' autoextend on next 5000M MAXSIZE 32G; 

三、根本原因

系统表空间大是因为开启了审计功能,解决方法如下:

1.truncate掉AUD$表并关闭审计功能:

SQL> alter system set audit_trail=none scope=spfile;
SQL>shutdown immediate;
SQL>startup;

2、将AUD$默认表空间由system移出(慎重操作)

数据库oracle11g默认是关闭审计的,为了跟踪监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在system表空间中的SYS.AUD 表 中 , 可 通 过 视 图 d b a a u d i t t r a i l 查 看 ) 或 操 作 系 统 审 计 记 录 中 ( 默 认 位 置 为 表中,可通过视图dba_audit_trail查看)或操作系统审计记录中(默认位置为 dbaaudittrail(ORACLE_BASE/admin/$ORACLE_SID/adump/).。默认情况下审计是没有开启的。

如果要开启最好建立别的表空间专门存放审计,这样也不会影响system表空间性能

2.1 新增表空间

create tablespace SHENJI datafile  '/.../shenji01.dbf' size5000MAutoextend onNext 5000M Maxsize  unlimited;

2.2检查审计表现在所在表空间

SQL> SELECT table_name, tablespace_name FROM dba_tables 
WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name;

TABLE_NAME           TABLESPACE_NAME
---------------     ----------------------
AUD$                 SYSTEM
FGA_LOG$             SYSTEM

2.3检查审计表的当前数据量

select segment_name,bytes/1024/1024 size_in_mb from dba_segments where segment_name in ('AUD$','FGA_LOG$');

SEGMENT_NAME         SIZE_IN_MB
------------------- -----------------------------
FGA_LOG$             10380

AUD$                 4413

2.4迁移存储表

使用存储过程:DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION

#迁移aud$ 

SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,--this moves table AUD$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.

 

#迁移FGA_LOG$表

SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,--this moves table FGA_LOG$
audit_trail_location_value => 'AUDIT_TBS');
END;
/
PL/SQL procedure successfully completed.

2.5检查迁移结果

SQL> SELECT table_name, tablespace_name FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name;

TABLE_NAME              TABLESPACE_NAME
----------------------- ------------------------------
AUD$                    AUDIT_TBS
FGA_LOG$                AUDIT_TBS

借鉴大佬文章:
https://www.zhangqiongjie.com/1527.html
https://www.cnblogs.com/lz-2021/p/14875365.html

<think>好的,用户遇到了Oracle数据库中的ORA-01653错误,具体是表WHTMSC.TMP05B7020507B211F0B03C0050569在USERS表空间无法扩展。我需要帮他们解决这个问题。首先,我得回忆一下ORA-01653错误的常见原因,通常是因为表空间不足,无法自动扩展。根据引用中的资料,比如引用[2]和[5]都提到了表空间大小不足的问题,并且引用[5]还给出了增加数据文件的方法。 接下来,我需要按照步骤来分析和解决。第一步应该是确认表空间的使用情况,用户需要知道USERS表空间当前的数据文件、已用空间和剩余空间。可以查询DBA_DATA_FILES和DBA_FREE_SPACE,或者使用EM Express查看图形界面,这样更直观。 然后,检查是否启用了自动扩展。有时候数据文件可能没有设置自动扩展,或者虽然设置了但达到了最大限制。需要查看DBA_DATA_FILES的AUTOEXTENSIBLE字段,如果是NO,就需要手动调整。 接下来是解决方案,主要有四个方向:增加数据文件、调整现有数据文件大小、清理空间或迁移表。用户可能需要先尝试增加数据文件,因为这是最直接的方法,如引用[5]中的例子所示。如果现有数据文件还能扩展,调整大小也是个办法。但如果表空间已经很大,或者磁盘空间不足,可能需要考虑清理或迁移。 另外,用户提到的表在USERS表空间,可能需要检查是否有其他对象占用了太多空间,是否有可以清理的临时数据。比如引用[3]中的例子,通过truncate表来释放空间,但要注意备份。如果清理不可行,迁移到其他表空间也是一种选择,但需要确认目标表空间有足够空间,并且操作时注意业务影响。 在预防措施方面,建议定期监控表空间使用情况,设置自动扩展和警报,这样可以在问题出现前采取措施。同时,合理规划存储,避免将所有对象放在同一个表空间,分散存储压力。 用户可能需要具体的SQL命令来执行这些操作,比如ALTER TABLESPACE添加数据文件,或者ALTER DATABASE调整文件大小。同时,迁移表的步骤也需要给出,比如使用ALTER TABLE MOVE命令,并重建索引。 需要提醒用户注意权限问题,执行这些操作可能需要DBA权限。另外,在操作前备份数据,防止意外发生。比如truncate表会删除数据,必须谨慎。 总结起来,步骤应该是确认问题、检查空间和自动扩展设置、选择解决方案(扩空间或清空间),然后实施。同时给出预防方法,避免再次发生。</think>### ORA-01653错误解决方案 #### 问题分析 错误`ORA-01653: unable to extend table WHTMSC.TMP05B7020507B211F0B03C0050569 by 128 in tablespace USERS`表示`USERS`表空间已满,无法为表`TMP05B7020507B211F0B03C0050569`分配额外空间。可能原因包括: 1. 表空间数据文件已满且未启用自动扩展[^2][^5] 2. 数据文件已启用自动扩展但磁盘空间不足[^3] 3. 表空间碎片化严重[^4] --- #### 解决步骤 1. **确认表空间使用情况** ```sql -- 查看USERS表空间的数据文件及剩余空间 SELECT file_name, bytes/1024/1024 AS "当前大小(MB)", maxbytes/1024/1024 AS "最大扩展(MB)", (maxbytes - bytes)/1024/1024 AS "剩余可扩展空间(MB)", autoextensible FROM dba_data_files WHERE tablespace_name = 'USERS'; -- 查看表空间总使用率 SELECT a.tablespace_name, (1 - (b.free_space / a.total_space)) * 100 AS "使用率(%)" FROM (SELECT tablespace_name, SUM(bytes) total_space FROM dba_data_files GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) free_space FROM dba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name AND a.tablespace_name = 'USERS'; ``` 2. **检查自动扩展设置** - 若`autoextensible=NO`,需手动扩展或启用自动扩展 - 若`autoextensible=YES`但`剩余可扩展空间=0`,需增加磁盘空间 3. **解决方案选择** - **方法1:增加数据文件** ```sql ALTER TABLESPACE USERS ADD DATAFILE '/path/to/new_datafile.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 30G; ``` *路径需替换为实际存储路径* - **方法2:调整现有数据文件大小** ```sql ALTER DATABASE DATAFILE '/path/to/existing_datafile.dbf' RESIZE 20G; ``` - **方法3:清理空间** ```sql -- 清理表数据(谨慎操作!) TRUNCATE TABLE WHTMSC.TMP05B7020507B211F0B03C0050569; -- 或删除无用索引 DROP INDEX unused_index_name; ``` - **方法4:迁移表到其他表空间** ```sql ALTER TABLE WHTMSC.TMP05B7020507B211F0B03C0050569 MOVE TABLESPACE NEW_TBS; -- 注意:需重建索引 ``` --- #### 预防措施 1. **监控设置** - 通过OEM或自定义脚本监控表空间使用率,建议阈值设置为80%告警 2. **自动扩展配置** ```sql ALTER DATABASE DATAFILE '/path/to/datafile.dbf' AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED; ``` 3. **定期维护** - 每月分析表空间增长趋势 - 使用`SHRINK SPACE`压缩高水位线[^4] ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值