我需要确定在创建表空间时为其设置的MAXSIZE
(Oracle 10g)
我确信我遗漏了一些显而易见的事情,但DBA_TABLESPACES
中的信息并未立即显示这些信息。
答案 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就此主题发表了这样的话:
所以也许这是一个更有用的查询......
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的总和。
“段的默认最大大小”
所以正确的查询是:
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;