Oracle сколько места занимает схема

Проблема:

  • Как узнать сколько места занимает схема в Oracle.
  • Как определить сколько места занимают таблицы в определенной схеме в Oracle.
  • Как определить сколько места занимает таблица в Oracle.
  • Как определить сколько места занимают индексы в Oracle.
  • Как определить сколько места занимает индекс в определенной схеме в Oracle.

Инструментарий: Oracle 10, Oracle 11

Для определения сколько места занимает объект базы данных — можно воспользоваться представлением DBA_SEGMENTS или USER_SEGMENTS. Разница только в том что в USER_SEGMENTS возвращает описание лишь для текущего пользователя, а не для всей базы данных, и в нем отсутствует колонок: OWNER, HEADER_FILE, HEADER_BLOCK, or RELATIVE_FNO. В принципе можно воспользоваться и представлением DBA_SEGMENTS, только нужно указать OWNER’а, если конечно нужно узнать информацию о конкретной схеме.
Главный запрос от которого мы будим отталкиваться будет выглядеть следующим образом:

SELECT * FROM DBA_SEGMENTS
  • Определим сколько места занимают схемы, для этого выполним следующий запрос:
SELECT OWNER,
  SUM(BYTES) SIZE_BYTES
FROM DBA_SEGMENTS
GROUP BY OWNER;

В результате получим список схем и размер схем:

Результат выполнения запроса
OWNER SIZE_BYTES
SYS 2064187392
SCOTT 327680

Результаты как Вы видите в байтах, перепишем запрос для отображения количества занимаемого пространства схемами удобной для просмотра единице измерения:

SELECT
  OWNER,
  CASE
    WHEN (S.BYTES / 1024 / 1024 / 1024 / 1024) > 1 THEN TO_CHAR(S.BYTES / 1024 / 1024 / 1024 / 1024) || ' PB' --Petabytes
    WHEN (S.BYTES / 1024 / 1024 / 1024 / 1024) > 1 THEN TO_CHAR(S.BYTES / 1024 / 1024 / 1024 / 1024) || ' TB' --Terabyte
    WHEN (S.BYTES / 1024 / 1024 / 1024) > 1 THEN TO_CHAR(S.BYTES / 1024 / 1024 / 1024) || ' GB' --Gigabyte
    WHEN (S.BYTES / 1024 / 1024) > 1 THEN TO_CHAR(S.BYTES / 1024 / 1024) || ' MB' --Megabyte
    WHEN (S.BYTES / 1024) > 1 THEN TO_CHAR(S.BYTES / 1024) || ' KB' --Kilobyte
   ELSE TO_CHAR(S.BYTES) || ' B' --Byte
  END CASE
  FROM (SELECT OWNER,
               SUM(BYTES) AS BYTES
      FROM DBA_SEGMENTS
      GROUP BY OWNER) S
  ORDER BY S.BYTES DESC
Результат выполнения запроса
OWNER SIZE_BYTES
SYS 1.921875 GB
SCOTT 320 KB

Запрос конечно не идеален, но все же позволяет узнать сколько занимает места схема в Oracle.

  • Определим сколько места занимают таблицы в Oracle:
SELECT S.SEGMENT_NAME, S.BYTES
      FROM DBA_SEGMENTS S
WHERE OWNER = '<название схемы>'
  AND S.SEGMENT_TYPE = 'TABLE'
  • Определим сколько места занимает таблица в Oracle:
SELECT S.BYTES
      FROM DBA_SEGMENTS S
WHERE OWNER = '<название схемы>'
  AND S.SEGMENT_TYPE = 'TABLE'
  AND S.SEGMENT_NAME = '<название таблицы>'
  • Определим сколько места занимает индекс в определенной схеме в Oracle:
SELECT S.BYTES
      FROM DBA_SEGMENTS S
WHERE OWNER = '<название схемы>'
  AND S.SEGMENT_TYPE = 'INDEX'
  AND S.SEGMENT_NAME = '<название индекса>'
  • Определим сколько места занимают индекс в определенной схеме Oracle:
SELECT S.BYTES
      FROM DBA_SEGMENTS S
WHERE OWNER = '<название схемы>'
  AND S.SEGMENT_TYPE = 'INDEX'

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *