powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / erase and shrink lob
1 сообщений из 1, страница 1 из 1
erase and shrink lob
    #39415388
Paranoiac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Кто может подсказать по данному вопросу
:
Был создан тестовый лоб в отдельном таб. пространстве(база 12с)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
create tablespace test_lob_shrink datafile '*******' size 100M autoextend on next 100M maxsize unlimited 
extent management local autoallocate segment space management auto;


create table test_ers_lob(id number(20),cl clob) tablespace test_lob_shrink lob(cl) store as basicfile;
declare
begin
  for i in 1..10000 loop
    insert into test_ers_lob values(i,rpad('*',5000,'*'));
    end loop;
    commit;
    end;

   До удаления данных:
    
    select sum(bytes)/1024/1024 from dba_extents where segment_name='SYS_LOB0000225468C00002$$';--80 MB --120после erase и cascade 86 после shrink lob
     select sum(bytes)/1024/1024 from dba_extents where segment_name='TEST_ERS_LOB';-- 0,625

   declare
   clo clob;
   len number(38);
   begin
      for i in (select * from test_ers_lob where id<5000 for update)
        loop
          clo:=i.cl;
          len:=dbms_lob.getlength(clo);
         dbms_lob.erase(clo,len);
          end loop;
          end;

После удаления 

select sum(bytes)/1024/1024 from dba_extents where segment_name='SYS_LOB0000225468C00002$$';--120 MB После удаления  и cascade 86 после shrink lob
     select sum(bytes)/1024/1024 from dba_extents where segment_name='TEST_ERS_LOB';-- 0,625

потом делалось 

alter table test_ers_lob enable row movement;  
alter table test_ers_lob shrink space cascade;

и ALTER TABLE test_ers_lob MODIFY LOB (CL) (SHRINK SPACE);

select sum(bytes)/1024/1024 from dba_extents where segment_name='SYS_LOB0000225468C00002$$';--120 MB после shrink space cascade и  86 MB после shrink lob
select sum(bytes)/1024/1024 from dba_extents where segment_name='TEST_ERS_LOB';-- 0,625

    select tablespace_name,used_space*8/1024,tablespace_size*8/1024/1024,used_percent from dba_tablespace_usage_metrics where lower(tablespace_name)='test_lob_shrink';
 --1	TEST_LOB_SHRINK	81,6875	31,9999847412109	0,249290585179608 - после заливки данных
--1	TEST_LOB_SHRINK	122,125	31,9999847412109	0,372696100566912 - после удаления
--1	TEST_LOB_SHRINK	122,125	31,9999847412109	0,372696100566912 - после shrink space cascade
--1	TEST_LOB_SHRINK	88,25	31,9999847412109	0,269317755373838 - после ALTER TABLE test_ers_lob MODIFY LOB (CL) (SHRINK SPACE); 



Вопрос, shrink space cascade так и не работает до сих по LOB?(ибо меньше не уменьшилось после него)
Откуда появились 40 Mb,я знаю,что undo хранятся в самом LOB,но тут-то просто затираются данные или я чего не знаю про erase
Ну и наконец,почему у меня LOB после затирки данных не уменьшается,да и свободное место не появляется,вообще ничего,в итоге он стал весить даже больше на 8 метров.
Кто может пояснить?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / erase and shrink lob
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]