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
Code language: SQL (Structured Query Language) (sql)
  • Определим сколько места занимают схемы, для этого выполним следующий запрос:
 SELECT OWNER,
   SUM(BYTES) SIZE_BYTES
 FROM DBA_SEGMENTS
 GROUP BY OWNER;Code language: SQL (Structured Query Language) (sql)

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

OWNERSIZE_BYTES
SYS2064187392
SCOTT327680

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

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 DESCCode language: SQL (Structured Query Language) (sql)
OWNERSIZE_BYTES
SYS1.921875 GB
SCOTT320 KB

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

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

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