Как определить MAXSIZE существующего табличного пространства

мне нужно определить MAXSIZE Это было установлено для табличного пространства при его создании (Oracle 10g)

Я уверен, что мне не хватает чего-то очевидного, но информация не сразу проявляется в информации в DBA_TABLESPACES.

5 ответов


В 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 комментарий уместен. Я полагаю, правильным ответом было бы сказать, что максимальный размер табличного пространства-это бессмысленная, почти вымышленная концепция. Размер табличного пространства фактически определяется его файлами данных, а его потенциальный максимальный максимальный размер определяется максимальным количеством файлов данных, которые могут быть назначены. The SQL Reference это сказать по теме:

  • табличное пространство bigfile содержит только один файл данных или tempfile, который может содержать до приблизительно 4 миллиардов (232) блоков. Максимальный размер одного файла данных или tempfile составляет 128 терабайт (ТБ) для табличного пространства с блоками 32K и 32 ТБ для табличного пространства с блоками 8K.
  • табличное пространство smallfile-это традиционное табличное пространство Oracle, которое может содержать 1022 файла данных или tempfile, каждый из которых может содержать до приблизительно 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 вместо создания табличного пространства.


все зависит от того, является ли файл данных автоматически расширяться или нет.

таким образом, вы получаете правильную информацию из DBA_DATA_FILES:

  • Если AUTOEXTENSIBLE имеет значение да, то вам нужна общая сумма MAXBYTES.

  • Если AUTOEXTENSIBLE имеет значение NO, то вам нужна общая сумма байтов.

MAX_SIZE в DBA_TABLESPACES не имеет ничего общего с максимальным размером самого табличного пространства. Согласно Oracle documenation это

"максимальный размер сегментов по умолчанию"

Итак, правильный запрос:

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

Это было протестировано на 11g, но оно также должно работать на 10g. Это дает вам максимальный размер каждого табличного пространства в байтах.

то же самое касается временных табличных пространств:

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

Maxsize является атрибутом dba_data_files


выберите tablespace_name, maxbytes / 1024 / 1024 MAX_SIZE из dba_data_files;


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