17мар ORA-01578: ORACLE data block corrupted (file # , block # ) и Recovery Manager

Сегодня получено в журнале оповещения сообщение "ORA-01578: ORACLE data block corrupted (file # 2, block # 1028472)". Что делать и куда бежать?

Так как на сервере стоит ORA10g, то оказывается можно восстановить только поломаный блок.

Используя, Enterprise manager (стартует emctl start dbconsole), создали задание для RMAN на восстановление блока:Maintenance-Perform Recovery - Object Level Recovery - Block Recovery -Data blocks may be recovered using one of the following methods -Datafiles. Затем нужно указать поврежденный файл данных и номер блока (эта информация может быть почерпнута из журнала оповещений (alert_mydb.log)

Задание было запущено на выполнение. Начался накат архивных журнальных файлов. Вот Вам кусочек из алерта:


alter database recover datafile list clear
Mon Mar 17 10:35:23 2008
Completed: alter database recover datafile list clear
Mon Mar 17 10:35:23 2008
Starting block media recovery
Mon Mar 17 10:35:25 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23865_646597233.dbf
Mon Mar 17 10:35:27 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23866_646597233.dbf
Mon Mar 17 10:35:29 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23867_646597233.dbf
Mon Mar 17 10:35:32 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23868_646597233.dbf
Mon Mar 17 10:35:34 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23869_646597233.dbf
Mon Mar 17 10:35:36 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_23870_646597233.dbf
Mon Mar 17 10:35:37 2008

.....
Mon Mar 17 11:13:31 2008
Media Recovery Log /mnt/raid5/oracle/archive/1_24944_646597233.dbf
Mon Mar 17 11:13:32 2008
Completed block media recovery

И что приятно: база открыта, народ пашет в поте лица. Вот протокол какой приготовил RMAN:


Recovery Manager: Release 10.2.0.1.0 - Production on ???? ???°N? 17 10:35:17 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> 
connected to target database: mydb (DBID=1345620281)
using target database control file instead of recovery catalog

RMAN> 
echo set on


RMAN> run {
2> blockrecover datafile 2 block 1028472;
3> }
Starting blockrecover at 17.03.08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=198 devtype=DISK

channel ORA_DISK_1: restoring block(s) from datafile copy /mnt/raid5/flash_recovery_area/mydb/datafile/o1_mf_undotbs1_3sndfzv4_.dbf

starting media recovery
media recovery complete, elapsed time: 00:38:16

Finished blockrecover at 17.03.08


RMAN> exit;

Recovery Manager complete.

цитата из статьи "Oracle9i. Обзор некоторых новых возможностей"

Особого внимания заслуживает новая возможность Recovery Manager – восстановление отдельного блока файла данных. Раньше одним из стандартных способов восстановления при обнаружении поврежденного (corrupted) блока было копирование файла, содержащего этот блок, из резервной копии и применение к нему архивных и оперативных журналов. Это требовало как минимум перевода поврежденного табличного пространства в автономный режим на время копирования файла, что приводило к недоступности части данных на довольно длительный срок. Теперь Recovery Manager может извлечь из резервной копии только поврежденный блок, выполнить его восстановление при помощи журналов и записать восстановленный блок в файл данных. В этом случае временно недоступными оказываются только данные в поврежденном блоке.

а вот еще хорошее предложение на странице http://www.oszone.net/4747/

Убеждение № 8: разрушенный блок требует удаления объекта

Консультанты IT боятся сообщения об ошибке Oracle ORA-1578: "Oracle data block corrupted" (Блок данных Oracle разрушен). Внутренняя структура одного из блоков базы данных перестала быть правильной. Сообщение идентифицирует ошибочный блок по номеру файла и номеру блока. Для “лечения” проблемы нужно выполнить запрос типа:

SELECT owner, segment_name, segment_type 
FROM dba_extents 
WHERE file_id = 
AND BETWEEN block_id AND block_id + blocks - 1; 

где < номер_файла> и < номер_блока> являются числами из сообщения об ошибке. Этот запрос укажет, какой объект содержит разрушенный блок. После этого, в зависимости от типа объекта, восстановление является либо прямым (для индексов и временных сегментов), либо трудным (для таблиц), либо очень трудным (для активных сегментов отката и частей словаря данных).

Однако, в Oracle 9i Enterprise Edition новая команда диспетчера восстановления (RMAN) – BLOCKRECOVER – может восстановить блок на месте, не удаляя, а затем повторно создавая вовлеченный объект. После регистрации в RMAN и соединения с целевой базой данных наберите:

BLOCKRECOVER DATAFILE BLOCK ; 

При выполнении резервного копирования в RMAN обновляется новое представление, V$DATABASE_BLOCK_CORRUPTION, и блок должен быть внесен в список, как испорченный, для последующего выполнения BLOCKRECOVER. Чтобы восстановить все блоки, которые были отмечены как испорченные, может быть использована следующая последовательность RMAN:

BACKUP VALIDATE DATABASE; 
BLOCKRECOVER CORRUPTION LIST; 

Этот подход эффективен, если в восстановлении нуждаются только несколько блоков. При крупномасштабном разрушении (повреждении) более эффективно восстановить (restore) предшествующее “изображение” файла данных, и затем восстановить (recover) весь файл данных в его первоначальном (перед разрушением) состоянии. Как и для любой новой возможности, тщательно проверьте ее перед использованием для промышленной базы данных.

Успехов Вам в труде!

Комментарии (0)



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

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 0 + 0
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению


Разделы блога



Последние публикации



Последние коментарии