powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01578: ORACLE data block corrupted
92 сообщений из 92, показаны все 4 страниц
ORA-01578: ORACLE data block corrupted
    #37795087
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, товарищи! В последнее время в приложении стали пропадать очень важные данные.
Суть в том, что в логах приложения появилась ошибка:
авторORA-01578: ORACLE data block corrupted (file # 5, block # 2530356)
ORA-01110: data file 5: 'C:\ORADATA\DB\TKDRM\USERS01.DBF'

Попробовал в РМАНе выполнить восстановление, но похоже у нас не полная версия Оракла...

авторMicrosoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.
C:\Documents and Settings\Администратор>rman
Recovery Manager: Release 10.2.0.4.0 - Production on Tue May 15 13:18:26 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
RMAN> blockrecover datafile 5 BLOCK 2530356;
Starting blockrecover at 15.05.12
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of blockrecover command at 05/15/2012 13:20:35
RMAN-05009: Block Media Recovery requires Enterprise Edition

Подскажите пожалуйста, как исправить проблему?
Oracle 10.2
Windows 2003 R2 x32
Log mode - Archivelog
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795100
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не особо сильно разбираюсь в БД, подскажите пожалуйста на языке чайника...
На сколько я представляю, возникло после сбоев с оперативой или ЖД.
Помогут ли переносы "больной" таблицы в другое табличное пространство или удаление этой таблицы совсем (этот вариант ужасен)
Просто дальнейшая работа приложения в таком виде неприемлема и через пару дней меня подвесят за одно место...
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795105
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
select segment_name, segment_type, owner
       from dba_extents
      where file_id = 5
        and 2530356 between block_id
            and block_id + blocks -1;


NagirНа сколько я представляю, возникло после сбоев с оперативой или ЖД.
не обязательно.
NagirПомогут ли переносы "больной" таблицы в другое табличное пространство или удаление этой таблицы совсем (этот вариант ужасен)
Запрос выше подскажет вам, что это за объект. Если таблица, то вы ее не перенесете.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795161
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik
Код: plsql
1.
2.
3.
4.
5.
select segment_name, segment_type, owner
       from dba_extents
      where file_id = 5
        and 2530356 between block_id
            and block_id + blocks -1;



Segment_Type - Table
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795166
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NagirSegment_Type - Table
Бекапы есть ?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795169
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие есть варианты по устранению проблемы?
В принципе, данный блок маловажный. Можно ли как то его удалить?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795176
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nagir,

если есть бэкапы логично
Код: plsql
1.
2.
restore datafile 5;
recover datafile 5;
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795191
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NagirВ принципе, данный блок маловажный.
Вы уже в курсе, что в нем лежит ? ;)

NagirМожно ли как то его удалить?
Можно пометить его "нечитаемым" - DBMS_REPAIR....
Можно вытащить все строки кроме тех, которые в блоке - dbms_rowid
Можно восстановить БД(не всю), вытащить от туда таблицу и заменить ей покореженную.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795219
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kinky catNagir,

если есть бэкапы логично
Код: plsql
1.
2.
restore datafile 5;
recover datafile 5;



Получится, что надо будет применить тот бэкап, который был до крэша этого блока, а всё что было занесено в таблицу после данного бэкапа пропадет?
Ведь, если применить бэкап, например сделанный 5минут назад, то битый блок снова будет присутствовать?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795245
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednikNagirВ принципе, данный блок маловажный.
Вы уже в курсе, что в нем лежит ? ;)
Ну, я в курсе, какие данные хранятся в этой таблице и предполагаю, что потеря одного блока будет не слишком болезненна.

pravednikNagirМожно ли как то его удалить?
Можно пометить его "нечитаемым" - DBMS_REPAIR....
Можно вытащить все строки кроме тех, которые в блоке - dbms_rowid
Можно восстановить БД(не всю), вытащить от туда таблицу и заменить ей покореженную.

Можете, пожалуйста, поподробнее написать про первый вариант
Два следующих варианта, думаю будут намного дольше и сложнее...
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795279
N.Ivankin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nagirkinky catNagir,

если есть бэкапы логично
Код: plsql
1.
2.
restore datafile 5;
recover datafile 5;



Получится, что надо будет применить тот бэкап, который был до крэша этого блока, а всё что было занесено в таблицу после данного бэкапа пропадет?

для этого есть как раз и делается recover.

NagirВедь, если применить бэкап, например сделанный 5минут назад, то битый блок снова будет присутствовать?

Именно
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795309
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednikNagirМожно ли как то его удалить?
Можно пометить его "нечитаемым" - DBMS_REPAIR....
Я еще не знаком на практике с этой функцией. На сколько я представляю, там есть 2 варианта:
DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK

Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795315
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NagirНа сколько я представляю, там есть 2 варианта:
DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK

Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия?
У вас проблемы с чтением официальной документации ?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795357
tim_scn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catNagir,

если есть бэкапы логично
Код: plsql
1.
2.
restore datafile 5;
recover datafile 5;



не логично:)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795476
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednikNagirНа сколько я представляю, там есть 2 варианта:
DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK

Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия?
У вас проблемы с чтением официальной документации ?

У меня проблемы со временем.
Просто проблема очень срочная и я рассчитывал, что быстрее будет спросить у гуру баз данных, чем мне самому разбираться.
В любом случае, спасибо огромное! Вы действительно очень сильно помогли!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795477
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tim_scn,
пожалуй согласен, погорячился
у меня намедни такая трабла была систем.
С обычным таблспейсом врядли стоит ресторить, ну по крайней мере, не в 1ую очередь
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37795559
Nagir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

Выполнил
авторBEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => 'имя_схемы',
OBJECT_NAME => 'имя_таблицы',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.skip_flag);
END;
Всё успешно. Больше битый блок не мешает.
Еще раз огромное спасибо! До новых встреч! :)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37796398
ээээ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NagirВсё успешно. Больше битый блок не мешает.
т.е. данные вас в бд совсем не интересуют, лишь бы ошибок не было ?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37838172
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго время суток!

Анналогичная проблема. Применял FIX_CORRUPT_BLOCK, не помогло. Если я правильно понимаю единственная надежда на бекапы!?


Заранее благодарен!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839359
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как оказалось бекапа нет. Подскажите пожалуйста, есть еще какой нибудь способ востановить битые блоки?

спасибо.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839368
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84Анналогичная проблема.Давай сначала - может быть она тебе только кажется аналогичной.
В каком объекте битый блок?
Как применял dbms_repair?
Что значит "не помогло"?
Что ещё из вышеприведенного пробовал?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839428
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

спасибо что откликнулся!

В этих битых блоках расположено 119 записей. Схема не системная.

Первым делом я попробовал исправить битые блоки с помощю - FIX_CORRUPT_BLOCKS

SQL> SET SERVEROUTPUT ON;
SQL> DECLARE num_fix INT;
2 BEGIN num_fix := 0;
3 DBMS_REPAIR.FIX_CORRUPT_BLOCKS ( SCHEMA_NAME => 'NAME',
4 OBJECT_NAME=> 'STATUSLOG',
5 OBJECT_TYPE => dbms_repair.table_object,
6 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
7 FIX_COUNT=> num_fix);
8 DBMS_OUTPUT.PUT_LINE('num fix: ' || TO_CHAR(num_fix));
9 END;
10 /
num fix: 0

PL/SQL procedure successfully completed.

SQL>
==========================================================
После чего я применил:

BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => 'LEXWEB',
OBJECT_NAME => 'STATUSLOG',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.skip_flag);
END;
/

в итоге я потерял 119 записей, которые лежали в 3 битых блоках.

Собственно больше ничего и не пробовал.

Заранее благодарен!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839465
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84,

1. Как нашёл 119 битых "записей", что это означает?
2. Как сделали repair_table?
3. Что в ней содержалось?
4. И последнее - если уж сделал skip, что теперь не устраивает?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839607
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

1. Как нашёл 119 битых "записей", что это означает?

Было зафиксировано что в таблице перед тем как появились битые блоки было определенное количество записей. После того как применил SKIP_CORRUPT_BLOCKS их стало на 119 записей меньше.

2. Как сделали repair_table?

Этой информации у меня нет. Но я думаю что было использовано DBMS_REPAIR.ADMIN_TABLES. А что тут могут быть какие то нюансы?

3. Что в ней содержалось? этого я тоже не знаю.

4. И последнее - если уж сделал skip, что теперь не устраивает?

Эта таблица с битыми блоками является аудит таблицей. Данные не очень важные но клиент требует востановить их.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839613
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

2. Как сделали repair_table?

если это важный момент......я буду уточнять как она была сделана и что в ней !!!!!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839635
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках??
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839641
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках??
никак)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839642
MacDuck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках??

Как-то так:

About to export specified tables via Conventional Path ...
Current user changed to SPHDB
. . exporting table FWHDBLOT
EXP-00056: ORACLE error 1578 encountered
ORA-01578: ORACLE data block corrupted (file # 5, block # 112676)
ORA-01110: data file 5: '/u12/oradata/SPFHD1/fh_datal01_001.dbf'
Export terminated successfully with warnings.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839747
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof842. Как сделали repair_table?

если это важный момент......я буду уточнять как она была сделана и что в ней !!!!!
Вероятно, я не точно выразился. Меня интересует, откуда взялось содержимое repair_table, которое вы использовали на шаге fix?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839855
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

Насчет repair_table...то мне скрипты по ее созданю не были предоставлены и я понятия не имею как этот тейбл создавался и что в нем внутри. Скажите мне можалуйста если это важный момент для востановления и содержание этой таблицы может повлиять на востановление, я буду уточнять эти моменты и копать в этом направление!?


Заранее благодарен!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839868
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84,

Задам совсем прямой вопрос: ты перед fix_corrupt_block запускал check_object?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839877
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,


да


SQL> SET SERVEROUTPUT ON;
SQL> DECLARE num_corrupt INT;
2 BEGIN num_corrupt := 0;
3 DBMS_REPAIR.CHECK_OBJECT (SCHEMA_NAME => 'name',
4 OBJECT_NAME => 'STATUSLOG',
5 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
6 CORRUPT_COUNT => num_corrupt);
7 DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
8 END;
9 /
number corrupt: 3
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839906
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84даУгу, и после этого fix_corrupt_block вернул 0. Что ж, в отсутствии бэкапов, skip_corrupt_blocks - ваше всё. Для извлечения данных из блоков можно попробовать ещё физически заглянуть в эти блоки и, если совсем невтерпёж и там не полная каша, попытаться вытянуть данные вручную и перевставить их. Но это не для слабонервных...
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839933
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

) Это точно не для слабонервный ))

зарепродюсил я эту ситуацию на своей тестовай базе, вистинг команд приведен ниже.....
=============================================================================

SQL> begin
2 dbms_repair.admin_tables
3 (
4 table_name => 'REPAIR_TABLE',
5 table_type => dbms_repair.repair_table,
6 action => dbms_repair.create_action,
7 tablespace => 'TEST_TBS'
8 );
9 end;
10 /


SQL> descr repair_table;
Name Null? Type
----------------------------------------- -------- ----------------------------
OBJECT_ID NOT NULL NUMBER
TABLESPACE_ID NOT NULL NUMBER
RELATIVE_FILE_ID NOT NULL NUMBER
BLOCK_ID NOT NULL NUMBER
CORRUPT_TYPE NOT NULL NUMBER
SCHEMA_NAME NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
BASEOBJECT_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
CORRUPT_DESCRIPTION VARCHAR2(2000)
REPAIR_DESCRIPTION VARCHAR2(200)
MARKED_CORRUPT NOT NULL VARCHAR2(10)
CHECK_TIMESTAMP NOT NULL DATE
FIX_TIMESTAMP DATE
REFORMAT_TIMESTAMP DATE

SQL>


SQL> SET SERVEROUTPUT ON
SQL> DECLARE
vCorruptBlocks INT := 0;
BEGIN
DBMS_REPAIR.CHECK_OBJECT
( 2 3 4 5
6 SCHEMA_NAME => 'SYS',
7 OBJECT_NAME => 'TEST_TABLE',
8 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
9 CORRUPT_COUNT => vCorruptBlocks
10 );
11 DBMS_OUTPUT.PUT_LINE('Number of blocks corrupted: ' || TO_CHAR (vCorruptBlocks));
12 end;
13 /
Number of blocks corrupted: 1

PL/SQL procedure successfully completed.

SQL>




SQL> column object_name format a10
SQL> column repair_description format a28
SQL> set lines 10000
SQL> SELECT OBJECT_NAME, BLOCK_ID, CORRUPT_TYPE, MARKED_CORRUPT, REPAIR_DESCRIPTION
FROM REPAIR_TABLE; 2

OBJECT_NAM BLOCK_ID CORRUPT_TYPE MARKED_COR REPAIR_DESCRIPTION
---------- ---------- ------------ ---------- ----------------------------
TEST_TABLE 131 6148 TRUE mark block software corrupt

SQL>


SQL> SET SERVEROUTPUT ON
SQL> declare
2 vBlocksFixed INT := 0;
3 begin
4 DBMS_REPAIR.FIX_CORRUPT_BLOCKS
5 (
6 SCHEMA_NAME => 'SYS',
7 OBJECT_NAME=> 'TEST_TABLE',
8 OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT,
9 REPAIR_TABLE_NAME => 'REPAIR_TABLE',
10 FIX_COUNT => vBlocksFixed
11 );
12 DBMS_OUTPUT.PUT_LINE('Number of blocks fixed: ' || TO_CHAR(vBlocksFixed));
13 end;
14 /
Number of blocks fixed: 0

PL/SQL procedure successfully completed.



===============================================================================================
В итоге мне ничего не востановило....тоесть этот механизм востановления не сработал

Может я что то делаю не так!?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839945
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
може эти блоки имеют высокую степень побитости !!!! )
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839948
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно испортить специально пару блоков данных?
Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839949
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодерА как можно испортить специально пару блоков данных?
Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе

dd
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839959
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednikБыдло__кодерА как можно испортить специально пару блоков данных?
Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе

dd

совершенно верно

dd of=/u1/oracle/product.....(дата файл) bs=8192 conv=notrunc seek=(next block) <<EOF
<text>
>EOF
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37839972
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84,

Как ты думаешь, насколько сильно побит блок после "dd .. bs=8192" и что там можно отфиксить?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840002
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходил мимо...,

думаю для Oracle он сильно битый.....и тут я думаю что только бекап в помощь.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840007
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84и тут я думаю что только бекап в помощь.
или скип )))))
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840012
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

скип собственно и сделали!


Спасибо всем огромное за участие!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840022
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы очень узнать как работает DBMS_REPAIR.FIX_CORRUPT_BLOCKS. Я понимаю что нужно читать доку...но интересует Ваш личный опыт!?

Заранее благодарю!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840053
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84Хотелось бы очень узнать как работает DBMS_REPAIR.FIX_CORRUPT_BLOCKS.
Сразу развею иллюзии ;) (если таковы есть).
FIX_CORRUPT_BLOCKS ничего не фиксит )
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840085
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

я догадывался что это илюзия ))

Скажите а с Oracle Block Browser and EDitor кто то работал!?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840091
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84pravednik,

я догадывался что это илюзия ))

Скажите а с Oracle Block Browser and EDitor кто то работал!?
есть небольшой опыт, но это разве что "в академических целях".
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840225
zerof84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

я тогда пока что сам попробую покрутить эту утилиту. Если что то полезное выковыряю то обязательно напишу!
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37840368
MacDuck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zerof84Скажите а с Oracle Block Browser and EDitor кто то работал!?

Это...как его beditor что ли? Его еще компилить специально надо.
Была дока где-то в pdf.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37857157
наш человек в гаване
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikzerof84интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках??
никак)
Здравствуйте!

как-раз таки по этому поводу есть вопрос:

в алерт логе: ORA-0600. В трейс-файле:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
*** 2012-06-25 15:49:30.220
*** SESSION ID:(101.28940) 2012-06-25 15:49:30.220
*** CLIENT ID:() 2012-06-25 15:49:30.220
*** SERVICE NAME:(ORCL) 2012-06-25 15:49:30.220
*** MODULE NAME:(ac.exe) 2012-06-25 15:49:30.220
*** ACTION NAME:() 2012-06-25 15:49:30.220
 
* kdsgrp1-1: *************************************************
            row 0x030fa26b.92 continuation at
            0x030fa26b.92 file# 12 block# 1024619 slot 146 not found



смотрим что это за объект:

Код: sql
1.
2.
3.
4.
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 12
and 1024619 between block_id AND block_id + blocks - 1;



оказывается что это очень важная и большая таблица (12 Гб).

каждую ночь выполняется экспорт (expdp).
смотрю лог экспорта за прошедшую ночь: проблемная таблица как и все остальные
таблицы экспортировались успешно.

вопрос: почему в логе экспорта нет ни строчки про битые блоки или про то, что возникли
проблемы с выгрузкой какой-то таблицы?

ещё вопрос: есть ещё варианты для восстановления битого блока кроме dbms_repair для SE?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37857170
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наш человек в гаваневопрос: почему в логе экспорта нет ни строчки про битые блоки или про то, что возникли
проблемы с выгрузкой какой-то таблицы?
А с чего вы взяли, что блок битый ?
Наличие номера файла и блока в трейсе совсем не означает, что это битые блоки :-)
По поводу 600-ой, берете первый аргумент и на металинк.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37857187
наш человек в гаване
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikнаш человек в гаваневопрос: почему в логе экспорта нет ни строчки про битые блоки или про то, что возникли
проблемы с выгрузкой какой-то таблицы?
А с чего вы взяли, что блок битый ?
Наличие номера файла и блока в трейсе совсем не означает, что это битые блоки :-)
По поводу 600-ой, берете первый аргумент и на металинк.
да нету у меня металинка. когда-то был. не у меня. и тот - закончился.....

а проблема есть:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Archived Log entry 62612 added for thread 1 sequence 63973 ID 0x4b55880b dest 1:
Mon Jun 25 15:50:22 2012
Errors in file c:\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_4456.trc:
ORA-00308: cannot open archived log 'E:\ORACLE\FLASHRECOVERY\ORCL\ARCHIVELOG\2012_05_16\O1_MF_1_59342_7V6MBFM4_.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 3) The system cannot find the path specified.
Errors in file c:\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_4456.trc  (incident=309005):
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
Incident details in: c:\oracle\diag\rdbms\orcl\orcl\incident\incdir_309005\orcl_ora_4456_i309005.trc
Mon Jun 25 15:51:16 2012
Errors in file c:\oracle\diag\rdbms\orcl\orcl\incident\incdir_309005\orcl_ora_4456_i309005.trc:
ORA-00308: cannot open archived log 'E:\ORACLE\FLASHRECOVERY\ORCL\ARCHIVELOG\2012_05_16\O1_MF_1_59342_7V6MBFM4_.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 3) The system cannot find the path specified.
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [], [], [], [], []
Mon Jun 25 15:51:17 2012
Trace dumping is performing id=[cdmp_20120625155117]
Mon Jun 25 15:51:18 2012
Sweep [inc][309005]: completed
Sweep [inc2][309005]: completed




возникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет
и не может найти? т.е. почему в трейсе:

Код: plsql
1.
2.
3.
* kdsgrp1-1: *************************************************
            row 0x030fa26b.92 continuation at
            0x030fa26b.92 file# 12 block# 1024619 slot 146 not found
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37857223
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наш человек в гаваневозникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет
и не может найти? т.е. почему в трейсе:
Читайте внимательней.
Не блок, а " slot 146 not found"
над своей табличкой, которую вы получили из
Код: plsql
1.
2.
3.
4.
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 12
and 1024619 between block_id AND block_id + blocks - 1;



Код: plsql
1.
analyze table ..... validate structure cascade online; 
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37857236
наш человек в гаване
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikнаш человек в гаваневозникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет
и не может найти? т.е. почему в трейсе:
Читайте внимательней.
Не блок, а " slot 146 not found"
над своей табличкой, которую вы получили из
Код: plsql
1.
2.
3.
4.
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 12
and 1024619 between block_id AND block_id + blocks - 1;



Код: plsql
1.
analyze table ..... validate structure cascade online; 


спасибо!
а можно для меня чайника пояснить, что значит слот не найден?
проблемы с оперативкой?

и если у меня эта таблица часто используется, и она большая - 12 Гб,
то стоит ли проводить analyze table tablename validate structure cascade online;
при работающих пользователях? я боюсь что это может негативно сказаться на производительности?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #37861000
наш человек в гаване
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно для чайника пояснить чем отличается слот от блока?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-01578: ORACLE data block corrupted
    #39665862
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с указанной проблемой, судя по всему она возникла 4 дня назад.
В логах есть ошибки:
[DBD::Oracle::st execute failed: ORA-01578: разрушен блок данных ORACLE (файл # 9, блок # 3792555) ORA-01
110: файл данных 9: 'bm_index02.dbf' (DBD ERROR: OCIStmtExecute) [for Statement "..." with ParamValues: :p1='8745']]. Rolling back, giving up on account 3235
Указанный в топике запрос из dba_extents показывает, что поврежденный блок относится к индексу PER_ACCT_SERVICE_IDX.
Есть бэкапы за две недели.
Не посоветуете, как исправить ошибку?
Пересоздать индекс? В информации по индексу указано, что distinct keys примерно 20к, rows примерно 3кк.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665873
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, можно ли узнать, есть ли другие повреждения?
В логах это единственный блок, но вдруг есть и другие.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665880
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.И еще, можно ли узнать, есть ли другие повреждения?
Просмотрел логи бэкапов.
У меня делается два бэкапа, через expdp (только таблицы) и через rman.
Через expdb ошибок нет, я могу быть уверенным, что в информация в БД (содержание) не повреждена?
В логах rman есть такой фрагмент:
Код: plaintext
1.
2.
3.
4.
5.
.MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: сбой команды backup в канале t1 в 06/26/2018 01:48:50
ORA-19566: превышен лимит 0 поврежденных блоков для файла bm_index03.dbf
Полагаю это означает, что бэкапов у меня нет?
И непонятно, почему в логе указан файл bm_index03.dbf, если данные повреждены в файле bm_index02.dbf.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665912
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поискал в alert.log, получил следующие данные:
FILE_IDBLOCK_IDSEGMENT_NAMESEGMENT_TYPEFILE_NAME12412105BM_ACTION_LOGTABLEbm_data03.dbf61488857RADACCT_PKINDEXbm_index01.dbf93922567PERIODIC_ACCT_PKINDEXbm_index02.dbf93792555PER_ACCT_SERVICE_IDXINDEXbm_index02.dbf93921835DBACKUP_ACCOUNT_ID_IDXINDEXbm_index02.dbf62247489BM_ACTLOG_SERVICE_ID_IDXINDEXbm_index01.dbf2931208BM_ACTLOG_SERVICE_ID_IDXINDEXbm_index03.dbf2234187PAYMENT_ITEM_PAY_CLIENTINDEXbm_index03.dbf1517513_SYSSMU21$TYPE2 UNDOundotbs.dbf159873_SYSSMU26$TYPE2 UNDOundotbs.dbf
Как я понимаю, я довольно легко отделался.
В таблице BM_ACTION_LOG критичных данных нет, там вполне можно сделать skip.
Для индексов можно сделать rebuild (с предварительным заданием unusable).
А что делать с undo-сегментами?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665919
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать новое, а старое дропнуть
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665921
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пересоздать — в смысле пересоздать undo-сегмент?
Или к индексам это тоже относится?
Среди индексов есть довольно большие, их пересоздание может быть длительным.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665945
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пересоздать новое UNDO-пространство (или, посмотреть, что эти экстенты в состоянии EXPIRED и забить)
Ну и переключиться на него (alter system set UNDO_TABLESPACE=)
Старое снести (а не выводить в OFFLINE и пугаться ошибкам в алерте)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665958
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, undo пересоздал.
А как индексы починить не посоветуете?

Допустим я хочу починить индекс PAYMENT_ITEM_PAY_CLIENT, он небольшой и не критичный для работы.
Это индекс по полю PAY_CLIENT для таблицы PAYMENT_ITEM.
Делаю запрос select * from PAYMENT_ITEM where PAY_CLIENT = 100, чтобы получить ошибку ORA-01578.
Однако ошибки не происходит, видимо потому что для PAY_CLIENT=100 данные не повреждены.
Как узнать, какие именно данные повреждены?
Чтобы выполнить SQL-запрос, получить ошибку, перестроить индекс и снова выполнить SQL-запрос, убедившись что ошибка более не появляется.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665967
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,
Если Enterprise Ed.

alter index index_name rebuild online;

Ну и пойти по самому страшному пути предварительно забэкапившись.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
RUN
{
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c4 DEVICE TYPE DISK;
  VALIDATE CHECK LOGICAL DATABASE;
}



и

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
RUN
{
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c4 DEVICE TYPE DISK;
  VALIDATE DATABASE;
}



заюзать утилитку:

Код: plsql
1.
dbv file=/home/oracle/bad_data_01.dbf  blocksize=8192



потом и до начала операции посмотреть в представление и сравнить:
Код: plsql
1.
select * from  V$DATABASE_BLOCK_CORRUPTION




P.S в зависимость от типа повреждения блока лечится соответствующими методами .... в данном случае индексы самое простое.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39665969
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты же сам сказал:Alibek B.Для индексов можно сделать rebuild (с предварительным заданием unusable).


PS. А таблицу, если нельзя TRUNCATE, то выполнить CTAS (с установленным SKIP)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39666037
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тролинalter index index_name rebuild online
Видимо нет, я это уже ранее пробовал, фича online не поддерживается.

Вячеслав ЛюбомудровНу ты же сам сказал
Думал, может еще способы есть.
У меня там парочка тяжелых индексов есть.
Ок, сейчас займусь индексами.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39666106
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщаю результаты.

Вначале попытался было сделать перестройку индексов "на горячую", то есть на работающей БД и работающих пользователях/приложениях. По ошибке начал с индекса, который большой и очень активно используется (промахнулся при копипасте и не перепроверил).
Вначале все начало тормозить, что впрочем и ожидалось. Потом начало очень сильно тормозить. Потом load average на сервере вырос до 80-100. Затем кончилась память, ядро прибило процесс oracle и зависло само.

После этого я остановил клиентские подключения, перезапустил сервер, сделал перестройку индексов на свободной базе (на удивление быстро, индекс на 60 миллионов строк перестроился буквально минут за 6), после чего стартовал клиентские приложения.

Вообщем так и надо было делать с самого начала, но я надеялся, что Oracle сам как-то разрулит системные ресурсы.

Можно ли теперь сделать проверку БД, чтобы убедиться, что все повреждения исправлены?
Это нужно сделать задание с командой VALIDATE для rman, как написали парой постов выше?
(утилиты dbv у меня нет и как я понял, ее используют на остановленной БД)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39666806
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утилиту dbverify я все же нашел.
Код: plaintext
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.
$ $ORACLE_HOME/bin/dbv file=bm_data01.dbf feedback=10000

DBVERIFY: Release 10.2.0.4.0 - Production on Ср Июн 27 19:27:29 2018

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

DBVERIFY - Запуск верификации : FILE = bm_data01.dbf
................................................................................
................................................................................
................................................................................
................................................................................
..................................................................

DBVERIFY - верификация выполнена

Всего страниц проверено         : 3852800
Всего страниц обработано (Data) : 3839983
Всего сбойных страниц  (Data) : 0
Всего страниц обработано(Index): 1298
Всего сбойных страниц (Index): 0
Всего обработанных страниц (другие): 10543
Всего обработано страниц (сег.)  : 0
Всего страниц со сбоями (сег.)  : 0
Всего пустых страниц             : 976
Всего страниц, помеч.наруш.   : 0
Всего входных страниц            : 0
Наибольший SCN блоков        : 2131831410 (2.2131831410)
Раз "помеч.наруш.: 0", можно ли считать, что в данном файле повреждений нет?
Или dbv не все проверяет?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39666988
Тролин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,
Забэкапиться и сделать то что я написал. Предварительно посмотрев в select * from V$DATABASE_BLOCK_CORRUPTION и после всех операций в select * from V$DATABASE_BLOCK_CORRUPTION


тогда можно быть уверенным что все "хокей"
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667607
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице V$DATABASE_BLOCK_CORRUPTION есть четыре строчки, все принадлежат одному файлу (файл используется для индексов).
Утилита dbv показывает такие же данные.
При запуске бэкапа через rman (при заранее выставленном maxcorrupt=4) бэкап выполняется, в alert.log для этих четырех блоков появляются соответствующие сообщения.
Но при этом в dba_extents за этими блоками не числятся никакие объекты.
Разве такое может быть?
И как исправлять эту ошибку, если нет объекта, использующего эти блоки?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667612
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разместить в этих блоках новый объект
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667625
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это можно сделать? В синтаксисе DDL я не могу понять, как задать, в каких блоках будет размещаться объект.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667634
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты просто выделяй экстенты в нужном файле, авось и попадешь в нужный блок
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667642
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал пустую таблицу.
С помощью alter table allocate extent расширял ее, пока не попал на нужные блоки.
После этого выполнил команду analyze table validate structure.
Команда выполнилась успешно, ни про какие ошибки ничего не сообщила.
Затем я дропнул таблицу и снова запустил dbv.
И снова получил те же ошибочные блоки, что были ранее.
Что я делаю не так?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667652
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ж ты не сказал/акцентировал, что у тебя 10-ка

Там v$database_block_corruption заполняется только при BACKUP VALIDATE/CHECK LOGICAL
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667660
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на что это влияет?
Список коррумпированных блоков у меня есть, я его получаю либо после проверки через dbverify, либо после бэкапа с помощью rman.
Мне непонятно, как эти блоки исправить.
Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках.
Видимо мне нужно использовать DBMS_REPAIR, но не могу понять, каким образом.
Я делаю CHECK_OBJECT (чтобы пометить блоки), затем FIX_CORRUPT_BLOCKS, затем дропаю таблицу?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667662
alwan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках.

По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667664
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть в таблице нужно отключить авторасширение и вставлять строки в цикле, пока таблица не переполнится?
Выделенный размер таблицы сейчас 3,5ГБ, таблица состоит из одного number-поля.
Мне нужно будет под миллиард строк вставить, это само по себе может стать проблемой.

А нельзя ли создать новый data-файл, а старый удалить?
Или это большая нагрузка на сервер будет?
Размер data-файла 32 ГБ, число блоков 4 миллиарда.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667668
alwan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.То есть в таблице нужно отключить авторасширение и вставлять строки в цикле, пока таблица не переполнится?
Выделенный размер таблицы сейчас 3,5ГБ, таблица состоит из одного number-поля.
Мне нужно будет под миллиард строк вставить, это само по себе может стать проблемой.

А нельзя ли создать новый data-файл, а старый удалить?
Или это большая нагрузка на сервер будет?
Размер data-файла 32 ГБ, число блоков 4 миллиарда.

Как я понимаю вы уже выделили нужный экстент с корумпированным блоком для таблицы. Далее просто заполняйте ее, можно из нее самой же, пока нужный блок не починится. В идеале, при создании такой таблицы (для починки блоков) выставить PCTFREE 99 - тогда вставка данных до нужного блока пройдет быстрее.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667669
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alwanAlibek B.Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках.

По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667674
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровБлок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно
Но утилита dbv находит ошибки в файле данных, хотя найденные блоки уже принадлежат таблице.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667675
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Вячеслав ЛюбомудровБлок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно
Но утилита dbv находит ошибки в файле данных, хотя найденные блоки уже принадлежат таблице.По приведенному тобой вывводу DBV там никаких ошибок нет
А то, что они остались в V$DATABASE_BLOCK_CORRUPTION, так я тебе сказал как ее почистить
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667678
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как же нет?
Код: plaintext
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
$ cat bm_index02.log 

DBVERIFY: Release 10.2.0.4.0 - Production on Пт Июн 29 15:09:00 2018

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


DBVERIFY - Запуск верификации : FILE = /u01/oradata/billing/bm_index02.dbf


Стр. 1771196 - influx - скорее всего нарушен носитель
Corrupt block relative dba: 0x025b06bc (file 9, block 1771196)
Fractured block found during dbv: 
Data in bad block:
 type: 6 format: 2 rdba: 0x025b06bc
 last change scn: 0x0002.7236115b seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x8c4a0602
 check value in block header: 0x2c5d
 computed block checksum: 0xb6fd


Стр. 2512552 - influx - скорее всего нарушен носитель
Corrupt block relative dba: 0x026656a8 (file 9, block 2512552)
Fractured block found during dbv: 
Data in bad block:
 type: 6 format: 2 rdba: 0x026656a8
 last change scn: 0x0002.71f7625e seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x1e6d0602
 check value in block header: 0x1af1
 computed block checksum: 0x51c4


Стр. 3792555 - influx - скорее всего нарушен носитель
Corrupt block relative dba: 0x0279deab (file 9, block 3792555)
Fractured block found during dbv: 
Data in bad block:
 type: 6 format: 2 rdba: 0x0279deab
 last change scn: 0x0002.7cf1f41a seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0xa3b90602
 check value in block header: 0xea08
 computed block checksum: 0xaee7

Стр. 3921835 - influx - скорее всего нарушен носитель
Corrupt block relative dba: 0x027bd7ab (file 9, block 3921835)
Fractured block found during dbv: 
Data in bad block:
 type: 6 format: 2 rdba: 0x027bd7ab
 last change scn: 0x0002.7cf1d03c seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x84270601
 check value in block header: 0x1af5
 computed block checksum: 0x6490



DBVERIFY - верификация выполнена

Всего страниц проверено         : 4194302
Всего страниц обработано (Data) : 45
Всего сбойных страниц  (Data) : 0
Всего страниц обработано(Index): 4182201
Всего сбойных страниц (Index): 0
Всего обработанных страниц (другие): 8571
Всего обработано страниц (сег.)  : 0
Всего страниц со сбоями (сег.)  : 0
Всего пустых страниц             : 3481
Всего страниц, помеч.наруш.   : 4
Всего входных страниц            : 4
Наибольший SCN блоков        : 2137486455 (2.2137486455)
Я говорил о том, что для указанных сбойных блоков (1771196, 2512552, 3792555, 3921835) в таблице dba_extents нет объектов.
И мне непонятно, как исправить такие блоки.
Если запустить бэкап через rman, то без выставленного maxcorrupt он завершится с ошибкой, а с выставленным параметром он заполняет V$DATABASE_BLOCK_CORRUPTION данными, совпадающими с результатом dbv.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667679
alwan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудровalwanпропущено...


По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно

Я сталкивался с исправлением блоков вручную (Standard Edition). Если блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные. Просто аллоцирование не исправляло блок.
В этом блоге, например, рекомендуется такой же метод: https://blog.rackspace.com/clearing-unused-corrupt-nologging-blocks

Если можете дать ссылку на доку или ноту, где говорится, что блок "чинится" при аллоцировании - было бы интересно почитать, так как практика пока говорит обратное
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667681
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас я сделал таблицу TMP2 и расширял ее, пока в нее не попали сбойные блоки (во-первых чтобы эти блоки были сопоставлены с объектом, а во-вторых чтобы они часом не сопоставились с какими-нибудь рабочими объектами).
Теперь я хочу как-нибудь эти ошибки исправить, но не получается.
analyze table ошибок не находит.
DBMS_REPAIR.CHECK_OBJECT ошибок не находит (возвращает CORRUPT_COUNT=0).
dbv ошибки находит, но не исправляет.
rman наверное смог бы найти и исправить, но я опасаюсь использовать этот инструмент без подробной инструкции.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667683
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alwanЕсли блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные
А нет ли возможности указать, в какой блок нужно вставлять данные?
А то меня беспокоит перспектива вставлять миллиард строк.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667686
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alwanПо идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.
Похоже на то.
Когда таблица TMP2 была пустая (хоть и занимала 3,5ГБ), DBMS_REPAIR.CHECK_OBJECT отрабатывал моментально, но не находил ошибок.
Сейчас я вставил в таблицу 10кк записей и снова запустил DBMS_REPAIR.CHECK_OBJECT — хоть ошибок по прежнему не нашлось, но процедура работала какое-то время. То есть эта процедура явно проверяет не все аллоцированное пространство, а только занятое.
Теперь нужно придумать, как бы заполнить эту таблицу данными и при этом не положить сервер.
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667687
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.А то меня беспокоит перспектива вставлять миллиард строк.
Ну сделайте таблицу с широкой строкой... Скажем, 3-4 поля char(2000).
Дальше сгенерить несколько строк и "insert into myTab select * from myTab" до победы (удваивая число строк на каждой операции).
При 8К блоке будет одна строчка на блок :).
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667691
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alwanВячеслав Любомудровпропущено...
Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно

Я сталкивался с исправлением блоков вручную (Standard Edition). Если блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные. Просто аллоцирование не исправляло блок.
В этом блоге, например, рекомендуется такой же метод: https://blog.rackspace.com/clearing-unused-corrupt-nologging-blocks

Если можете дать ссылку на доку или ноту, где говорится, что блок "чинится" при аллоцировании - было бы интересно почитать, так как практика пока говорит обратноеДа, я ошибся Надо действительно вставлять

2Alibek B.
Сделай PCTFREE 99 и поле char(100) -- как раз по одной строке в блок войдет
Только не забудь авторасширение файла запретить
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667692
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровalwanпропущено...


Я сталкивался с исправлением блоков вручную (Standard Edition). Если блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные. Просто аллоцирование не исправляло блок.
В этом блоге, например, рекомендуется такой же метод: https://blog.rackspace.com/clearing-unused-corrupt-nologging-blocks

Если можете дать ссылку на доку или ноту, где говорится, что блок "чинится" при аллоцировании - было бы интересно почитать, так как практика пока говорит обратноеДа, я ошибся Надо действительно вставлять
Похоже, спутал с первоначальным форматированием при увеличении файла

Полезная нота: How to Format Corrupted Block Not Part of Any Segment (Doc ID 336133.1)
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667695
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousПри 8К блоке будет одна строчка на блок :).
Код: 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.
create table dropme_tv (a char(2000)) pctfree 99;
Table created
insert into dropme_tv (a) values('a');
1 row inserted
begin
  for i in 1..10 loop
    insert into dropme_tv select * from dropme_tv;
  end loop;
end;
/
PL/SQL procedure successfully completed
select dump(a, 1016) from dropme_tv where rownum=1;
DUMP(A,1016)
--------------------------------------------------------------------------------
Typ=96 Len=2000 CharacterSet=CL8MSWIN1251: 61,20,20,20,20,20,20,20,20,20,20,20,2
select count(*) allocated_rows
     , count(distinct dbms_rowid.rowid_relative_fno(rowid)||'.'|| dbms_rowid.rowid_block_number(rowid)) used_blocks
  from dropme_tv
  ;
ALLOCATED_ROWS USED_BLOCKS
-------------- -----------
          1024        1024
drop table dropme_tv purge;
Table dropped

SQL> 
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39667769
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заполнил файл данными (по этому совету 21531798 ), запустил CHECK_OBJECT — ошибок не найдено.
Запустил dbv на файле данных, в котором находились поврежденные блоки — ошибок не найдено.
Ошибки были логические и при пересоздании блоков (в процессе сохранения данных) были автоматически исправлены?
Или я что-то не то сделал?
...
Рейтинг: 0 / 0
ORA-01578: ORACLE data block corrupted
    #39726319
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращение к истокам.
Когда случилась описанная проблема с жестким диском в RAID, я решил сразу заказать диски на замену и постепенно заменить их все в массиве.
Но данная модель дисков уже не производится, поэтому нашел фирму-поставщика не сразу.
Потом поставщик прислал не те диски.
Потом прислал те диски, но б/у (восстановленные, хоть и на заводе, с надписью "certified repaired hdd").
Затем очень долго высылал замену, но все же вчера посылка с дисками наконец приехала.
А сегодня утром в массиве RAID-5 вылетел еще один диск.

Диск я уже заменил, сейчас он перестраивается.
Диагностические процедуры из топика я выполнял, вроде бы ошибок нет ни в логах, ни в результатах dbv.
Пронесло? Или целостность БД можно проверить как-то еще?
...
Рейтинг: 0 / 0
92 сообщений из 92, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01578: ORACLE data block corrupted
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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