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 DESC
Code 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)

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