Как определить 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;
select tablespace_name, round(sum(bytes)/1024/1024, 2) as free_space from dba_free_space group by tablespace_name;