вторник, 18 июня 2013 г.

Oracle Database: How to calculate the actual size of a table. Как вычислить размер таблицы в базе данных Oracle

How to calculate the actual size of a table. Как вычислить размер таблицы в базе данных Oracle

Иногда возникает необходимость вычислить размер таблицы в БД Oracle.
Как это сделать?

1. Скомпилируйте следующую функцию в своей БД:

CREATE OR REPLACE FUNCTION
  SYS.RAZMER_TABLICY_RAW(pNazvanie in varchar, pOwner in varchar2)
return number
is
  val number(16);
  sz number(16);
begin
  sz := 0;
  --Определим размер сегментов данных таблицы
  --Calculate size of table data segments
  select
    sum(t.bytes) into val
  from
    dba_segments t
  where
    t.segment_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  dbms_output.put_line('size of table data segments = ' || val);
  sz := sz + nvl(val,0);

  --Определим размер сегментов индексов таблицы
  --Calculate size of table indexes segments
  select
    sum(s.bytes) into val
  from
    dba_indexes t
  inner join
    dba_segments s
  on
    t.index_name = s.segment_name
  where
    t.table_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  dbms_output.put_line('size of table indexes segments = ' || val);
  sz := sz + nvl(val,0);

  --Определим размер blob-полей в таблице
  --Calculate size of table blob segments
  select
    sum(s.bytes) into val
  from
    dba_lobs t
  inner join
    dba_segments s on t.segment_name = s.segment_name
  where
    t.table_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  dbms_output.put_line('size of table blob segments = ' || val);
  sz := sz + nvl(val,0);

  return sz;


end razmer_tablicy_raw;

2. Выполните следующий именованный блок:

pnazvanie - название таблицы
powner - название схемы-владельца таблицы

declare
  result number;
begin
  --Call the function
  result := sys.razmer_tablicy_raw(pnazvanie => 'recon_account_oldstate',
                                   powner => 'dev_oim');
  dbms_output.put_line('table size = ' || result || ' bytes');     
  dbms_output.put_line('table size = ' || result/1024 || ' kb');
  dbms_output.put_line('table size = ' || result/1024/1024 || ' Mb');                            
end;

Комментариев нет:

Отправить комментарий