Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
Oracle10. Резервного копирования нет. При работе с БД появилась ошибка "ORA-01578: разрушен блок данных ORACLE (файл # 4, блок # 104296)". Блок приходится на таблицу. Можно ли как-то спасти/исправить ситуацию? Поиском вроде выяснил, что нужно использовать rman, но что-то не могу понять, как :(
31 окт 08, 12:41    [6381261]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
если нет резервных копий, то рман не поможет...
1 - можно вытащить строки из таблицы, которые не попадают в битый блок. Потом пересоздать таблицу уже без битого блока.
2 - можно пометить блок через DBMS_REPAIR
3 - есть еще BBED ;)
31 окт 08, 12:45    [6381303]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
pravednik
1 - можно вытащить строки из таблицы, которые не попадают в битый блок. Потом пересоздать таблицу уже без битого блока.

Как? SELECT выбирает часть строк, доходит до битого блока - и все. Можно ли пропустить как-то этот блок?
pravednik
2 - можно пометить блок через DBMS_REPAIR

Это нужно делать, чтобы Оракл больше не обращался к жтому блоку? Или он и так его больше трогать не будет?
pravednik
3 - есть еще BBED ;)

Нашел такую утилитку только в папке 8-го Оракла. Как ей пользоваться - неизвестно. Это поможет или ты решил пошутить?
31 окт 08, 13:28    [6381746]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Лысый зеленый накуреный колобок
Guest
Igor Vitaliev
Как ей пользоваться - неизвестно. Это поможет или ты решил пошутить?

Очень даже известно.
Какие уж шутки, если bbed не поможет - уже мало что поможет :-)
31 окт 08, 13:39    [6381851]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Igor Vitaliev
]Как? SELECT выбирает часть строк, доходит до битого блока - и все. Можно ли пропустить как-то этот блок?

Определяете rowid первой и последней строк, входящей в Ваш битый блок.
Сначала вытаскиваете id объекта, который содержит ваш блок
SELECT data_object_id
	    FROM dba_objects
	   WHERE object_name = '<TABLE-NAME>'
	     AND owner = '<TABLE-OWNER>'
потом вычисляете нижний предел (первая строка, которая поапдает в ваш блок)
SELECT dbms_rowid.rowid_create(1,<DATA_OBJECT_ID>,4,104296,0) LOW_RID from DUAL;
и верхний предел(первая строка, которая поапдает в следующий блок)
SELECT dbms_rowid.rowid_create(1,<DATA_OBJECT_ID>,4,104297,0) LOW_RID from DUAL;
а дальше вытаскиваете данные
CREATE TABLE new_table AS
	 SELECT /*+ ROWID(A) */ * FROM <owner.tablename> A
	  WHERE rowid < '<low_rid>'
	;

	INSERT INTO new_table 
	 SELECT /*+ ROWID(A) */ * FROM <owner.tablename> A
	  WHERE rowid >= '<hi_rid>'

Igor Vitaliev
Это нужно делать, чтобы Оракл больше не обращался к жтому блоку? Или он и так его больше трогать не будет?

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

Igor Vitaliev
Нашел такую утилитку только в папке 8-го Оракла. Как ей пользоваться - неизвестно. Это поможет или ты решил пошутить?

Это поможет в крайнем случае, когда уже, как говорица, нечего терять... она есть и в 9-ке и в 10-ке. Как бользоваться - в гугле можно найти мануал, позволяющий понять базовые принципы юзания.
31 окт 08, 13:42    [6381886]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
Лысый зеленый накуреный колобок
Очень даже известно.

Я имел ввиду, что мне неизвестно :)
Вопрос раз: как применить bbed.exe от Оракла 8.1.5 под виндой к Ораклу 10 на Линуксе?
Вопрос два: что нужно сделать, чтобы исправить мою проблему?
31 окт 08, 13:43    [6381899]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
sql+
Guest
Igor Vitaliev

pravednik
3 - есть еще BBED ;)

Нашел такую утилитку только в папке 8-го Оракла. Как ей пользоваться - неизвестно. Это поможет или ты решил пошутить?


Не нужно тебе это. Используй dbms_repair.
31 окт 08, 13:50    [6381966]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Халдурды Амандурдыевич Бердыев
Member

Откуда: Киргизский тракторист
Сообщений: 149
sql+
Igor Vitaliev

pravednik
3 - есть еще BBED ;)

Нашел такую утилитку только в папке 8-го Оракла. Как ей пользоваться - неизвестно. Это поможет или ты решил пошутить?


Не нужно тебе это. Используй dbms_repair.
Еще проще - event 10231
31 окт 08, 14:42    [6382527]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
sql+
Guest
Халдурды, а о появлении новых кораптед блоках он узнает? Если нет, то имха плохо.
31 окт 08, 15:02    [6382705]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
pravednik, спасибо огромное за подробное описание!

Похоже, что отделался легким испугом: после DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (...flags => DBMS_REPAIR.SKIP_FLAG) данные стали доступны. Это нормально? Потому что я ожидал, что просто пропадет сообщение об ошибке, а данные так и будут недоступными.
31 окт 08, 15:13    [6382808]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Igor Vitaliev
pravednik, спасибо огромное за подробное описание!

Похоже, что отделался легким испугом: после DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (...flags => DBMS_REPAIR.SKIP_FLAG) данные стали доступны. Это нормально? Потому что я ожидал, что просто пропадет сообщение об ошибке, а данные так и будут недоступными.

ну собственно для єтого єтот пакет и нужен... Данніе у вас доступны, кроме тех, что в битом блоке.
Советую, все же, CTAS старую табличку в новую.
31 окт 08, 15:16    [6382828]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
pravednik
Данніе у вас доступны, кроме тех, что в битом блоке.

Нет, доступны и данные из этого блока тоже, я специально отобрал их по rowid, развернув знаки сравнения в вашем примере, и получил свои 55 потерянных, как я думал, строк. DBMS_REPAIR.CHECK_OBJECT больше не выдает ничего, а до применения DBMS_REPAIR.SKIP_CORRUPT_BLOCKS была одна строка с указанным блоком.
31 окт 08, 15:24    [6382911]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Халдурды Амандурдыевич Бердыев
Member

Откуда: Киргизский тракторист
Сообщений: 149
sql+
Халдурды, а о появлении новых кораптед блоках он узнает? Если нет, то имха плохо.
Ну, дык можно rman натравить (+ check logical). Или еще добавить event 10232
31 окт 08, 16:27    [6383558]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
sql+
Guest
Вариант неплохой. Но по мне так лучше сразу про "задницу" узнать и исправить(recover block, datafile), что б никто не смог неправильные данные получить и произвести неправильные расчёты :)
31 окт 08, 16:42    [6383717]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
Господа, а можно теперь все то, о чем вы тут между собой говорили, перевести на понятный для меня язык? :) Желательно столь же доступно, как сделал это pravednik.
31 окт 08, 16:47    [6383774]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
Igor Vitaliev
Господа, а можно теперь все то, о чем вы тут между собой говорили, перевести на понятный для меня язык? :) Желательно столь же доступно, как сделал это pravednik.


alter session set events '10231 trace name context off'; - отключает проверку всех поврежденных блоков в сессии.

event 10232 - вываливает в трейс коррапнутые блоки.
31 окт 08, 17:30    [6384166]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Разрушенный блок
Guest
AG#
alter session set events '10231 trace name context off'; - отключает проверку всех поврежденных блоков в сессии.
Чего-чего?
31 окт 08, 17:45    [6384321]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
Разрушенный блок
AG#
alter session set events '10231 trace name context off'; - отключает проверку всех поврежденных блоков в сессии.
Чего-чего?


Пофиг, автору все равно не нужно
Сустав руки прихватило, блин ... коррапшн
31 окт 08, 23:03    [6385321]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Халдурды Амандурдыевич Бердыев
Member

Откуда: Киргизский тракторист
Сообщений: 149
AG#
Разрушенный блок
AG#
alter session set events '10231 trace name context off'; - отключает проверку всех поврежденных блоков в сессии.
Чего-чего?


Пофиг, автору все равно не нужно
Сустав руки прихватило, блин ... коррапшн


Согласен. Ему и вся база не нужна
автор
Резервного копирования нет
1 ноя 08, 10:33    [6386216]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01578 разрушен блок - можно ли исправить не имея резервных копий?  [new]
Igor Vitaliev
Member

Откуда: Одесса
Сообщений: 104
Халдурды Амандурдыевич Бердыев
Согласен. Ему и вся база не нужна

Точно :) Мне, программисту, эта база даром не нужна. Но ввиду отсутствия нормальных администраторов взвалили на меня. А администрирование Оракла - совсем не то, что программирование под Оракл. Отсюда и элементарные вопросы у меня, над которыми вы потешаетесь.

Насколько я понял, alter session set events '10231 trace name context off'; мне уже не нужно, поскольку я воспользовался DBMS_REPAIR?
1 ноя 08, 19:56    [6389152]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить