我想查一下数据库表空间使用情况。求来一个语句却发现USED和FREE加起来和TOTAL居然对不上。请各位高人指点一下。  SELECT   A.TABLESPACE_NAME,A.BYTES   TOTAL,B.BYTES   USED,   C.BYTES   FREE
  FROM   SYS.SM$TS_AVAIL   A,SYS.SM$TS_USED   B,SYS.SM$TS_FREE   C    
  WHERE   A.TABLESPACE_NAME=B.TABLESPACE_NAME   AND   A.TABLESPACE_NAME=C.TABLESPACE_NAME
          AND A.TABLESPACENAME = '表空间名';      另外,假如我只有以下这些表的访问权限,能不能查到指定表空间的使用情况呢?
    DBA_EXTENTS
    DBA_DATA_FILES
    DBA_TAB_PARTITONS
    DBA_TAB_SUBPARTITONS 
    DBA_OBJECTS
 

解决方案 »

  1.   

    used与free加起来与TOTAL对不上,也没有什么奇怪的.那是因为:在INSERT 或者 UPDATE时,所使用了的空间,并不会在DELETE 或 UPDATE时都被ORACLE系统回收.
    只有当DELETE 或UPDATE时,如果由此操作而空闲的空间足够让新记录进入数据库时,ORACLE才会自动回收空间,并更新一些相关的数据字典.所以,你查出来USED与FREE相加与TOTAL不相符,也没有什么奇怪的.
      

  2.   

    有dba_tablespaces权限该如何查询呢,救急,没有空试了。
    谢谢各位。
      

  3.   

    语句:
    SELECT owner,segment_name,SUM(bytes)/1024/1024 FROM dba_extents
     WHERE tablespace_name='表空间名'   
    GROUP BY owner,segment_name
    ORDER BY 3 DESC 
      

  4.   

    还有一点 dba_tablespaces 中查到的MAX_EXTENTS不就是表空间最大可扩展容量吗?和SYS.SM$TS_AVAIL中查到的字节数也对不上啊。我接触Oracle没多久,问的问题有些初级,哪位高手给个答案救急下啊。决定再加40分了。