Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
Здравствуйте!

При попытке научиться RMAN на тестовом сервере (был сделан impdp, перевод в archivelog) вываливаются поврежденные блоки (corrupt block) из-за которых RMAN не выполняется.

Замечания:
1. Это не физические повреждения (смарт винта цел, полную проверку сделал)
2. Поврежден только индексный сегмент (все поврежденные блоки в табл. прост-ве IBD_IDX.ORA)
3. backup validate check logical database; и blockrecover corruption list; - не помогает, потому что блоки еще до архивлога были.
4. Поврежденные блоки и содержащиеся в них объекты найдены, но как пересоздать объект именно в том же блоке?
5. Перенос/пересоздание индексов результата не дает (почти см. ниже)
6. Есть фишка, которая указывает сколько можно пропустить поврежд. блоков (max corrupt blocks), но хотелось бы пофиксить.
7. Oracle 10.2.0.1, WinXP SP3

Мои действия:
1). Запуск РМАН.
rman nocatalog
connect target intel/core
backup database format 'd:\oracle\rman_backup\rman_%d_%U.bus';

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/30/2010 16:33:14
ORA-19566: exceeded limit of 0 corrupt blocks for file D:\ORACLE\ORADATA\IBD_IDX.ORA

2). Кусок с alert_log
Data in bad block:
 type: 138 format: 7 rdba: 0x600000a2
 last change scn: 0x432e.0002016a seq: 0x7c flg: 0xbb
 spare1: 0x0 spare2: 0x6 spare3: 0x402
 consistency value in tail: 0x280a9401
 check value in block header: 0x18
 block checksum disabled
Reread of blocknum=92768, file=D:\ORACLE\ORADATA\IBD_IDX.ORA. found same corrupt data
Reread of blocknum=92768, file=D:\ORACLE\ORADATA\IBD_IDX.ORA. found same corrupt data
Reread of blocknum=92768, file=D:\ORACLE\ORADATA\IBD_IDX.ORA. found same corrupt data
Reread of blocknum=92768, file=D:\ORACLE\ORADATA\IBD_IDX.ORA. found same corrupt data
Reread of blocknum=92768, file=D:\ORACLE\ORADATA\IBD_IDX.ORA. found same corrupt data

3). Нахождение блоков:
select * from v$database_block_corruption
order by 2;
     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         8      92296          2                  0 CORRUPT
         8      92432          5                  0 CORRUPT
         8      92616          1                  0 CORRUPT
         8      92624          1                  0 CORRUPT
         8      92672          1                  0 CORRUPT
         8      92696          4                  0 CORRUPT

105 rows selected.

select file#, block#, blocks, corruption_change#, marked_corrupt, corruption_type from v$backup_corruption order by block#;
     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# MAR CORRUPTIO
---------- ---------- ---------- ------------------ --- ---------
         8      92752          4                  0 YES CORRUPT
         8      92752          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# MAR CORRUPTIO
---------- ---------- ---------- ------------------ --- ---------
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT

630 rows selected.

SELECT owner, segment_name, segment_type 
FROM dba_extents 
WHERE file_id = 8 
AND 92768 BETWEEN block_id AND block_id + blocks - 1;
SEGMENT_NAME => I_DTU_DT_IDX, SEGMENT_TYPE => INDEX, TABLESPACE_NAME => IBD_IDX

4). Теперь надо DROP/CREATE INDEX (или переместить в др. табл. прос-во индексы), но по идее в тех же блоках, но как фиг его знает. Поэтому просто пересоздал 1 из них.

автор
Если сегмент означен как индексный, проблема решается очень быстро. Поскольку все табличные данные, требуемые для восстановления индекса, являются полностью доступными, следует удалить (drop) и воссоздать (create) этот индекс (блок будет переформатирован, когда он из списка свободных блоков востребуется для пересоздания индекса).

Так и сделал, удалил - создал заново.

5). Запросы в п.3 дают такие же ответы, кроме последнего запроса.
SELECT owner, segment_name, segment_type 
FROM dba_extents 
WHERE file_id = 8 
AND 92768 BETWEEN block_id AND block_id + blocks - 1;
no rows return

6). РМАН также не идет. Индексы создались в новых блоках, а старые хоть и пустые, но битые...

--------------------------------------------------------------------------------------------------
Прошу помочь правильно создать индекс (в нужном блоке данных по идеи 92768) или др. решение.
Спасибо
2 авг 10, 16:09    [9194885]     Ответить | Цитировать Сообщить модератору
 Re: Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
IvaSteel,

чтобы запросы из пункта три давали другие результаты, зановог запустите
backup validate check logical database;
ну или по конкретному файлу
автор
6). РМАН также не идет. Индексы создались в новых блоках, а старые хоть и пустые, но битые...

вы только один индекс поправили
2 авг 10, 16:17    [9194998]     Ответить | Цитировать Сообщить модератору
 Re: Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
XCB
Member

Откуда:
Сообщений: 727
автор
6). РМАН также не идет. Индексы создались в новых блоках, а старые хоть и пустые, но битые...

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

ошибкок в объектах сейчас нет, если вам чемто мешают эти блоки просто создайте объекты в данном табличном пространстве тоторые эти блоки и займут тем самым перезаписав и устранив логические ошибки
2 авг 10, 16:20    [9195032]     Ответить | Цитировать Сообщить модератору
 Re: Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
pravednik
Хм... да, вроде проделывал пораньше... но еще раз запущу для верности.

И почему запросы показывают битые блоки? Это значит, что индексы пересоздались все-таки не в тех блоках?
select * from v$database_block_corruption order by 2;

select file#, block#, blocks, corruption_change#, marked_corrupt, corruption_type from v$backup_corruption order by block#;


Как проверка пройдет, отпишу результат...
2 авг 10, 16:21    [9195048]     Ответить | Цитировать Сообщить модератору
 Re: Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
XCB
автор
все верно, эти блоки будут записаны при необходимости (рост какого то объекта или создание нового) и пометка от том что они повреждены будет снята

Хм... понял, т.е, когда дойдет время до заполнения этих блоков отметки автоматически снимутся...

автор
ошибкок в объектах сейчас нет, если вам чемто мешают эти блоки просто создайте объекты в данном табличном пространстве тоторые эти блоки и займут тем самым перезаписав и устранив логические ошибки

Я пробовал создать просто таблицу и заполнил ее данными со словаря... правда, вроде это было до CREATE INDEX...


Интересно, помог бы в этом случае dbms_repair и/или DBV?


А пока поработаю над Вашими замечаниями и отпишу результат, большое спасибо за быстрые ответы :)
2 авг 10, 16:27    [9195143]     Ответить | Цитировать Сообщить модератору
 Re: Логические повреждения - Corrupt blocks (при RMAN на тестовом сервере)  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
Итак-с, забыл отписать о моих действиях...

1) Вычислил все объекты в поврежденных блоках (было 3 индекса). Их дропнул и создал в др. табл. пространстве.

2) Заполнил таблич. пространство миллионами записей для перезаписи битых блоков командой:
create table corrupt_pers tablespace ibd_idx as select * from ibd.i_pers;

3) Проверил целосность БД:
backup validate check logical database;

4) Запустил РМАН (ура! пошел без ошибок, но после 30 ГБ дампа закончилось место на винте :) , так что буду сегодня-завтра цеплять дополнительный винт, чтобы нормально бекап сделать)
rman nocatalog
connect target intel/core
backup database format 'd:\oracle\rman_backup\rman_%d_%U.bus';

5) Пока нет винта, проверил ради интереса (как оказалось не зря) наличие битых блоков:
select * from v$database_block_corruption
order by 2;
SQL> select * from v$database_block_corruption order by 2;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         8      91984          1                  0 CORRUPT
         8      91992          1                  0 CORRUPT
         8      92000          1                  0 CORRUPT
         8      92016          1                  0 CORRUPT

SQL> 

6) Оказывается в этих блоках, к удивлению, появилась созданная мною таблица (для перезаписи пустых битых блоков):
SELECT owner, segment_name, segment_type 
FROM dba_extents 
WHERE file_id = 8 
AND 91984 BETWEEN block_id AND block_id + blocks - 1;
OWNER     SEGMENT_NAME      SEGMENT_TYPE
-------     ---------------    --------------
IBD          CORRUPT_PERS       TABLE

7) Удалил таблицу и запустил проверку целосности БД:
drop table IBD.CORRUPT_PERS;
backup validate check logical database;

8) Вот и сказочке конец! Битых блоков нет :)
SQL> select * from v$database_block_corruption order by 2;

no rows selected

9) Когда винт одену отпишу действия РМАН... надеюсь проблем с блоками не будет.
Потому что тревожит еще вот этот запрос.... :
select file#, block#, blocks, corruption_change#, marked_corrupt, corruption_type from v$backup_corruption order by block#;
     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# MAR CORRUPTIO
---------- ---------- ---------- ------------------ --- ---------
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92760          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT
         8      92768          4                  0 YES CORRUPT

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# MAR CORRUPTIO
---------- ---------- ---------- ------------------ --- ---------
         8      92768          4                  0 YES CORRUPT

760 rows selected.

Почему результат 760 строк, тогда как было 630? Хоть эти данные ничем и не мешают, но что они показывают? сколько всего битых блоков было за всю историю БД? и можна ли обнулить ее.....?

Спасибо!
9 авг 10, 12:30    [9233520]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить