Печать
Категория: Вопросы и ответы Oracle
Просмотров: 41396

Размер занимаемого таблицей табличного пространства можно посмотреть в представлении dba_extents с помощью следующего запроса:

SELECT   owner, segment_name, segment_type,tablespace_name, 
         ROUND(SUM (BYTES) /  1024 / 1024) "SIZE (MB)",
         SUM (blocks) blocks, COUNT (*) extents
    FROM dba_extents
   WHERE owner = ‘HR’ AND segment_name = 'EMPLOYEES' 
         AND segment_type = ‘TABLE’ 
GROUP BY owner, segment_name, segment_type, tablespace_name

Размер таблицы так же можно посмотреть и в представлении dba_extents:

SELECT a.owner "Схема",
       a.table_name "Таблица",
       b.bytes "Размер (Мб)",
       TRUNC((a.blocks * 100) / b.blocks) "Занято(%)",
       b.extents "Экстентов"
FROM dba_tables a,
     (
        SELECT owner, segment_name, sum(bytes)/1024/1024 bytes,
               sum(blocks) blocks, count(*) extents
          FROM dba_extents
         WHERE segment_type = 'TABLE'
      GROUP BY owner, segment_name
     ) b
WHERE a.owner = 'HR' AND a.table_name = 'EMPLOYEES' AND
      a.owner = b.owner AND a.table_name = b.segment_name

Эти два последние запроса можно использовать и для определения размера схемы. Достаточно убрать только лишние столбцы из GROUP BY и WHERE.

Использование пакета sys.dbms_space то же даёт представление о размере таблицы:

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;