本人用得oracle的版本是9.2.0.4.0 操作系统是linux
在查询表空间的时候用sql语句查询的结果是1G
语句如下:select 
              b.file_id 文件号,
              b.TABLESPACE_NAME 表空间名,
              b.bytes 字节数,
           (b.bytes-sum(nvl(a.bytes,0)))  已使用,
              sum(nvl(a.bytes,0))   剩余空间,
           sum(nvl(a.bytes,0))/(b.bytes)*100  剩余百分比
              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
用oracle自带的工具查确是1.7G
请问我该以哪一个为准?
为什么?

解决方案 »

  1.   

    一般来用说有sql语句准些!说明:用oracle工具查的时候,可能会把表空间中实际未使用的磁盘空间没有计算在内!
      

  2.   

    要理解 oracle中是怎样存储数据的
     Oracle以一个扩展块为单位为段分配空间。当一个已存的段中的扩展块满了的时候,Oracle为这个段分配另一个扩展块。因为分配扩展块是必要的,而在磁盘上一个段的扩展块可以也可以不连续。
          段和它的所有扩展块存储在一个表空间中。在表空间中,一个段能够包括来自不同文件中的扩展块;也就是说,段可以扩展数据文件。然而,每个扩展块只能够容纳来自一个数据文件的数据。
          尽管你能够分配增加的扩展块,但是这些数据块本身的分配是独立的。如果你给一个实例分配了一个扩展块,这些数据块立即分配到自由列表。然而,如果这个扩展块不是分配给一个实例,那么这些数据块本身仅在高水印(high water )改变时才被分配。这个高水印是段中使用的和未使用得的空间之间的边界。