|
|
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Приветствую, товарищи! В последнее время в приложении стали пропадать очень важные данные. Суть в том, что в логах приложения появилась ошибка: автор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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:16 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Я не особо сильно разбираюсь в БД, подскажите пожалуйста на языке чайника... На сколько я представляю, возникло после сбоев с оперативой или ЖД. Помогут ли переносы "больной" таблицы в другое табличное пространство или удаление этой таблицы совсем (этот вариант ужасен) Просто дальнейшая работа приложения в таком виде неприемлема и через пару дней меня подвесят за одно место... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:19 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. NagirНа сколько я представляю, возникло после сбоев с оперативой или ЖД. не обязательно. NagirПомогут ли переносы "больной" таблицы в другое табличное пространство или удаление этой таблицы совсем (этот вариант ужасен) Запрос выше подскажет вам, что это за объект. Если таблица, то вы ее не перенесете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:21 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednik Код: plsql 1. 2. 3. 4. 5. Segment_Type - Table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:35 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
NagirSegment_Type - Table Бекапы есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:36 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Какие есть варианты по устранению проблемы? В принципе, данный блок маловажный. Можно ли как то его удалить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:37 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Nagir, если есть бэкапы логично Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:40 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
NagirВ принципе, данный блок маловажный. Вы уже в курсе, что в нем лежит ? ;) NagirМожно ли как то его удалить? Можно пометить его "нечитаемым" - DBMS_REPAIR.... Можно вытащить все строки кроме тех, которые в блоке - dbms_rowid Можно восстановить БД(не всю), вытащить от туда таблицу и заменить ей покореженную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:43 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
kinky catNagir, если есть бэкапы логично Код: plsql 1. 2. Получится, что надо будет применить тот бэкап, который был до крэша этого блока, а всё что было занесено в таблицу после данного бэкапа пропадет? Ведь, если применить бэкап, например сделанный 5минут назад, то битый блок снова будет присутствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 14:53 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikNagirВ принципе, данный блок маловажный. Вы уже в курсе, что в нем лежит ? ;) Ну, я в курсе, какие данные хранятся в этой таблице и предполагаю, что потеря одного блока будет не слишком болезненна. pravednikNagirМожно ли как то его удалить? Можно пометить его "нечитаемым" - DBMS_REPAIR.... Можно вытащить все строки кроме тех, которые в блоке - dbms_rowid Можно восстановить БД(не всю), вытащить от туда таблицу и заменить ей покореженную. Можете, пожалуйста, поподробнее написать про первый вариант Два следующих варианта, думаю будут намного дольше и сложнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 15:00 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Nagirkinky catNagir, если есть бэкапы логично Код: plsql 1. 2. Получится, что надо будет применить тот бэкап, который был до крэша этого блока, а всё что было занесено в таблицу после данного бэкапа пропадет? для этого есть как раз и делается recover. NagirВедь, если применить бэкап, например сделанный 5минут назад, то битый блок снова будет присутствовать? Именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 15:09 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikNagirМожно ли как то его удалить? Можно пометить его "нечитаемым" - DBMS_REPAIR.... Я еще не знаком на практике с этой функцией. На сколько я представляю, там есть 2 варианта: DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 15:18 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
NagirНа сколько я представляю, там есть 2 варианта: DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия? У вас проблемы с чтением официальной документации ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 15:20 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
kinky catNagir, если есть бэкапы логично Код: plsql 1. 2. не логично:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 15:30 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikNagirНа сколько я представляю, там есть 2 варианта: DBMS_REPAIR.FIX_CORRUPT_BLOCK и DBMS_REPAIR.SKIP_CORRUPT_BLOCK Но я опасаюсь, не затронет ли эту всю таблицу в целом? Какие будут последствия? У вас проблемы с чтением официальной документации ? У меня проблемы со временем. Просто проблема очень срочная и я рассчитывал, что быстрее будет спросить у гуру баз данных, чем мне самому разбираться. В любом случае, спасибо огромное! Вы действительно очень сильно помогли! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 16:09 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
tim_scn, пожалуй согласен, погорячился у меня намедни такая трабла была систем. С обычным таблспейсом врядли стоит ресторить, ну по крайней мере, не в 1ую очередь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 16:10 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednik, Выполнил авторBEGIN DBMS_REPAIR.SKIP_CORRUPT_BLOCKS ( SCHEMA_NAME => 'имя_схемы', OBJECT_NAME => 'имя_таблицы', OBJECT_TYPE => dbms_repair.table_object, FLAGS => dbms_repair.skip_flag); END; Всё успешно. Больше битый блок не мешает. Еще раз огромное спасибо! До новых встреч! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2012, 16:32 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
NagirВсё успешно. Больше битый блок не мешает. т.е. данные вас в бд совсем не интересуют, лишь бы ошибок не было ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2012, 09:21 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Доброго время суток! Анналогичная проблема. Применял FIX_CORRUPT_BLOCK, не помогло. Если я правильно понимаю единственная надежда на бекапы!? Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2012, 16:20 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Как оказалось бекапа нет. Подскажите пожалуйста, есть еще какой нибудь способ востановить битые блоки? спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 12:28 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84Анналогичная проблема.Давай сначала - может быть она тебе только кажется аналогичной. В каком объекте битый блок? Как применял dbms_repair? Что значит "не помогло"? Что ещё из вышеприведенного пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 12:30 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., спасибо что откликнулся! В этих битых блоках расположено 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 битых блоках. Собственно больше ничего и не пробовал. Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 12:52 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84, 1. Как нашёл 119 битых "записей", что это означает? 2. Как сделали repair_table? 3. Что в ней содержалось? 4. И последнее - если уж сделал skip, что теперь не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 13:08 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., 1. Как нашёл 119 битых "записей", что это означает? Было зафиксировано что в таблице перед тем как появились битые блоки было определенное количество записей. После того как применил SKIP_CORRUPT_BLOCKS их стало на 119 записей меньше. 2. Как сделали repair_table? Этой информации у меня нет. Но я думаю что было использовано DBMS_REPAIR.ADMIN_TABLES. А что тут могут быть какие то нюансы? 3. Что в ней содержалось? этого я тоже не знаю. 4. И последнее - если уж сделал skip, что теперь не устраивает? Эта таблица с битыми блоками является аудит таблицей. Данные не очень важные но клиент требует востановить их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 14:11 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., 2. Как сделали repair_table? если это важный момент......я буду уточнять как она была сделана и что в ней !!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 14:12 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 14:24 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках?? никак) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 14:29 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 14:29 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof842. Как сделали repair_table? если это важный момент......я буду уточнять как она была сделана и что в ней !!!!! Вероятно, я не точно выразился. Меня интересует, откуда взялось содержимое repair_table, которое вы использовали на шаге fix? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 15:10 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., Насчет repair_table...то мне скрипты по ее созданю не были предоставлены и я понятия не имею как этот тейбл создавался и что в нем внутри. Скажите мне можалуйста если это важный момент для востановления и содержание этой таблицы может повлиять на востановление, я буду уточнять эти моменты и копать в этом направление!? Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 15:50 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84, Задам совсем прямой вопрос: ты перед fix_corrupt_block запускал check_object? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 15:55 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., да 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 15:59 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84даУгу, и после этого fix_corrupt_block вернул 0. Что ж, в отсутствии бэкапов, skip_corrupt_blocks - ваше всё. Для извлечения данных из блоков можно попробовать ещё физически заглянуть в эти блоки и, если совсем невтерпёж и там не полная каша, попытаться вытянуть данные вручную и перевставить их. Но это не для слабонервных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:16 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., ) Это точно не для слабонервный )) зарепродюсил я эту ситуацию на своей тестовай базе, вистинг команд приведен ниже..... ============================================================================= 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. =============================================================================================== В итоге мне ничего не востановило....тоесть этот механизм востановления не сработал Может я что то делаю не так!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:28 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
може эти блоки имеют высокую степень побитости !!!! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:31 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
А как можно испортить специально пару блоков данных? Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:32 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Быдло__кодерА как можно испортить специально пару блоков данных? Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе dd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:33 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikБыдло__кодерА как можно испортить специально пару блоков данных? Прочитал топик, захотелось поиграться с DBMS_REPAIR накошках тестовой базе dd совершенно верно dd of=/u1/oracle/product.....(дата файл) bs=8192 conv=notrunc seek=(next block) <<EOF <text> >EOF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:37 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84, Как ты думаешь, насколько сильно побит блок после "dd .. bs=8192" и что там можно отфиксить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:41 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., думаю для Oracle он сильно битый.....и тут я думаю что только бекап в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:52 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84и тут я думаю что только бекап в помощь. или скип ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:57 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednik, скип собственно и сделали! Спасибо всем огромное за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 16:58 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Хотелось бы очень узнать как работает DBMS_REPAIR.FIX_CORRUPT_BLOCKS. Я понимаю что нужно читать доку...но интересует Ваш личный опыт!? Заранее благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:02 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84Хотелось бы очень узнать как работает DBMS_REPAIR.FIX_CORRUPT_BLOCKS. Сразу развею иллюзии ;) (если таковы есть). FIX_CORRUPT_BLOCKS ничего не фиксит ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:15 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednik, я догадывался что это илюзия )) Скажите а с Oracle Block Browser and EDitor кто то работал!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:28 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84pravednik, я догадывался что это илюзия )) Скажите а с Oracle Block Browser and EDitor кто то работал!? есть небольшой опыт, но это разве что "в академических целях". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:31 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednik, я тогда пока что сам попробую покрутить эту утилиту. Если что то полезное выковыряю то обязательно напишу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 18:40 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
zerof84Скажите а с Oracle Block Browser and EDitor кто то работал!? Это...как его beditor что ли? Его еще компилить специально надо. Была дока где-то в pdf. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 20:46 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikzerof84интересно экспорт в этом случае не поможет!? как он отработает относительно тех записей которые в битых блоках?? никак) Здравствуйте! как-раз таки по этому поводу есть вопрос: в алерт логе: ORA-0600. В трейс-файле: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. смотрим что это за объект: Код: sql 1. 2. 3. 4. оказывается что это очень важная и большая таблица (12 Гб). каждую ночь выполняется экспорт (expdp). смотрю лог экспорта за прошедшую ночь: проблемная таблица как и все остальные таблицы экспортировались успешно. вопрос: почему в логе экспорта нет ни строчки про битые блоки или про то, что возникли проблемы с выгрузкой какой-то таблицы? ещё вопрос: есть ещё варианты для восстановления битого блока кроме dbms_repair для SE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2012, 15:27 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
наш человек в гаваневопрос: почему в логе экспорта нет ни строчки про битые блоки или про то, что возникли проблемы с выгрузкой какой-то таблицы? А с чего вы взяли, что блок битый ? Наличие номера файла и блока в трейсе совсем не означает, что это битые блоки :-) По поводу 600-ой, берете первый аргумент и на металинк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2012, 15:31 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
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. возникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет и не может найти? т.е. почему в трейсе: Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2012, 15:38 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
наш человек в гаваневозникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет и не может найти? т.е. почему в трейсе: Читайте внимательней. Не блок, а " slot 146 not found" над своей табличкой, которую вы получили из Код: plsql 1. 2. 3. 4. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2012, 15:49 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
pravednikнаш человек в гаваневозникает у меня ещё один вопрос: если блок не битый, почему oracle его ищет и не может найти? т.е. почему в трейсе: Читайте внимательней. Не блок, а " slot 146 not found" над своей табличкой, которую вы получили из Код: plsql 1. 2. 3. 4. Код: plsql 1. спасибо! а можно для меня чайника пояснить, что значит слот не найден? проблемы с оперативкой? и если у меня эта таблица часто используется, и она большая - 12 Гб, то стоит ли проводить analyze table tablename validate structure cascade online; при работающих пользователях? я боюсь что это может негативно сказаться на производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2012, 15:53 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
можно для чайника пояснить чем отличается слот от блока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2012, 18:18 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Столкнулся с указанной проблемой, судя по всему она возникла 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кк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 11:33 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
И еще, можно ли узнать, есть ли другие повреждения? В логах это единственный блок, но вдруг есть и другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 11:39 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B.И еще, можно ли узнать, есть ли другие повреждения? Просмотрел логи бэкапов. У меня делается два бэкапа, через expdp (только таблицы) и через rman. Через expdb ошибок нет, я могу быть уверенным, что в информация в БД (содержание) не повреждена? В логах rman есть такой фрагмент: Код: plaintext 1. 2. 3. 4. 5. И непонятно, почему в логе указан файл bm_index03.dbf, если данные повреждены в файле bm_index02.dbf. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 11:50 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Поискал в 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-сегментами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:19 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Создать новое, а старое дропнуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:23 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Пересоздать — в смысле пересоздать undo-сегмент? Или к индексам это тоже относится? Среди индексов есть довольно большие, их пересоздание может быть длительным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:33 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Пересоздать новое UNDO-пространство (или, посмотреть, что эти экстенты в состоянии EXPIRED и забить) Ну и переключиться на него (alter system set UNDO_TABLESPACE=) Старое снести (а не выводить в OFFLINE и пугаться ошибкам в алерте) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:47 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Понятно, undo пересоздал. А как индексы починить не посоветуете? Допустим я хочу починить индекс PAYMENT_ITEM_PAY_CLIENT, он небольшой и не критичный для работы. Это индекс по полю PAY_CLIENT для таблицы PAYMENT_ITEM. Делаю запрос select * from PAYMENT_ITEM where PAY_CLIENT = 100, чтобы получить ошибку ORA-01578. Однако ошибки не происходит, видимо потому что для PAY_CLIENT=100 данные не повреждены. Как узнать, какие именно данные повреждены? Чтобы выполнить SQL-запрос, получить ошибку, перестроить индекс и снова выполнить SQL-запрос, убедившись что ошибка более не появляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:55 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B., Если Enterprise Ed. alter index index_name rebuild online; Ну и пойти по самому страшному пути предварительно забэкапившись. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. и Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. заюзать утилитку: Код: plsql 1. потом и до начала операции посмотреть в представление и сравнить: Код: plsql 1. P.S в зависимость от типа повреждения блока лечится соответствующими методами .... в данном случае индексы самое простое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 13:07 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Ну ты же сам сказал:Alibek B.Для индексов можно сделать rebuild (с предварительным заданием unusable). PS. А таблицу, если нельзя TRUNCATE, то выполнить CTAS (с установленным SKIP) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 13:10 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Тролинalter index index_name rebuild online Видимо нет, я это уже ранее пробовал, фича online не поддерживается. Вячеслав ЛюбомудровНу ты же сам сказал Думал, может еще способы есть. У меня там парочка тяжелых индексов есть. Ок, сейчас займусь индексами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 14:24 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Сообщаю результаты. Вначале попытался было сделать перестройку индексов "на горячую", то есть на работающей БД и работающих пользователях/приложениях. По ошибке начал с индекса, который большой и очень активно используется (промахнулся при копипасте и не перепроверил). Вначале все начало тормозить, что впрочем и ожидалось. Потом начало очень сильно тормозить. Потом load average на сервере вырос до 80-100. Затем кончилась память, ядро прибило процесс oracle и зависло само. После этого я остановил клиентские подключения, перезапустил сервер, сделал перестройку индексов на свободной базе (на удивление быстро, индекс на 60 миллионов строк перестроился буквально минут за 6), после чего стартовал клиентские приложения. Вообщем так и надо было делать с самого начала, но я надеялся, что Oracle сам как-то разрулит системные ресурсы. Можно ли теперь сделать проверку БД, чтобы убедиться, что все повреждения исправлены? Это нужно сделать задание с командой VALIDATE для rman, как написали парой постов выше? (утилиты dbv у меня нет и как я понял, ее используют на остановленной БД) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 16:12 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Утилиту 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. Или dbv не все проверяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2018, 19:39 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B., Забэкапиться и сделать то что я написал. Предварительно посмотрев в select * from V$DATABASE_BLOCK_CORRUPTION и после всех операций в select * from V$DATABASE_BLOCK_CORRUPTION тогда можно быть уверенным что все "хокей" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2018, 10:37 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
В таблице V$DATABASE_BLOCK_CORRUPTION есть четыре строчки, все принадлежат одному файлу (файл используется для индексов). Утилита dbv показывает такие же данные. При запуске бэкапа через rman (при заранее выставленном maxcorrupt=4) бэкап выполняется, в alert.log для этих четырех блоков появляются соответствующие сообщения. Но при этом в dba_extents за этими блоками не числятся никакие объекты. Разве такое может быть? И как исправлять эту ошибку, если нет объекта, использующего эти блоки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 13:26 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Разместить в этих блоках новый объект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 13:33 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
А как это можно сделать? В синтаксисе DDL я не могу понять, как задать, в каких блоках будет размещаться объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 13:49 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
А ты просто выделяй экстенты в нужном файле, авось и попадешь в нужный блок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 13:58 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Сделал пустую таблицу. С помощью alter table allocate extent расширял ее, пока не попал на нужные блоки. После этого выполнил команду analyze table validate structure. Команда выполнилась успешно, ни про какие ошибки ничего не сообщила. Затем я дропнул таблицу и снова запустил dbv. И снова получил те же ошибочные блоки, что были ранее. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 14:24 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Что ж ты не сказал/акцентировал, что у тебя 10-ка Там v$database_block_corruption заполняется только при BACKUP VALIDATE/CHECK LOGICAL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 14:52 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
А на что это влияет? Список коррумпированных блоков у меня есть, я его получаю либо после проверки через dbverify, либо после бэкапа с помощью rman. Мне непонятно, как эти блоки исправить. Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках. Видимо мне нужно использовать DBMS_REPAIR, но не могу понять, каким образом. Я делаю CHECK_OBJECT (чтобы пометить блоки), затем FIX_CORRUPT_BLOCKS, затем дропаю таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 15:39 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B.Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках. По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 15:42 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
То есть в таблице нужно отключить авторасширение и вставлять строки в цикле, пока таблица не переполнится? Выделенный размер таблицы сейчас 3,5ГБ, таблица состоит из одного number-поля. Мне нужно будет под миллиард строк вставить, это само по себе может стать проблемой. А нельзя ли создать новый data-файл, а старый удалить? Или это большая нагрузка на сервер будет? Размер data-файла 32 ГБ, число блоков 4 миллиарда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 15:51 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B.То есть в таблице нужно отключить авторасширение и вставлять строки в цикле, пока таблица не переполнится? Выделенный размер таблицы сейчас 3,5ГБ, таблица состоит из одного number-поля. Мне нужно будет под миллиард строк вставить, это само по себе может стать проблемой. А нельзя ли создать новый data-файл, а старый удалить? Или это большая нагрузка на сервер будет? Размер data-файла 32 ГБ, число блоков 4 миллиарда. Как я понимаю вы уже выделили нужный экстент с корумпированным блоком для таблицы. Далее просто заполняйте ее, можно из нее самой же, пока нужный блок не починится. В идеале, при создании такой таблицы (для починки блоков) выставить PCTFREE 99 - тогда вставка данных до нужного блока пройдет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 15:57 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
alwanAlibek B.Допустим у меня есть таблица tmp2, которая гарантированно размещается на поврежденных блоках. По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:04 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровБлок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно Но утилита dbv находит ошибки в файле данных, хотя найденные блоки уже принадлежат таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:10 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B.Вячеслав ЛюбомудровБлок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно Но утилита dbv находит ошибки в файле данных, хотя найденные блоки уже принадлежат таблице.По приведенному тобой вывводу DBV там никаких ошибок нет А то, что они остались в V$DATABASE_BLOCK_CORRUPTION, так я тебе сказал как ее почистить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:12 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Как же нет? Код: 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. И мне непонятно, как исправить такие блоки. Если запустить бэкап через rman, то без выставленного maxcorrupt он завершится с ошибкой, а с выставленным параметром он заполняет V$DATABASE_BLOCK_CORRUPTION данными, совпадающими с результатом dbv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:30 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровalwanпропущено... По идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись.Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно Я сталкивался с исправлением блоков вручную (Standard Edition). Если блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные. Просто аллоцирование не исправляло блок. В этом блоге, например, рекомендуется такой же метод: https://blog.rackspace.com/clearing-unused-corrupt-nologging-blocks Если можете дать ссылку на доку или ноту, где говорится, что блок "чинится" при аллоцировании - было бы интересно почитать, так как практика пока говорит обратное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:31 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Сейчас я сделал таблицу TMP2 и расширял ее, пока в нее не попали сбойные блоки (во-первых чтобы эти блоки были сопоставлены с объектом, а во-вторых чтобы они часом не сопоставились с какими-нибудь рабочими объектами). Теперь я хочу как-нибудь эти ошибки исправить, но не получается. analyze table ошибок не находит. DBMS_REPAIR.CHECK_OBJECT ошибок не находит (возвращает CORRUPT_COUNT=0). dbv ошибки находит, но не исправляет. rman наверное смог бы найти и исправить, но я опасаюсь использовать этот инструмент без подробной инструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:37 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
alwanЕсли блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные А нет ли возможности указать, в какой блок нужно вставлять данные? А то меня беспокоит перспектива вставлять миллиард строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:41 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
alwanПо идее, чтобы "исправить" блок, его не достаточно просто аллоцировать, в него нужно произвести запись. Похоже на то. Когда таблица TMP2 была пустая (хоть и занимала 3,5ГБ), DBMS_REPAIR.CHECK_OBJECT отрабатывал моментально, но не находил ошибок. Сейчас я вставил в таблицу 10кк записей и снова запустил DBMS_REPAIR.CHECK_OBJECT — хоть ошибок по прежнему не нашлось, но процедура работала какое-то время. То есть эта процедура явно проверяет не все аллоцированное пространство, а только занятое. Теперь нужно придумать, как бы заполнить эту таблицу данными и при этом не положить сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:48 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Alibek B.А то меня беспокоит перспектива вставлять миллиард строк. Ну сделайте таблицу с широкой строкой... Скажем, 3-4 поля char(2000). Дальше сгенерить несколько строк и "insert into myTab select * from myTab" до победы (удваивая число строк на каждой операции). При 8К блоке будет одна строчка на блок :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:49 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
alwanВячеслав Любомудровпропущено... Блок при "аллоцировании" переформатируется в чистое состояние, ничего вставлять в него больше не нужно Я сталкивался с исправлением блоков вручную (Standard Edition). Если блок не принадлежит никакому сегменту, то чтобы его починить необходимо сначала аллоцировать его под табличку, а потом вставить в него данные. Просто аллоцирование не исправляло блок. В этом блоге, например, рекомендуется такой же метод: https://blog.rackspace.com/clearing-unused-corrupt-nologging-blocks Если можете дать ссылку на доку или ноту, где говорится, что блок "чинится" при аллоцировании - было бы интересно почитать, так как практика пока говорит обратноеДа, я ошибся Надо действительно вставлять 2Alibek B. Сделай PCTFREE 99 и поле char(100) -- как раз по одной строке в блок войдет Только не забудь авторасширение файла запретить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 16:57 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 17:00 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 17:04 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Заполнил файл данными (по этому совету 21531798 ), запустил CHECK_OBJECT — ошибок не найдено. Запустил dbv на файле данных, в котором находились поврежденные блоки — ошибок не найдено. Ошибки были логические и при пересоздании блоков (в процессе сохранения данных) были автоматически исправлены? Или я что-то не то сделал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2018, 21:36 |
|
||
|
ORA-01578: ORACLE data block corrupted
|
|||
|---|---|---|---|
|
#18+
Возвращение к истокам. Когда случилась описанная проблема с жестким диском в RAID, я решил сразу заказать диски на замену и постепенно заменить их все в массиве. Но данная модель дисков уже не производится, поэтому нашел фирму-поставщика не сразу. Потом поставщик прислал не те диски. Потом прислал те диски, но б/у (восстановленные, хоть и на заводе, с надписью "certified repaired hdd"). Затем очень долго высылал замену, но все же вчера посылка с дисками наконец приехала. А сегодня утром в массиве RAID-5 вылетел еще один диск. Диск я уже заменил, сейчас он перестраивается. Диагностические процедуры из топика я выполнял, вроде бы ошибок нет ни в логах, ни в результатах dbv. Пронесло? Или целостность БД можно проверить как-то еще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2018, 09:50 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1883263]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 474ms |

| 0 / 0 |
