
ORA-01653 Oracle数据库system表空间耗尽问题
系统表空间溢出
发布日期:2021-05-14 17:49:26
浏览次数:47
分类:精选文章
本文共 2322 字,大约阅读时间需要 7 分钟。
Oracle 数据库连接缓慢或报错解决方案
现象
数据库连接缓慢或报错,错误信息通常如下:
- ORA-00604: 线程递归 SQL 级别 1 出错
- ORA-01653: 无法将表_SYS.AUD$ 展开至 8192 KB
- ORA-02002: 管理审计日志时发生错误
此外,可能会有多次重复出现类似错误,表明系统表空间已耗尽空间。
原因
- 系统表空间(
system
)默认大小为 64MB,可以自动扩展至 32GB,但如果表空间接近限制或已被填满,可能导致问题。 - 原因分析:
- 业务数据存放在
system
表空间。 - Oracle 审计功能启用后,审计日志会占用大量系统表空间,导致空间不足。
- 业务数据存放在
解决方式
1. 数据迁移
- 将业务数据迁移至其他不影响重要业务的表空间,避免对
system
表空间造成压力。
2. 清理审计日志
- 对于
sys.aud$
表清理旧记录,必须在SYS
管理员账号下执行以下命令:truncate table sys.aud$;
- 注意:清理日志会影响审计功能,需谨慎决定是否重启数据库。
3. 查询表空间使用情况
- 使用以下 SQL 获取各表空间的使用情况,包括可扩展和已扩展空间:
set linesize 150set pagesize 500column file_name format a65column tablespace_name format a25column top_no_extend format a13column top_extend format a10column free_extend format a11column used format a8column used_extend format a11select f.tablespace_name AS "表空间名称", ROUND((d.sumbytes / 1073741824), 2) || 'GB' AS "未扩展空间", ROUND(((d.sumbytes + d.extend_bytes) / 1073741824), 2) || 'GB' AS "扩展空间", ROUND((f.sumbytes + d.Extend_bytes) / 1073741824, 2) || 'GB' AS "剩余空间", ROUND((d.sumbytes - f.sumbytes) / 1073741824, 2) || 'GB' AS "已使用空间", ROUND(((d.sumbytes - f.sumbytes) * 100 / (d.sumbytes + d.extend_bytes)) * 100, 2) || '%' AS "使用率"from (select tablespace_name, sum(bytes) sumbytes, sum(extend_bytes) extend_bytes from (select nvl(case when autoextensible = 'YES' then (maxbytes - bytes) else 0 end, 0) extend_bytes, tablespace_name, bytes from dba_data_files where tablespace_name Is Not Null group by tablespace_name) d, (select tablespace_name, sum(bytes) sumbytes from dba_free_space group by tablespace_name) fwhere f.tablespace_name = d.tablespace_nameorder by used_extend desc;
4. 关闭数据库审计
- 关闭审计功能可以有效减少日志占用空间,方法如下:
- 查看当前审计状态:
show parameter audit;
- 修改数据库参数:
alter system set audit_trail=none scope=spfile;
- 重启数据库:
shutdown immediate;startup;
- 验证审计状态:
show parameter audit;
- 查看当前审计状态:
改进建议
1. 永久关闭审计
- 如果不需要审计功能,可以永久关闭。修改
Oracle
相关数据库的SPFile
文件:alter system set audit_trail=none scope=spfile;
再次重启数据库即可生效。
2. 增加系统表空间
- 如果系统表空间无法扩展到最大值,可以增加其初始大小:
alter system set systemondisksize change 32GB;
重启后可查看新大小:
show parameter systemondisksize;
3. 优化审计日志配置
- 调整审计日志的保留策略,避免日志文件过大占用空间。
alter system set audit_trail_max_extended=0;
4. 定期性能监控
- 部署监控工具(如
Oracle Enterprise Manager
)定期监控表空间使用情况,及时发现异常。
总结
通过将业务数据迁移至其他表空间、清理审计日志、关闭审计功能以及优化系统资源配置,可以有效解决数据库连接缓慢或表空间问题。建议定期监控系统资源,避免类似问题再次发生。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月14日 02时45分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【自考】之信息资源管理(一)
2019-03-12
C# 文本框限制大全
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
ionic4 路由跳转传值
2019-03-12
ionic4 接收API数据库传值并显示
2019-03-12
CSDN 怎么写出好看的博客
2019-03-12
ENDC含义
2019-03-12
Java基本概念:方法
2019-03-12
ciscn_2019_n_3 题解
2019-03-12
pwn题shellcode收集
2019-03-12
OWASP Top 10 2017 学习笔记
2019-03-12
Linux安装软件时出现软件包不满足依赖关系libxx
2019-03-12
使用docker搭建nfs实现容器间共享文件 nfs server nfs client
2019-03-12
CURL 发送请求详解
2019-03-12
python中的序列化
2019-03-12