powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ALTER TABLE source modify lob(FILE_F) (SHRINK SPACE cascade) и ORA-01578
1 сообщений из 1, страница 1 из 1
ALTER TABLE source modify lob(FILE_F) (SHRINK SPACE cascade) и ORA-01578
    #39522799
Oracle Enterprise 10g. Version 10.2.0.1.0
Windows 2000 Server



Есть таблица SOURCE. Живет в tablespace AM3 .
В таблице есть поле FILE_F типа BLOB, которое живет в tablespace BLOBTBS (больше BLOB-полей в таблице нет).
После удаления примерно 40% данных в таблице осталось около 22 млн. записей.

Необходимо освободить место в tablespace AM3 и BLOBTBS!

Для освобождения места в tablespace делаю SHRINK SPACE

1. Сделал успешно:
Код: plsql
1.
ALTER TABLE source SHRINK SPACE


место в tablespace AM3 освободилось.

2. При выполнении:
Код: plsql
1.
ALTER TABLE source modify lob(FILE_F) (SHRINK SPACE cascade)


Ошибка: [1]: (Error): ORA-01578: ORACLE data block corrupted (file # 78, block # 2272847) ORA-01110: data file 78: 'V:\ORACLE\BLOBTBS\BLOBFILE.0071'

3.
Код: plsql
1.
2.
3.
select SEGMENT_NAME, SEGMENT_TYPE, OWNER
 from dba_extents where file_id = 78 and
2272847 between block_id and block_id + blocks -1



Код: plsql
1.
2.
3.
SEGMENT_NAME               SEGMENT_TYPE  OWNER                         
-------------------------- ------------- ------
SYS_LOB0000052671C00008$$  LOBSEGMENT    ROOT



4. Взял с этого форума скрипт, для проверки содержимого BLOB-поля, после его выполнения - ошибок НЕ найдено:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DECLARE
N              number; 
source_file_f  blob;
error_1578     exception;
pragma exception_init(error_1578, -1578);

BEGIN

  for T1 in (select SOURCE.rowid as source_rowid from SOURCE) LOOP 
            
  select SOURCE.file_f into source_file_f from SOURCE where SOURCE.rowid = T1.source_rowid; 

    begin N := dbms_lob.instr(source_file_f, hextoraw('889911'));
     exception 
      when error_1578 then 
      insert into ROWID1 values(T1.source_rowid); commit;
    end;

  end LOOP;

END;



Собственно вопрос: как найти где живут битые блоки и как от них избавиться???
Прошу помощи, куда копать???
Спасибо.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ALTER TABLE source modify lob(FILE_F) (SHRINK SPACE cascade) и ORA-01578
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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