Oracle查询表空间

原创 2015年11月20日 16:37:09

    在项目长期的运行的情况下,数据会不断地增长,为保证业务及数据的正常运行与存储,需要保证数据库表有足够的空间对数据进行存储。

    在Oracle中,对于表空间的划分,Oracle使用了一种类似于Linux的mount的形式,需要时则分配一块存储空间挂载至某个表空间(附:表空间即某些表可以使用的存储空间大小)上。举个例子:相信大家应该见过大学食堂的大妈买粉面的情景,她们会把一撮撮的面分开来,当我们需要时间打卡付钱那么就给你煮一撮。Oracle的表空间分配就是这个道理,Oracle会以自己的方式将磁盘按一定的方式划分为“一块块”的,每一块的空间通常大小都是固定的4GB,这在Oracle中称之为“文件”,当某个表空间不足的时候,你只需要分配一个文件,然后将其分配给某个表空间即可。

    上边所说了这么一堆就是为了弄清楚一个道理,就是当使用SQL语句来查询Oracle的表空间时,不应该以“文件”为最小粒度,因为一个表空间可能会挂有非常多的文件,那么部分文件满了,而其它一部分没有满,这个道理不必多说,被误导判断,只要不小心就会是很容易的事。比如下面这个SQL,就是不合适的:

select b.file_id as "文件ID号", b.tablespace_name as "表空间名", 
b.bytes as "字节数",(b.bytes-sum(nvl(a.bytes,0))) as "已使用",
sum(nvl(a.bytes,0))as "剩余空间",sum(nvl(a.bytes,0))/(b.bytes)*100 as "剩余百分比" 
from dba_free_space a,dba_data_files b where a.file_id=b.file_id 
group by b.tablespace_name,b.file_id,b.bytes order by b.file_id

    这就是一个最小粒度是文件的栗子,百度会查到很多,如果被误导,那么就该醒醒了。下面给出应该使用的表空间查询方式:

MB版:

select 
       b.tablespace_name as "表空间名",
       count(distinct b.file_id) as "挂载文件数",
       (sum(nvl(b.bytes, 0)) - sum(nvl(a.bytes, 0))) / (1024 * 1024) as "已使用兆字节数",
       sum(b.bytes) / (1024 * 1024) as "表空间总兆字节数",
       sum(nvl(a.bytes, 0)) / (1024 * 1024) as "剩余空间",
       sum(nvl(a.bytes, 0)) / sum(nvl(b.bytes, 0)) * 100 as "剩余百分比"
from (select tablespace_name,file_id,sum(bytes) bytes from dba_free_space group by tablespace_name,file_id
) a
,dba_data_files b
 where b.file_id = a.file_id(+)
 group by b.tablespace_name
 order by b.TABLESPACE_NAME desc

GB版:
select 
       b.tablespace_name as "表空间名",
       count(distinct b.file_id) as "挂载文件数",
       (sum(nvl(b.bytes, 0)) - sum(nvl(a.bytes, 0))) / (1024 * 1024 * 1024) as "已使用吉比特数",
       sum(b.bytes) / (1024 * 1024 * 1024) as "表空间总吉比特数",
       sum(nvl(a.bytes, 0)) / (1024 * 1024 * 1024) as "剩余空间",
       sum(nvl(a.bytes, 0)) / sum(nvl(b.bytes, 0)) * 100 as "剩余百分比"
from (select tablespace_name,file_id,sum(bytes) bytes from dba_free_space group by tablespace_name,file_id
) a
,dba_data_files b
 where b.file_id = a.file_id(+)
 group by b.tablespace_name
 order by b.TABLESPACE_NAME desc

    当然,除了SQL,那么,如果你的远程机器是Win的,且安装了Oracle的客户端,那么就可以使用Oracle自带的 Enterprise Manager Console 工具(打开时会弹出一个Java的一个Fram,但是不用管),最好使用带有DBA权限的用户登录,在存储目录下选择表即可直接查看表空间大小。是不是很直观?哦,对了,用工具和上边的SQL语句的区别是,SQL不会查询出Temp临时表空间,但是工具里面会有。当然你还可以使用这个工具来分配表空间,可干的事很多,在于你是否花时间去干一把。
版权声明:本文为博主原创文章,未经博主允许不得转载。

oracle查询表空间大小

  • 2014年05月12日 19:38
  • 49KB
  • 下载

ORACLE查询表空间大小

  • 2014年10月11日 12:06
  • 314B
  • 下载

回收站引发ORACLE查询表空间使用缓慢

一个哥们问我 ,他们查询 表空间使用率 跑了一个多小时,这个太坑爹了,让我 帮忙优化一下。 SQL语句如下 select * from ( select ts.tablespa...

在Oracle中查询表的大小、表的占用情况和表空间的大小

有两种含义的表大小。一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数: select segment_name, bytes from user_segment...
  • cuker919
  • cuker919
  • 2013年01月17日 17:00
  • 34546

oracle查询表空间名称和对应的数据文件

发现磁盘空间写的有点满,闲着无事,看看看哪个表空间写的数据比较多,进入到oracle的datafile目录 [root@06RZRQ-YLY fstest]# ll -h ?荤.?.5.2...

Oracle中查询表的大小和表空间的大小

有两种含义的表大小。一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数: select segment_name, bytes  from user_segment...

在Oracle中查询表的大小、表的占用情况和表空间的大小

有两种含义的表大小。一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数: select segment_name, bytes  from user_segment...

Oracle查询表空间使用情况

--查询表空间使用情况   SELECT UPPER(F.TABLESPACE_NAME) "表空间名",   D.TOT_GROOTTE_MB "表空间大小(M)",   D.TOT_GROO...

Oracle查询表空间使用情况

Oracle查询表空间使用情况  --查询表空间使用情况   SELECT UPPER(F.TABLESPACE_NAME) "表空间名",   D.TOT_GROOTTE_MB "表空间大小(M...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle查询表空间
举报原因:
原因补充:

(最多只允许输入30个字)