powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01578: ORACLE data block corrupted
25 сообщений из 92, страница 3 из 4
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
25 сообщений из 92, страница 3 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01578: ORACLE data block corrupted
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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