问题 如何确定现有表空间的MAXSIZE


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

我确信我遗漏了一些明显的东西,但信息并没有立即显示在信息中 DBA_TABLESPACES


4400
2018-03-02 15:00


起源



答案:


在11g这个查询会给你答案,但我注意到你在10g和唉 缺少有用的列

select tablespace_name, max_size 
from dba_tablespaces
/

在10克你将不得不

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

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

编辑

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

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

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

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

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

编辑2

MAXSIZE适用于数据文件而不是表空间。这就是为什么在中讨论MAXSIZE关键字的原因 filespec子句的文档 而不是在CREATE TABLESPACE下。


10
2018-03-02 15:09



似乎对我不起作用。第一件事是next_extent为null,所以只做了initial_extent * max_extents,但max_extents似乎总是MAXINT(2147483645)(并且表空间不是用MAXSIZE无限制创建的) - The Archetypal Paul
我不希望分配给它的当前空间。我需要在创建时使用MAXSIZE指定的大小。我不认为这是毫无意义的 - 可能是Oracle会拒绝将表空间扩展到MAXSIZE以外。 - The Archetypal Paul
@Paul - Oracle将拒绝将表空间扩展到其当前分配的数据文件的边界之外(因为autoextend已关闭,或文件系统已满,或者您已达到为数据文件指定的MAXSIZE)。 - APC
谢谢 - 我错过了MAXSIZE是一个数据文件而不是表空间的东西 - The Archetypal Paul


答案:


在11g这个查询会给你答案,但我注意到你在10g和唉 缺少有用的列

select tablespace_name, max_size 
from dba_tablespaces
/

在10克你将不得不

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

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

编辑

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

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

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

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

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

编辑2

MAXSIZE适用于数据文件而不是表空间。这就是为什么在中讨论MAXSIZE关键字的原因 filespec子句的文档 而不是在CREATE TABLESPACE下。


10
2018-03-02 15:09



似乎对我不起作用。第一件事是next_extent为null,所以只做了initial_extent * max_extents,但max_extents似乎总是MAXINT(2147483645)(并且表空间不是用MAXSIZE无限制创建的) - The Archetypal Paul
我不希望分配给它的当前空间。我需要在创建时使用MAXSIZE指定的大小。我不认为这是毫无意义的 - 可能是Oracle会拒绝将表空间扩展到MAXSIZE以外。 - The Archetypal Paul
@Paul - Oracle将拒绝将表空间扩展到其当前分配的数据文件的边界之外(因为autoextend已关闭,或文件系统已满,或者您已达到为数据文件指定的MAXSIZE)。 - APC
谢谢 - 我错过了MAXSIZE是一个数据文件而不是表空间的东西 - The Archetypal Paul


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

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

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

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

DBA_TABLESPACES中的MAX_SIZE与表空间本身的最大大小无关。根据 Oracle文档 它是

“段的默认最大大小”

所以正确的查询是:

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;

4
2017-11-06 14:46





Maxsize是dba_data_files的一个属性


0
2018-03-02 15:06



它不是Oracle 10g中dba_data_files的一个属性,据我所知(有一个maxbytes),它不是数据文件的最大大小,而不是表空间? - The Archetypal Paul
@Paul - 看我修改后的回复。从根本上说,罗伯特是对的:tablsepace大小是数据文件大小的乘积。 - APC
对不起,我不清楚。该属性称为maxbytes。当您查看oracle的ER图时:表空间由一个或多个数据文件组成,数据文件具有属性maxbytes。因此,表空间的maxsize是该表空间中数据文件的最大字节数之和。 - Robert Merkwürdigeliebe
具有maxsize = unlimited的两个数据文件的表空间是否包含比具有maxsize = unlimited的一个数据文件的表空间更多的数据。 ;-) - Robert Merkwürdigeliebe


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


0
2018-02-02 10:18





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

0
2017-10-11 14:40