我需要确定在MAXSIZE
创建表空间时为其设置的值(Oracle 10g)
我确定我遗漏了一些明显的东西,但这些信息在DBA_TABLESPACES
.
我需要确定在MAXSIZE
创建表空间时为其设置的值(Oracle 10g)
我确定我遗漏了一些明显的东西,但这些信息在DBA_TABLESPACES
.
在 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 参考对此主题有这样的说法:
所以也许这是一个更有用的查询......
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 关键字的原因。
这完全取决于数据文件是否可自动扩展。
因此,您可以从 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;
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;
maxsize 是 dba_data_files 的一个属性
select tablespace_name, maxbytes/1024/1024 MAX_SIZE from dba_data_files;