Oracle磁盘空间使用统计

对于大型数据库,Oracle占用的磁盘空间非常大,掌握数据库中那些用户、表占用了多杀磁盘空间,以及增长情况,可以方便日后对磁盘系统进行维护和扩充。

对Oracle磁盘空间使用情况,可以分为按照表空间、用户或者表来进行统计。

(一)、表空间

计算表空间的剩余大小

select A.TABLESPACE_NAME,A.BYTES/(1024*1024*1024) "SPACE(G)", C.BYTES/(1024*1024) "FREE SPACE(M)",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=C.TABLESPACE_NAME;

或者

select tablespace_name, sum(bytes)/(1024*1024*1024) "SPACE(G)" from dba_free_space group by tablespace_name;

(二)、用户

计算每个用户占用的磁盘空间

select owner,sum(bytes)/1024/1024/1024 "Space(G)" from dba_segments group by owner order by 2;

计算某个用户占用的磁盘空间

select owner,sum(bytes)/1024/1024/1024 "Space(G)" from dba_segments where owner=‘LIAOJL‘ group by owner;

(三)、表

Oracle都是以段为存储的,segment_name包含了表、索引、回滚段等,所以在dba_extents,dba_segments都可以找到占用空间大小的信息。

select sum(bytes)/1024/1024 "Space(M)" from dba_extents where owner=‘LIAOJL‘ and segment_name=‘STUDENTS‘;

dba_segments也可以计算表的大小:

select segment_name,bytes/1024/1024 "Space(MB)" from dba_segments where SEGMENT_TYPE=‘TABLE‘ and segment_name=upper(‘你要查找的表的名字‘);

当时上面的写法不完全正确,当表是分区表,dba_segments有多条信息,可改成:

select segment_name,sum(bytes)/1024/1024 "Space(MB)" from dba_segments where segment_name=upper(‘你要查找的表的名字‘);

上述方法对于一个很大的数据库,SQL语句执行起来会很慢,而且消耗数据库资源。Oracle支持对表进行分析,执行分析表操作后可以在dba_tables等系统表中查询表大小、行数等信息,不过这些信息不是实时更新的,可以在数据库空闲时,通过计划任务来更新。

分析SQL方法:

analyze table tab_name compute statistics;

表太大的话可以执行:

analyze table tab_name estimate statistics;

/*SELECT tablespace_name, sum ( blocks ) as free_blk ,

  trunc ( sum ( bytes ) /(1024*1024) ) as free_m,

  max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks

  FROM dba_free_space GROUP BY tablespace_name;*/

/*

* SqlName: obj_seg

* 2006-11-17 By HuiYi

* 查詢對象大小

*/

select owner,sum(bytes)/1024/1024/1024 "Space(G)" from dba_segments group by owner order by 2 desc

col segment_name format a30

col segment_type format a15

col tablespace_name format a10

col bytes heading "Size(M)"

with t as(

select segment_name,owner,owner||‘.‘||segment_name,

segment_type,

tablespace_name,

bytes / 1024 / 1024 bytes

from dba_segments

where owner = upper(‘&user‘)

order by bytes desc

)

select * from t where rownum<10;

时间: 2024-10-12 00:31:35

Oracle磁盘空间使用统计的相关文章

Linux 磁盘空间大小统计du命令常见用法

在 Linux下,可以对某个文件或文件夹所占空间大小进行统计,这里将一些常用用法汇总如下: 1.对指定文件或文件夹进行统计,缺省单位为kbyte(k或千字节),下例对文件夹testa进行统计: [[email protected] ~]$ du -s testa 1589308    testa 2.对文件夹统计的正确做法,如果想知道某个文件夹所占空间的大小,用什么命令?直接用du可以吗? 可以是可以,但是,它会将该文件夹底下所有目录都统计一遍,显然,这不是我们想要的.正确的做法是使用 -s操作

【Oracle 常用查询】oracle表空间使用率统计查询

参考1 --查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '

oracle表空间使用率统计查询

今天发现有一张采样表从1月5号开始不记录数据了,所以想查看一下表空间使用率,在网上零零散散找了很多资料,现在记录如下,也不知道哪一个最准确.还有一个就是网上拷贝的sql代码格式太乱了,不好看,找到一个在线格式化工具. 参考1 --查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使

(转)oracle表空间使用率统计查询

转自:http://www.cnblogs.com/xwdreamer/p/3511047.html 参考文献 文献1:http://blog.itpub.net/24104518/viewspace-730682,字符有格式,需要清理一下 文献2:http://www.cnblogs.com/fengyun627/archive/2009/07/27/1532551.html 文献3:http://blog.csdn.net/hproc/article/details/7372265 sql语

Oracle 表空间

Oracle磁盘空间管理中的最高逻辑层是表空间(TABLESPACE),它的下一层是段(SEGMENT),并且一个段只能驻留在一个表空间内.段的下一层就是盘区,一个或多个盘区(EXTENT)可以组成一个段,并且每个盘区只能驻留在一个数据文件中.如果一个段跨越多个数据文件,它就只能由多个驻留在不同数据文件中的盘区构成.盘区的下一层就是数据块,它也是磁盘空间管理中逻辑划分的最底层,一组连续的数据块可以组成一个盘区. 如果要查询表空间与对应的数据文件的相关信息,可以DBA_DATA_FILES数据字典

df 和du 命令统计磁盘空间不准确

Linux & Unix 中 df 和 du 命令统计磁盘空间数值不一致 经常会使用 df 和 du 分别查看磁盘空闲空间和占用空间,偶尔会发现 df(空闲空间) 会小于磁盘大小减去 du(占用空间). 两个命令实现目的是一样的,但是实现的过程有着本质的区别.就像两个人是到同一个地方,但走不同的路,所以路程的长短也就不同. df 命令的全称是 Disk Free ,显而易见它是统计磁盘中空闲的空间,也即空闲的磁盘块数.它是通过硬盘分配图进行计算出的. du 命令的全称是 Disk Used ,它

oracle 临时表空间 占用磁盘空间

新创建一个临时表空间 tmpa create   temporary   tablespace   TEMPA   TEMPFILE   '/oracle/tmp/tempa01.dbf '   SIZE   8192M   REUSE   AUTOEXTEND   ON   NEXT  1024K   MAXSIZE   UNLIMITED;  2.将默认的临时表空间指定为tmpa alter   database   default   temporary   tablespace   te

oracle的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤

 产生问题的原因主要以下两点: 1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况: 2. 有较大事务没有收缩或者没有提交所导制: 说明:本问题在ORACLE系统管理中属于比较正常的一现象,日常维护多注意对磁盘空间的监控. UNDO表空间介绍 UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Seg

oracle所在磁盘空间不足导致了数据库异常

oracle所在磁盘空间不足导致了数据库异常.需要减小数据文件的大小来解决. 1.检查数据文件的名称和编号 select file#,name from v$datafile; 2.看哪个数据文件所占的空间最大,根据该数据文件的编号查看该数据文件的最大数据块数 select max(block_id) from dba_extents where file_id=8; 查询结果 3.计算该表空间的实际占用空间.(不是物理文件的大小) 查看每个数据块的大小 show parameter db_bl