powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
35 сообщений из 35, показаны все 2 страниц
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39505995
Всем доброго времени суток.

Собственно сам вопрос в заголовке темы.
Вот какие данные есть:
Код: plsql
1.
select * from v$database_block_corruption;


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
FILE#              BLOCK#             BLOCKS                           CORRUPTION_CHANGE#             CORRUPTIO       CON_ID
-------------------------------------- -------------------------------------- --------------------------------------------------- 
84                    	49422       	1                               	0                            ALL ZERO  	0
84	                49203  	        1                                	0                            ALL ZERO  	0
87	                1012613	        7                               	0                            ALL ZERO  	0
87	                1012726	        1                               	0                            ALL ZERO  	0
87	                1012669	        1                               	0                            ALL ZERO  	0
84	                49196  	        1                                	0                            FRACTURED	0
84	                49198  	        1                                 	0                            ALL ZERO  	0
84	                49200  	        2                                 	0                            ALL ZERO  	0
84	                49420  	        1                                	0                            FRACTURED	0



Эти блоки появились в результате выхода из строя одного диска в RAID10, во время подмены его на Hot Spare Disk. Соответсвенно резервная копия не сделалась (БД в режиме archivelog, копия холодная). Были пару ошибок, оторые указывали на плохие блоки в таблицах. Их починить получилось, благо есть копия, где все в порядке.
Но вот с этими блоками просто беда. Дело в том, что это LOBSEGMENT, принадлежность к таблицам я определил.
Так же с помощью RMAN выполнял следующую последовательность команд:
Код: plsql
1.
2.
3.
1. list failure;
2. advise failure;
3. blockrecover datafile ... block ...



В документации говориться, что это должно привести к починке блоков и как результат, возможность создания резервной копии.
Однако, если потом запускать validate по проблемным файлам количество блоков либо остается прежним, либо уменьшается, либо увеличивается. Для меня не совсем понятная ситуация. Причем при выполнении blockrecover каких либо ошибок на экран не выводится.

Посему прошу помощи Гуру Oracle в разрешении данного вопроса.
Прошу строго не судить, с такой ситуацией сталкиваюсь первый раз и делая по книжке нужного результата не получаю.
Заранее всем спасибо за помощь.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506051
опс...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей ЛуневОднако, если потом запускать validate по проблемным файлам количество блоков либо остается прежним, либо уменьшается, либо увеличивается
Блоки другие потом в списке ?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506053
опс...,

Если Вы имеете ввиду результат запроса
Код: plsql
1.
select * from v$database_block_corruption;

, то другие тоже попадают в список. Потом после проведения действий по восстановлению могут уйти, а могут остаться.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506065
опс...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оперативка или raid-контроллер
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506071
опс...оперативка или raid-контроллер

Перед этим была замена сбойного диска в RAID10. После замены все это хозяйство проработало ровно 5-6 часов, а потом этот же диск вылетел снова. В тех поддержке рекомендовали вытащить RAID-контроллер, чтобы сбросить статус диска и вставить снова. Эквалайзинг и ребилд прошел нормально, но это опять помогло только на некоторое время.

Так что я тоже склоняюсь к тому, что это виноват сам массив дисковый. Нужна замена контроллера, скорее всего, но поддержка тянет с этим что-то.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506352
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Лунев Соответсвенно резервная копия не сделалась (БД в режиме archivelog, копия холодная).
Вы бэкап как делаете rman' ом ?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506397
Aliona,

Да, RMAN. резервная копия холодная. Пока время позволяет. Но планирую переходить на горячее резервирование. БД находится в режиме archivelog.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506838
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы уверены, что в бэкапе эти блоке "хорошие" ?
Возможно, что и там они corrupt.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506898
Taciturn12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А при создании нового бэкапа он вопит о наличие сбойных блоков или проходит? У меня была ситуация когда после восстановления блоков информация о том, что они сбойные в представлении v$database_block_corruption осталась, хотя чтение данных из них проходило без проблем и новый бэкап выполнялся.
Есть возможность принудительно очистить это представление, но затем нужно обязательно либо провести валидацию файлов либо выполнить новый бэкап. Очистка блока в контрольнике отвечающего за хранение информации о сбойных блоков выполняется командой dbms_backup_restore.resetCfileSection(35);
Подробней про это можно прочитать например здесь
В данной ситуации этот способ может понадобиться уже после решения проблем с дисковой подсистемой. Ну и проверьте предположение из предыдущего сообщения о повреждении самого бэкпа.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506923
AlionaА вы уверены, что в бэкапе эти блоке "хорошие" ?
Возможно, что и там они corrupt.

Backup нормальный, сбойных блоков нет. Было проверено путем разворачивания на тестовой схеме и проведения валидации БД.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506926
Taciturn12А при создании нового бэкапа он вопит о наличие сбойных блоков или проходит? У меня была ситуация когда после восстановления блоков информация о том, что они сбойные в представлении v$database_block_corruption осталась, хотя чтение данных из них проходило без проблем и новый бэкап выполнялся.
Есть возможность принудительно очистить это представление, но затем нужно обязательно либо провести валидацию файлов либо выполнить новый бэкап. Очистка блока в контрольнике отвечающего за хранение информации о сбойных блоков выполняется командой dbms_backup_restore.resetCfileSection(35);
Подробней про это можно прочитать например здесь
В данной ситуации этот способ может понадобиться уже после решения проблем с дисковой подсистемой. Ну и проверьте предположение из предыдущего сообщения о повреждении самого бэкпа.

Вся беда в том, что все в этих блоках располагаются LOBSEGMENT-ы. Как их забороть ума не приложу. Куда копать, не знаю.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506928
Товарищи, подскажите как лечить эти сегменты и, если их нельзя вылечить, то как удалить?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506930
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Лунев,

Восстановление из бакапа и накат логов до текущего состояния - не предлагать?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506938
env,

Думаю что нет, потому что времени прошло уже предостаточно. Простой будет большим.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506945
При таком запросе:
Код: 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.
set lines 200 pages 10000
col segment_name format a30

SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#
, greatest(e.block_id, c.block#) corr_start_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1)
- greatest(e.block_id, c.block#) + 1 blocks_corrupted
, null description
FROM dba_extents e, v$database_block_corruption c
WHERE e.file_id = c.file#
AND e.block_id <= c.block# + c.blocks - 1
AND e.block_id + e.blocks - 1 >= c.block#
UNION
SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#
, header_block corr_start_block#
, header_block corr_end_block#
, 1 blocks_corrupted
, 'Segment Header' description
FROM dba_segments s, v$database_block_corruption c
WHERE s.header_file = c.file#
AND s.header_block between c.block# and c.block# + c.blocks - 1
UNION
SELECT null owner, null segment_type, null segment_name, null partition_name, c.file#
, greatest(f.block_id, c.block#) corr_start_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1)
- greatest(f.block_id, c.block#) + 1 blocks_corrupted
, 'Free Block' description
FROM dba_free_space f, v$database_block_corruption c
WHERE f.file_id = c.file#
AND f.block_id <= c.block# + c.blocks - 1
AND f.block_id + f.blocks - 1 >= c.block#
ORDER BY file#, corr_start_block#;



Результат такой:
OWNER SEGMENT_TYPE SEGMENT_NAME PARTITION_NAME FILE# CORR_START_BLOCK# CORR_END_BLOCK# BLOCKS_CORRUPTED DESCRIPTION
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012613 1012619 7
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012620 1012620 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012669 1012670 2
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012672 1012675 4
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012676 1012676 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012726 1012726 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012728 1012731 4
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012732 1012732 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012780 1012780 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012781 1012787 7
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012788 1012788 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012836 1012836 1
USER LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012837 1012843 7
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012844 1012844 1
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012892 1012892 1
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012893 1012899 7
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012900 1012900 1
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1012956 1012956 1
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1013004 1013004 1
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1013005 1013011 7
IBS LOBSEGMENT SYS_LOB0000225532C00005$$ 87 1013012 1013012 1
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39506955
Код: plsql
1.
2.
3.
4.
SELECT * 
          FROM dba_lobs 
         WHERE owner='IBS'
           AND segment_name='SYS_LOB0000225532C00005$$';



Вот такой результат:
OWNER TABLE_NAME COLUMN_NAME SEGMENT_NAME TABLESPACE_NAME INDEX_NAME CHUNK
--------------------------------------------------------------------------------------------------------------------------------------------------------
IBS Z#BC_ATTACH_FILE C_FILE_DATA SYS_LOB0000225532C00005$$ T_USR SYS_IL0000225532C00005$$ 8192

Как узнать номер записи? Может ее просто удалить и все?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507301
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Лунев,

сюда не смотрел?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507348
trace.logАндрей Лунев,

сюда не смотрел?

Смотрел. Процедура:
Код: 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.
set serverout on
		exec dbms_output.enable(100000);
		declare
		 error_1578 exception;
		 pragma exception_init(error_1578,-1578);
		 n number;
		 cnt number:=0;
		 badcnt number:=0;
		begin
		  for cursor_lob in
		        (select rowid r, [color=red]MY_COLUMN [/color]L from [color=red]MY_TABLE[/color])
		  loop
		    begin
		      n:=dbms_lob.instr(cursor_lob.L,hextoraw('AA25889911'),1,999999) ;
		    exception
		     when error_1578 then
		       dbms_output.put_line('Got ORA-1578 reading LOB at '||cursor_lob.R);
		       badcnt:=badcnt+1;
		    end;
		    cnt:=cnt+1;

		  end loop;
		  dbms_output.put_line('Scanned '||cnt||' rows - saw '||badcnt||' errors');
		end;
		/


Возвращает пустое значение, т.е. не могу определить ROWID.
Для меня непонятна эта строка
Код: plsql
1.
dbms_lob.instr(cursor_lob.L,hextoraw('AA25889911'),1,999999) ;

, а именно вот эта часть hextoraw('AA25889911').
И еще читал, что hextoraw может некорректно отрабатывать, можно использовать utl_raw.cast_to_varchar2('AA25889911').
Пока мысли кончились на этом. Были проблемы с плохими блоками, но ROWID определялось без особых трудностей.
И еще такой вопрос, если ROWID определить, то удалить записи ORACLE даст вне зависимости плохой блок или нет. До этого случая просто не приходилось этого делать.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507391
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Лунев,

а версия какая?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507404
trace.log,

12.1.0.2.0
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507533
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Лунев,
а такой вариант:

Код: sql
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.
declare
error_1578 exception;
error_1555 exception;
error_22922 exception;
pragma exception_init(error_1578,-1578);
pragma exception_init(error_1555,-1555);
pragma exception_init(error_22922,-22922);
num number;
begin
for cursor_lob in (select rowid r, &&lob_column from &table_owner..&table_with_lob) loop
begin
num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ;
exception
when error_1578 then
insert into corrupt_lobs values (cursor_lob.r, 1578);
commit;
when error_1555 then
insert into corrupt_lobs values (cursor_lob.r, 1555);
commit;
when error_22922 then
insert into corrupt_lobs values (cursor_lob.r, 22922);
commit;
end;
end loop;
end;
/


...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507550
trace.log,

Я это тоже нашел, сейчас отрабатывает.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39507563
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Луневtrace.log,

Я это тоже нашел, сейчас отрабатывает.

отпишитесь по результату, интересно.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39508291
Еще, такой вопрос, глупый правда, но тем не менее. RMAN очень долго восстанавливает блоки. Сессия подвисает, в чем может быть проблема?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39508376
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЛуневЕще, такой вопрос, глупый правда, но тем не менее. RMAN очень долго восстанавливает блоки. Сессия подвисает, в чем может быть проблема?
Rman должен все бэкапы перечитать, это долго, если бэкапов много.
Сессия подвисает - это как?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39508381
Sheriffua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Лунев,

какое кол-во каналов открыто для Rman-а?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39508406
Sheriffua,


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Starting recover at 21-AUG-17
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4

channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00087
....



Но по факту только один работает (channel ORA_DISK_1). Может "галку" где не поставил?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39508656
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Лунев,
автор1. list failure;
2. advise failure;
3. blockrecover datafile ... block ...

В 12с это должно выглядеть как
list failure;
advise failure;
REPAIR FAILURE;

вероятно blockrecover еще подддерживается, но он deprecated еще с 11g.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509194
Теперь еще вот какой вопрос возник, как экспортировать LOB только по конкретным ROWID? И что будет после импорта? Поломаются ли индексы в LOB-сегментах?
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509231
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЛуневТеперь еще вот какой вопрос возник, как экспортировать LOB только по конкретным ROWID? И что будет после импорта? Поломаются ли индексы в LOB-сегментах?

Код: plsql
1.
2.
3.
4.
$ expdp help=yes | grep -A 2 -E -e QUERY -e WHERE
QUERY
Predicate clause used to import a subset of a table.
For example, QUERY=employees:"WHERE department_id > 10".
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509300
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Лунев,

а сюда смотрели: [ID 833635.1]
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509361
trace.logАндрей Лунев,

а сюда смотрели: [ID 833635.1]

Смотрел, и совсем забыл про это. Спасибо, что напомнили. Уже документов просто пересмотрел.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509364
trace.logАндрей Лунев,

а сюда смотрели: [ID 833635.1]

А по поводу лечения, все прошло удачно. Осталось только недостающие записи вытащить и на место вернуть. Только вот не поломаются ли индексы в LOB? Пока не знаю.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509386
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Луневtrace.logАндрей Лунев,

а сюда смотрели: [ID 833635.1]

А по поводу лечения, все прошло удачно. Осталось только недостающие записи вытащить и на место вернуть. Только вот не поломаются ли индексы в LOB? Пока не знаю.

Это как? Вы же вставите записи и индекс перестроится...На крайняк можно после заливки данных мигрировать лобы с одного табличного пространства в другое.
...
Рейтинг: 0 / 0
Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
    #39509401
trace.logЭто как? Вы же вставите записи и индекс перестроится...На крайняк можно после заливки данных мигрировать лобы с одного табличного пространства в другое.

Не хочется еще раз перемещать LOB, они достаточно большие и долго процесс перемещения идет. ))) А про индексы я на всякий спросил. С LOB-ами не сталкивался при восстановлении.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Corruption blocks со статусом ALL ZERO, FRACTURED. Как исправить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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