如何确定现有表空间的MAXSIZE

时间:2010-03-02 15:00:11

标签: oracle oracle10g tablespace

我需要确定在创建表空间时为其设置的MAXSIZE(Oracle 10g)

我确信我遗漏了一些显而易见的事情,但DBA_TABLESPACES中的信息并未立即显示这些信息。

5 个答案:

答案 0 :(得分:10)

在11g这个查询会给你答案,但我注意到你在10g和唉the useful column is missing

select tablespace_name, max_size 
from dba_tablespaces
/

在10g中你必须

select tablespace_name
       , initial_extent + (next_extent * (max_extents-1)) as calc_max_size
from dba_tablespaces 
/

请记住,这是默认最大尺寸。实际上,您将受到分配给表空间的数据文件大小的限制,这可能比理论上的最大值小得多。

修改

@Paul的评论是恰当的。我想正确的答案是说表空间的最大大小是一个毫无意义的,实际上几乎是虚构的概念。表空间的大小实际上由其数据文件确定,其潜在的最大最大大小由可分配的最大数据文件数决定。 SQL Reference就此主题发表了这样的话:

  • bigfile表空间只包含一个数据文件或临时文件,最多可包含大约40亿(232)个块。对于具有32K块的表空间,单个数据文件或临时文件的最大大小为128太字节(TB),对于具有8K块的表空间,最大大小为32TB。
  • 一个小文件表空间是一个传统的Oracle表空间,它可以包含1022个数据文件或临时文件,每个数据文件或临时文件最多可以包含大约4百万个([2的功率为2]块)。

所以也许这是一个更有用的查询......

select tablespace_name
       , count(*) as no_of_data_files
       , sum(maxblocks) as max_size
from dba_data_files
group by tablespace_name
/

......但需要注意的是,它仅适用于当前分配的数据文件。

编辑2

MAXSIZE适用于数据文件而非表空间。这就是为什么在documentation for the filespec clause而不是在CREATE TABLESPACE下讨论MAXSIZE关键字的原因。

答案 1 :(得分:4)

这完全取决于数据文件是否可自动扩展。

因此,您可以从DBA_DATA_FILES获取正确的信息:

  • 如果AUTOEXTENSIBLE设置为YES,则需要MAXBYTES的总和。

  • 如果AUTOEXTENSIBLE设置为NO,则需要BYTES的总和。

DBA_TABLESPACES中的 MAX_SIZE与表空间本身的最大大小无关。根据{{​​3}},它是

  

“段的默认最大大小”

所以正确的查询是:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE
from   DBA_DATA_FILES
group  by TABLESPACE_NAME;

这已在11g上测试过,但它也适用于10g。它为您提供每个表空间的最大大小(以字节为单位)。

TEMP表空间也是如此:

select TABLESPACE_NAME, sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE
from   DBA_TEMP_FILES
group  by TABLESPACE_NAME;

答案 2 :(得分:0)

Maxsize是dba_data_files

的属性

答案 3 :(得分:0)

从dba_data_files中选择tablespace_name,maxbytes / 1024/1024 MAX_SIZE;

答案 4 :(得分:0)

select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;