我是Oracle数据库的新手。我想问一些关于Oracle表空间,特别是用户表空间的问题。我每周都会查看和控制表空间的容量。但是,由于表空间用户增长非常快,因此表空间的大小变得很大。
表空间信息
Tablespace Name Total Size (MB) Used Space (MB) Free Space (MB) Usage (%)
------------------------------ --------------- --------------- --------------- ----------
RBS 6000 311.38 5688.62 5.19
SYSAUX 113000 42662.75 70337.25 37.75
SYSTEM 29000 8568.44 20431.56 29.55
TEMP 34000 34 33966 .1
USERS 154000 103946.94 50053.06 67.5
如何在不丢失业务交易数据的情况下进行清理?
了解USERS中消耗空间的内容非常重要——使用此查询确定消耗空间最多的顶级表
SELECT owner, segment_name, segment_type, sum(bytes)/1024/1024 "Size (MB)"
FROM dba_segments
WHERE tablespace_name = 'USERS'
GROUP BY owner, segment_name, segment_type
ORDER BY 4 DESC;
检查这些表中的数据,看看是否有不必要的数据可以删除或存档
考虑压缩表
中的数据考虑将一些访问频率较低的数据移动到单独的表空间(使用
MOVE
或通过导出数据+删除表+在不同的表空间中创建新表+然后将数据导入)向表空间添加额外的数据文件以增加其大小(临时解决方案)
p。任何清理活动都应该经过彻底的测试和验证,以确保业务事务数据不会丢失——定期执行数据库备份,以确保在出现任何问题时可以恢复数据
虽然Lemonina的答案应该可以帮助您管理USERS表空间,但是SYSAUX表空间太大了,值得研究一下。虽然SYSUAX是"Oracle维护的"。对于表空间,您或DBA确实可以很好地控制那里使用了多少空间。运行这个查询查看哪个Oracle占用者在SYSAUX中使用了最多的空间:
select *
from v$sysaux_occupants
order by space_usage_kbytes desc;
例如,当数据库存储了太多的AWR(活动工作负载存储库)数据时,就会出现一个常见的SYSAUX问题。这些数据对于追踪过去8天的表现非常有用。有些dba希望跟踪更长时间的性能,并将默认保留时间从8天增加到更大的数字,而没有意识到数据将消耗多少空间。
每个不同的SYSUAX "占用者"有不同的方式来更改保留期或刷新旧数据。前面的查询将告诉您在手册中查找哪个占有者,或者您可以运行哪个过程来删除旧数据。