11

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

我确定我遗漏了一些明显的东西,但这些信息在DBA_TABLESPACES.

4

5 回答 5

11

在 11g 中,此查询将为您提供答案,但我注意到您在 10g 上,可惜有用的列丢失了

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 参考对此主题有这样的说法:

  • 一个大文件表空间只包含一个数据文件或临时文件,最多可包含大约 40 亿 (232) 个块。对于具有 32K 块的表空间,单个数据文件或临时文件的最大大小为 128 TB,对于具有 8K 块的表空间,其最大大小为 32TB。
  • 小文件表空间是传统的 Oracle 表空间,它可以包含 1022 个数据文件或临时文件,每个文件最多可以包含大约 400 万个([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 适用于数据文件而不是表空间。这就是为什么在filespec 子句的文档中而不是在 CREATE TABLESPACE 下讨论 MAXSIZE 关键字的原因。

于 2010-03-02T15:09:14.380 回答
5

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

因此,您可以从 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;
于 2013-11-06T14:46:39.787 回答
0
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;
于 2013-10-11T14:40:23.763 回答
0

maxsize 是 dba_data_files 的一个属性

于 2010-03-02T15:06:53.403 回答
0

select tablespace_name, maxbytes/1024/1024 MAX_SIZE from dba_data_files;

于 2012-02-02T10:18:29.340 回答