Oracle数据文件类型分bigfile(大文件)和smailfile(小文件)
bigfile(大文件):最大可以是4G个数据库块大小 bigfile:4G*block_size=4*1024*1024*1024*block_size
smailfile(小文件):最大可以是4M个数据库块大小 smailfile:4M*block_size=4*1024*1024*block_size但是每次计算总是有小数,那是因为实际最数据文件最大的SIZE比官方提供的少几个块。官方给出解释一般是少一个块,但是实际linux环境下大文件少三个块,小文件少了两个块。我百度非官方说是系统用了,但是不知道是不是。下面是测试语句:
--创建大数据文件测试create bigfile tablespace csb datafile 'E:\APP\ZHANKY\ORADATA\ZHANKY\csb' size 1M autoextend on next 1m;
--查询差几个块(select c.bigfile,
(c.max_data-a.maxbytes)/c.block_size
from dba_data_files a,
--根据表空间类型、和数据库块大小算出单个数据文件最大多少G
(select tablespace_name,block_size,bigfile,
case bigfile
when 'YES' then
4 *1024 * 1024 * 1024 * block_size
when 'NO' then
4 * 1024 * 1024 * block_size
end max_data
from dba_tablespaces) c
where a.tablespace_name = c.tablespace_name and a.tablespace_name in ('CSB','SYSTEM') )
各路大神发表一下意见,求教

解决方案 »

  1.   

    楼主你的少的块数,从哪里查的?试试 dba_data_files
    dba_free_space
      

  2.   


    我是通过查询dba_data_files里面的maxblock来确定单个数据文件一共多少个块。
    官方文档说小文件是4M个块,实际是4M-1个块。所以上面我使用判断如果是小文件就用4m-1-maxblock但是还是多一个
      

  3.   

    你说的是操作系统块应该,但是创建Oracle数据文件之后那个数据文件是按照表空间的逻辑结构来的(段、区、块)。创建文件时指定初始大小,肯定会占用空间,但是这个占用空间应该是已扩展空间。
      

  4.   

    是的,我说的就是小文件表空间里面的单个数据文件的大小。因为(官方文档表示小文件单个数据文件有2^22-1个数据块,减一就是因为由于Oracle的Rowid中使用22位来代表Block号。)
    所以你可以看到 1056768-1048576=8192 刚好一个块的大小。
    其实我想表达的是,官方数据说小文件数据文件最大事4M-1个块,但是实际我们发现4M-1个块算出来比实际的值还大一个8192。