Восстановление поврежденного блока средствами RMAN

У всех (у меня так точно) администраторов появляется легкая ( или совсем даже не легкая?) паника при появлении сообщения об ошибке Oracle ORA-1578: “Oracle data block corrupted” (Блок данных Oracle разрушен).

Об этой ошибке на блоге есть несколько статей. Суть их сводится к тому, что сначала нужно найти объект, которому принадлежит сбойный блок. Это можно сделать, выполнив следующий запрос:

SELECT owner, segment_name, segment_type
FROM dba_extents
WHERE file_id = FILE#
AND BETWEEN block# AND block_id + blocks - 1;
где, FILE# и block#  получаем из сообщения об ошибке.

После того, как узнали, какому объекту принадлежит сбойный блок, определяемся с дальнейшими действиями. Они описаны в нескольких постах блога.

 Но есть еще один интересный вариант.

В Oracle 9i Enterprise Edition появилась новая команда диспетчера восстановления (RMAN) – BLOCKRECOVER. С помощью этой команды можно восстановить блок в работающей базе без манипуляций с самим поврежденным объектом.

Когда мы выполняем резервное копирование RMAN-ом, обновляется представление V$DATABASE_BLOCK_CORRUPTION, содержащее перечень испорченных блоков.

Можно также использовать команду

BACKUP VALIDATE DATABASE;

По этой команде RMAN не делает бекап базы данных, но читает все блоки и проверяет их на повреждение. Если находятся поврежденные блоки, то информация о них попадает в V$DATABASE_BLOCK_CORRUPTION

Если информация о блоке находится в этом представлении, то командой BLOCKRECOVER его можно восстановить.

rman target /   (или rman target sys/пароль@строка_коннекта) 
RMAN> BLOCKRECOVER DATAFILE хх BLOCK yy;  

Чтобы восстановить все блоки, информация о которых находится в V$DATABASE_BLOCK_CORRUPTION, можно после команды BACKUP VALIDATE DATABASE использовать команду:

BLOCKRECOVER CORRUPTION LIST;

Мои рекомендации: сделайте проверку базы данных командой BACKUP VALIDATE DATABASE; регулярной. Поставьте в шедулер. Тогда RMAN обнаружит поврежденные блоки раньше, чем это сделают приложения. И гораздо раньше, чем вы удалите последнюю несбойную резервную копию. У вас будет время спокойно исправить ошибку. К тому же сбойный блок не попадет в вашу очередную резервную копию.

P.S. Если восстановления требуют много блоков, то полезнее восстанавливать поврежденный файл данных сначала командой restore (так восстанавливается последний Image Copies) и затем командой recover до момента повреждения.

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8523 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Восстановление базы данных на ...
Восстановление базы данных на ... 4662 просмотров Tue, 21 Nov 2017, 13:31:33
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Oracle: как переделать Primary...
Oracle: как переделать Primary... 1508 просмотров Игорь Воронов Fri, 11 Jun 2021, 16:10:44
Печать
Войдите чтобы комментировать

1dz аватар
1dz ответил в теме #8836 6 года 5 мес. назад
Даааа! Большое спасибо! Удалось избавиться от ошибки Oracle ORA-1578: “Oracle data block corrupted” и восстановить блоки в базе данных Oracle!!!
apv аватар
apv ответил в теме #8584 6 года 8 мес. назад
спасибо за статью! все отлично рамсказано про восстановление блоков базы данных Oracle.