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

dbstalker, 23 сентября

У всех (у меня так точно) администраторов появляется легкая ( или совсем даже не легкая?) паника при появлении сообщения об ошибке 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 до момента повреждения.

Больше читайте здесь и здесь.

1 комментарий

Прокоментировать

McZim
1 октября 2010 г. в 23:58

Так же регулярно нужно просматривать возможность восстановления, ключевая фраза reviwe. Это поможет оградить вас от невозможности восстановить базу или ТП, например из-за отсутствия необходимого архив лога.

 

Новый комментарий

Я не спамер: введите суму 1+7



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум