Как определить MAXSIZE существующего табличного пространства - PullRequest
11 голосов
/ 02 марта 2010

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

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

Ответы [ 5 ]

10 голосов
/ 02 марта 2010

В 11g этот запрос даст вам ответ, но я замечаю, что вы набрали 10g, и увы полезный столбец отсутствует .

select tablespace_name, max_size 
from dba_tablespaces
/

В 10 г вам придется

select tablespace_name
       , initial_extent + (next_extent * (max_extents-1)) as calc_max_size
from dba_tablespaces 
/

Помните, что это максимальный размер по умолчанию . На практике вы будете ограничены размером файлов данных, назначенных табличному пространству, который может быть намного меньше этого теоретического максимума.

редактировать

@ Комментарий Павла уместен. Я полагаю, что правильным ответом было бы сказать, что максимальный размер табличного пространства - это бессмысленная, по сути, почти вымышленная концепция. Размер табличного пространства фактически определяется его файлами данных, а его потенциальный максимальный максимальный размер определяется максимальным количеством файлов данных, которые могут быть назначены. Справочник по SQL имеет следующее высказывание по теме:

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

4 голосов
/ 06 ноября 2013

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

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

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

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

MAX_SIZE в DBA_TABLESPACES не имеет ничего общего с максимальным размером самого табличного пространства. Согласно документации 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;
0 голосов
/ 11 октября 2013
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;
0 голосов
/ 02 февраля 2012

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

0 голосов
/ 02 марта 2010

Максимальный размер является атрибутом dba_data_files

...