Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ora-01578 / 25 сообщений из 30, страница 1 из 2
02.12.2017, 20:53
    #39563096
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Доброго времени суток!
Помогите понять из-за чего возникла проблема и как ее решить.
Есть база версии 11.2.0.4, вышел из строя жесткий диск и базы не стало. Благо резервная копия и архивлоги лежали в удаленном месте и база была восстановлена из резервной копии. Все бы хорошо, но после восстановления при инсерте данных в одну из таблиц стало вываливаться:
Ora-01578 data block corrupted
Ora-26040 data block was loaded using the NOLOGGING option.
...
Рейтинг: 0 / 0
02.12.2017, 21:00
    #39563097
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
база была восстановлена из резервной копии

Подробнее.
Обычно после восстановления из бэкапа не бывает коррумпированных блоков.
...
Рейтинг: 0 / 0
02.12.2017, 21:07
    #39563102
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Так в том то и дело. Какая инфа нужна? База восстановлена из фулбэкапа и накатаны архивлоги до момента сбоя. Коррупционные блоки в LOB сегментах.
...
Рейтинг: 0 / 0
02.12.2017, 21:16
    #39563108
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasyOra-26040 data block was loaded using the NOLOGGING option.RTFM* Action: Drop the object containing the block.
...
Рейтинг: 0 / 0
02.12.2017, 21:28
    #39563113
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Удалить таблицу? Не вариант!
...
Рейтинг: 0 / 0
02.12.2017, 21:44
    #39563121
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasyУдалить таблицу? Не вариант!Боржоми пить всё равно уже поздно.
...
Рейтинг: 0 / 0
03.12.2017, 23:11
    #39563381
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasyКоррупционные блоки
dmdmdmкоррумпированных блоков.

Вы точно не из следственного комитета?
Ну нет такого понятия в Oracle - "коррумпированные" или "коррупционные" блоки.
Есть corrupted blocks, по-русски - поврежденные блоки.
...
Рейтинг: 0 / 0
04.12.2017, 13:18
    #39563646
Виталий Перевозчиков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Бекап со стендбая делали или с primary?
...
Рейтинг: 0 / 0
04.12.2017, 13:24
    #39563651
Виталий Перевозчиков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Еще проверить надо бекапы командой VALIDATE
...
Рейтинг: 0 / 0
04.12.2017, 19:35
    #39564012
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Стендбая нет, только primary!
Backup validate database проходит на ура!
...
Рейтинг: 0 / 0
04.12.2017, 19:40
    #39564014
Тролин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,
как вариант прочекать базу
https://oracle-base.com/articles/misc/detect-and-correct-corruption

самая страшная утилитка dbv

по результату чека смотреть в v$database_block_corruption

и прочекать DBMS_REPAIR

это на тот случай если нужно выдернуть хоть что-то....
...
Рейтинг: 0 / 0
04.12.2017, 19:42
    #39564015
Тролин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,
ну если есть саппорт 1088018.1
...
Рейтинг: 0 / 0
04.12.2017, 19:47
    #39564018
Тролин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,
если есть LOB то там целая песня....
...
Рейтинг: 0 / 0
04.12.2017, 20:16
    #39564020
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
dmdmdmОбычно после восстановления из бэкапа не бывает коррумпированных блоков.

Они не поврежденные - медитируй над: Ora-26040 data block was loaded using the NOLOGGING option. Посему production желательно устанoвить c FORCE LOGGING.

SY.
...
Рейтинг: 0 / 0
04.12.2017, 20:36
    #39564027
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,

LOBы придется обнулять: ORA-1578 ORA-26040 in a LOB segment - Script to solve the errors (Doc ID 293515.1)
...
Рейтинг: 0 / 0
06.12.2017, 10:34
    #39564875
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Доброго времени суток всем. Решил вопрос! Если кому-то интересно, то делалось следующее.
Были почищены записи в таблице, которой принадлежали corrupted blocks, что давало надежду, что удастся ужать размер таблицы, но попытка не увенчалась успехом.
Затем создал точно такую же таблицу в другой базе и merge-ем перелили туда все данные. Удалил таблицу, содержащую corrupted blocks, но запрос v$database_block_corruption все равно выдал наличие corrupted blocks. ПБыло принято решение на удаление и пересоздание tablespace, после чего проблема решилась.
...
Рейтинг: 0 / 0
06.12.2017, 12:01
    #39564944
avanyugin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,

Сталкивался с таким. Если битый блок не принадлежит никакому сегменту, а находится во free space, то его условно можно считать нормальным, так как при записи в него он "исправится". Чтобы не смущать себя наличием битого блока, можно принудительно заполнить его.
Создадим таблицу:

Код: plsql
1.
2.
create table dummy_tab (id number, str varchar2(4000))
nologging tablespace <<TBS>> pctfree 99;



"Помещаем" битый блок в таблицу. Расширяем сегмент в нужном файле, пока не захватим блок (проверяем через DBA_EXTENTS):
Код: plsql
1.
2.
3.
4.
5.
6.
alter table dummy_tab allocate extent
(datafile <<datafile_name>> size 1G);

SELECT * FROM DBA_EXTENTS
WHERE FILE_ID = <<FILE_ID#>>
 AND <<BLOCK#>> BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS – 1;



Как блок стал относиться к таблице - записываем в нее:
Код: plsql
1.
2.
3.
4.
5.
INSERT INTO dummy_tab VALUES (1,RPAD('*',4000,'*'));
-- удваиваем количество строк вставки
INSERT INTO dummy_tab SELECT * FROM dummy_tab;
-- Когда объем будет достаточно большой, можно просто вставлять определенное количество строк
INSERT INTO dummy_tab SELECT * FROM dummy_tab WHERE ROWNUM <= 1000000;



Когда размер сегмента достигнет размера аллоцированного пространства - можно думать, что блок записан.

RMAN> validate datafile FILE#;
...
Рейтинг: 0 / 0
06.12.2017, 13:12
    #39565010
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
avanyugin,

Код: plaintext
1.
This chapter explains how to use the DBMS_REPAIR PL/SQL package to repair data block corruption in database schema objects. It contains the following topics:

DBMS_REPAIR не помогает?

.....
stax
...
Рейтинг: 0 / 0
06.12.2017, 13:18
    #39565017
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
StaxDBMS_REPAIR не помогает?RTFM Recovering After the NOLOGGING Clause Is Specified (FAQ)
...
Рейтинг: 0 / 0
06.12.2017, 13:23
    #39565024
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Elic,

таблицу удалили, блок свободен, зачем помнить о NOLOGGING и corrupt?

....
stax
...
Рейтинг: 0 / 0
06.12.2017, 13:28
    #39565030
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Эта информация находится в самом блоке
При удалении таблицы никто его, естественно, не переформатирует
А та же DBV сканирует КАЖДЫЙ блок -- она не знает свободен он или используется
...
Рейтинг: 0 / 0
06.12.2017, 13:46
    #39565040
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
Вячеслав ЛюбомудровЭта информация находится в самом блоке
При удалении таблицы никто его, естественно, не переформатирует
А та же DBV сканирует КАЖДЫЙ блок -- она не знает свободен он или используется

я понимаю что инфа в блоке,
но проверить что он уже никому не нужен можно ж

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

не вижу препятствий

......
stax
...
Рейтинг: 0 / 0
06.12.2017, 13:48
    #39565043
avanyugin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
StaxDBMS_REPAIR не помогает?


Это было на Standard Edition
...
Рейтинг: 0 / 0
06.12.2017, 17:19
    #39565275
kabanasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
avanyugin, дело в том, что corrupted blocks были не во free space, а в случае с LOB-сегментами там есть нюанс, что при удалении записей из таблицы, освобожденное пространство не уходит во free space, а остается принадлежать таблице ...
А DBMS_REPAIR вроде с LOB тоже не особо дружит(
...
Рейтинг: 0 / 0
06.12.2017, 17:29
    #39565284
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ora-01578
kabanasy,

ну после заNULLивания лоб-полей сделали бы мув таблицы с мувом самого лоба:
alter table bla move LOB(lobcol) store as (...)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ora-01578 / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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