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

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

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

Ответ 1

В 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 Reference есть что сказать по теме:

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

Ответ 2

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

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

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

  • Если AUTOEXTENSIBLE установлен на NO, вам потребуется общая сумма BYTES.

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. Он дает максимальный размер каждого табличного пространства в байтах.

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

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

Ответ 3

Maxsize - это атрибут dba_data_files

Ответ 4

выберите имя табличного пространства, maxbytes/1024/1024 MAX_SIZE из dba_data_files;

Ответ 5

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