Мне нужно определить MAXSIZE
, который был установлен для табличного пространства, когда он был создан (Oracle 10g)
Я уверен, что мне не хватает чего-то очевидного, но информация не сразу проявляется в информации в DBA_TABLESPACES
.
Мне нужно определить MAXSIZE
, который был установлен для табличного пространства, когда он был создан (Oracle 10g)
Я уверен, что мне не хватает чего-то очевидного, но информация не сразу проявляется в информации в DBA_TABLESPACES
.
В 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 есть что сказать по теме:
Итак, возможно, это более полезный запрос...
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.
Все зависит от того, является ли файл данных авторасширяемым или нет.
Итак, вы получаете правильную информацию из 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;
Maxsize - это атрибут dba_data_files
выберите имя табличного пространства, 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;