Сегодня мы покажем, как определить размер таблиц в 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