Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Shrink space  [new]
alwan
Member

Откуда:
Сообщений: 54
Решил посмотреть как работает фича SHRINK SPACE для таблиц. И столкнулся с таким моментом:
SQL> create table todel_shrink_tst2 (id number, txt varchar2(4000)); -- создаем сильно фрагментированную таблицу

Table created.

SQL> begin
  2  for i in 1..100
  3  loop
  4  insert /*+ APPEND_VALUES */ into todel_shrink_tst2 values (i,i||'   '||i);
  5  commit;
  6  end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select blocks from dba_segments  where segment_name = 'TODEL_SHRINK_TST2';

    BLOCKS
----------
       128

SQL> alter table TODEL_SHRINK_TST2 enable row movement;

Table altered.

SQL> ALTER table TODEL_SHRINK_TST2 SHRINK SPACE; -- на этом моменте я ожидал дефрагментации таблицы

Table altered.

SQL> select blocks from dba_segments  where segment_name = 'TODEL_SHRINK_TST2'; -- но, как я понял, были просто отрезаны пустые блоки от последнего экстента, и остались первый экстент и 100 блоков с 1 строкой в каждом.

    BLOCKS
----------
       108

SQL> delete TODEL_SHRINK_TST2 where id=2; -- удаляем одну запись

1 row deleted.

SQL> commit;

Commit complete.

SQL> ALTER table TODEL_SHRINK_TST2 SHRINK SPACE; -- а вот после удаления одной строки запрос отработал почти как и предполагалось, но все равно не полная дефрагментация произошла

Table altered.

SQL> select blocks from dba_segments  where segment_name = 'TODEL_SHRINK_TST2';

    BLOCKS
----------
        16

SQL> ALTER table TODEL_SHRINK_TST2 move; -- мув отрабатывает как и ожидалось

Table altered.

SQL> select blocks from dba_segments  where segment_name = 'TODEL_SHRINK_TST2';

    BLOCKS
----------
         8

SQL> select  * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for HPUX: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production


Повторил те же действия на другой бд (EE 12.2.0.1.0) - результат 1в1. То есть такое поведение, видимо, штатно и должно как-то объясняться. Функция интересна, так как не инвалидирует индексы и таблица доступна для DML на время самой дефрагментации.
Можете пнуть в нужную сторону, куда читать?
29 июн 18, 12:21    [21530966]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить