SQL

Как определить размер таблиц в Oracle?

Сегодня мы покажем, как определить размер таблиц в Oracle.  В любой базе данных, в том числе и в базах данных  Oracle, таблицы являются основными инструментами для сохранения информации. Удобство таблиц неоспоримо: они состоят из столбцов и строк, что обеспечивает удобное чтение располагаемой информации. Однако любая таблица может быть ограничена в размерах, поэтому иногда важно понимать размер  таблицы, чтобы ориентироваться на вероятный объем сохраненной информации.

Не зная размер таблицы, может сложиться такая ситуация, что приложение, которое использует ее для записи, перестает нормально функционировать, потому что просто не может ничего записать.  С базами  Oracle — это довольно частая ситуация, особенно когда используется бесплатная версия этой базы данных. А в бесплатной версии размер таблиц ограничен лицензионным соглашением, а это значит, что рано или поздно, но все равно можно «упереться в потолок».

Как определить размер таблицы  Oracle?

Чтобы определить размер таблицы  Oracle, нужно использовать специальные скрипты, причем их достаточно много вариаций. Самое главное, что нужно знать перед запуском скрипта:

  • с таблицами нужно работать с правами администратора;

  • при вычислении размера таблиц нужно использовать пользователя, под которым работает  «демон» Oracle;

  • в самом скрипте нужно обязательно указывать владельца таблицы.

Скрипт, чтобы узнать размер таблицы  Oracle на 

COLUMN TABLE_NAME FORMAT A32

COLUMN OBJECT_NAME FORMAT A32

COLUMN OWNER FORMAT A10

 

SELECT

   owner, 

   table_name, 

   TRUNC(sum(bytes)/1024/1024) Meg,

   ROUND( ratio_to_report( sum(bytes) ) over () * 100) Percent

FROM

(SELECT segment_name table_name, owner, bytes

 FROM dba_segments

 WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')

 UNION ALL

 SELECT i.table_name, i.owner, s.bytes

 FROM dba_indexes i, dba_segments s

 WHERE s.segment_name = i.index_name

 AND   s.owner = i.owner

 AND   s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')

 UNION ALL

 SELECT l.table_name, l.owner, s.bytes

 FROM dba_lobs l, dba_segments s

 WHERE s.segment_name = l.segment_name

 AND   s.owner = l.owner

 AND   s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION')

 UNION ALL

 SELECT l.table_name, l.owner, s.bytes

 FROM dba_lobs l, dba_segments s

 WHERE s.segment_name = l.index_name

 AND   s.owner = l.owner

 AND   s.segment_type = 'LOBINDEX')

WHERE owner in UPPER('&owner')

GROUP BY table_name, owner

HAVING SUM(bytes)/1024/1024 > 10  /* Игнорируем очень маленькие ячейки*/

ORDER BY SUM(bytes) desc;

 

Этот скрипт считает общий размер таблицы. То есть абсолютно все пространство, которое занято на данный момент и абсолютно свободно. Таким образом с помощью этого скрипта сложно будет разобрать сколько точно места свободно и сколько занято на данный момент.

Если этот скрипт по каким-то причинам вам не подходит или непонятны результаты, которые он выдает, тогда можно воспользоваться еще одним, который также может дать общее понимание о размере базы данных Oracle. Сам скрипт:

SET ECHO OFF;

SET SERVEROUTPUT ON;

DECLARE

  var1 number;

  var2 number;

  var3 number;

  var4 number;

  var5 number;

  var6 number;

  var7 number;

BEGIN

  sys.dbms_space.unused_space('HR', 'EMPLOYEES', 'TABLE', var1, var2, var3, var4, var5, var6,

   var7);

  dbms_output.put_line('Количество сегментных блоков                                     = ' || var1);

  dbms_output.put_line('Количество сегментных байт                                         = ' || var2);

  dbms_output.put_line('Количество блоков, которые свободны                         = ' || var3);

  dbms_output.put_line('Количество  байт, которые свободны                            = ' || var4);

  dbms_output.put_line('Идентификатор документа последнего экстента, который содержит какую-либо информацию   = ' || var5);

  dbms_output.put_line('Идентификатор блока последнего экстента, который содержит какую-либо информацию    = ' || var6);

  dbms_output.put_line('Указать крайний блок в пределах экстента, который содержит какую-либо информацию = ' || var7);

end;

/

SET ECHO ON;

Заключение

 Узнать размер базы данных Oracle непросто, но возможно. То есть специальной какой-то кнопки или функции нет, поэтому приходится пользоваться большими массивными скриптами. Мы представили 2 скрипта на обозрение. Если по каким-то причинам они вам не подходят, тогда можно поискать в сети другие. На специализированных форумах администраторы баз данных Oracle делятся такими скриптами.

Схожие статьи

SQL

Опeратор Between в Oracle SQL: включает границы или нет. Примеры использования

Подключение к базе данных MySQL на Python: создание на SQLite3
SQL

Подключение к базе данных MySQL на Python: создание на SQLite3

SQL

MS SQL: как изменить тип столбца и создать временную таблицу

PostgreSQL: использование и приведение (преобразование) типов
SQL

PostgreSQL: использование и приведение (преобразование) типов