Oracle Hard Corruption. В очередной раз об ошибке ORA-00600. Часть 3 -1. Hard Corruption

dbstalker, 07 сентября

Предыдущий пост на эту тему. Продолжим.

Так как hard corruption указывает на проблемы с магнитным носителем, эта коррупция также называется как физическая ошибка или ошибка носителя.

Первое проявление проблемы можно обнаружить в системном протоколе машины:

WARNING: /sbus@2,0/SUNW,soc@0,0/
SUNW,pln@b0000000,912cec/ssd@2,0 (ssd117):
Error for Command: read(10)     Error Level: Retryable
Requested Block: 34274544       Error Block: 34274544
Vendor: SEAGATE                 Serial Number: 03421655
Sense Key: Hardware Error

Это сообщение об ошибке указывает, что нечто происходит с диском и возможно нас могут ожидать некоторые проблемы на блочном уровне в базе данных.

Теперь рассмотрим, как различные аппаратные компонеты влияют на оракловский блок.

System Memory

System Memory - является основной памятью машины, из нее выделяется память для SGA (System Global Area) вашей базы данных. SGA сразу же занимается базой данных при старте и используется как Кеш для всех операций в базе данных. Вторая часть оракловской модели памяти PGA, размещается в системной памяти по мере работы сеансов.

В базе данных перемещение блоков из памяти на диск управляется фоновым процессом базы данных DBWR (writer process), который взаимодействует с операционной системой и передает ей блоки. Операционная система немедленно возвращает ответ процессу database writer и в фоне продолжает обработку блока на всем пути к физическому устройству.

Неисправная работа модулей памяти может вызвать коррупцию в блоках базы данных. Коррупция случается в памяти базы данных, буферном Кеше операционной системы или в буферах ввода-вывода файловой системы.

Коррупция в памяти может перенестись на диск раньше, чем операционная система обнаружит ошибку четности памяти. ОС, если обнаружит такую ошибку, запишет соответствующее сообщение в системный протокол и начнет предпринимать защитные действия.

Некоторые ошибки коррупции носителя

ORA-00600: internal error code, arguments: [3374], [], [], [], [], [], [], []

Если вами получена ORA-00600 [3374], то это означает, что вы столкнулись с ошибкой в памяти. Остановка базы даных и ее перезапуск может решить данную проблему. Если не получилось – вызываем Oracle Support ? !

При старте экземпляра , если будет задействован поврежденный объект, оракл сгенерирует ошибку ORA-01578 , это будет признаком повреждения носителя.

ORA-00600: internal error code, arguments: [3398], [15727], [15742], [], [], [], [], []

ORA-00600 [3398] ошибка, указывающая, что процесс DBWR обнаружил поврежденный блок в кэше и экземпляр сбойнул.

ORA-00600: internal error code, arguments: [4147], [], [], [], [], [], [], []

ORA-00600 [4147] указывает ошибку в памяти в rollback segment блоках (invalid SCN) наиболее вероятно возникшей из-за потери записи в rollback segment.

ORA-00600: internal error code, arguments: [4193], [15727], [15742], [], [], [], [], []

ORA-600[4193] указывает на повреждение в rollback segment, когда между transaction table и rollback блоком отсутствует синхронизация.

ORA-00600: internal error code, arguments: [12700], [], [], [], [], [], [], []
Block Checking: DBA = 16794980, Block Type = KTB-managed data block 
kdbchk: bad row tab 0, slot 42   -> bad row data 
kdrchk: row is marked as both Last and Next continue 

Эта ошибка на повреждение в индексе, таблице или в соответствии между ними. Скорее всего, индекс ROWID является указателем на несуществующую запись в данных таблицы. Повреждение такого типа может быть как в данных, так и блоке с индексом. Целый блок будет помечен как поврежденный и не будет нормального доступа ко всем данным в блоке. К тому же такая пометка блока в зависимости от его размещения может вызвать нарушение целостности и free list может стать недоступным .

Продолжение следует

источник

7 комментариев

Прокоментировать

kolomyi_a
9 сентября 2009 г. в 13:12

  ORA-600[4193] означает различие между записями повтора и отмены. Это означает, что имеет место повреждение либо блока отмены, либо повтора, либо обоих. Для исправления ситуации возможны следующие действия

1) Находим номер сегмента отката основываясь на первой части xid, которую Вы можете видеть в файле трассировки, например:
UNDO BLK:
xid: 0x000c.XXX.YYYYYYYY
Номер 0x000c, или 12 в десятичном исчислении.
SQL> select segment_name,status from dba_rollback_segs where segment_id=12;

2) Выполняем дамп таблицы транзакций сегмента отката для того, чтобы увидеть все ли транзакции зафиксированы:
SQL> alter system dump undo header <rollback segment name from query in step 1>;

3) Организуйте поиск в файле трассировки в user_dump_dest по ключу "TRN TBL", например:
TRN TBL::
index state cflags wrap# uel scn dba
-----------------------------------------------------------------------------
0x00 9 0x00 0x21eb1 0x0023 0x0000.d28c43e9 0x00000000 ......

state=9 означает, что транзакция зафиксирована.

4) Если все транзакции зафиксированы переведите сегмент отката в неоперативное состояние:
SQL> alter rollback segment <rollback segment name from query in step 1> offline;
SQL> select status from dba_rollback_segs where segment_id=12;

5) Если STATUS=OFFLINE
SQL> drop rollback segment <rollback segment name from query in step 1>;

dbstalker
9 сентября 2009 г. в 13:59

Мне кажется, что вы немного ошибаетесь . Все, что вы пишете имеет отношение к ошибке ORA-00600: internal error code, arguments: [4194] . читайте здесь - http://my-oracle.it-blogs.com.ua/post-374.aspx

kolomyi_a
10 сентября 2009 г. в 12:10

ORA-00600: [4193] или [4194] в диапазоне
4100 (server/txn Transaction Undo) - 4210 (server/txn Transaction Parallel)
и в некоторых j,общих ситуациях генерится либо первая, либо вторая (см., например - Doc.Id 8240762.8   Bug 8240762 - Undo corruptions with ORA-600 [4193]/ORA-600 [4194] ...).
Обе эти ошибки ORA-600 [4193] и ORA-600 [4194] - генерятся из-за несоответсвия REDO и UNDO.
Причина: повреждение служебных данных.
То, что я привел это просто из одной из заметок на металинке, которая целиком у меня похоже не сохранилась. ...
The ORA-600 [4193] indicates a difference between undo and redo records. This implies some kind of block corruption in either the redo or the undo block. To fix this please run the following steps:
1) Find out the rollback segment, based on the first part of the xid, which you can find in the trace file
UNDO BLK:
xid: 0x000c.004.002cee22
The segment id is 0x000c in hex, 12 in decimal.
SQL> select segment_name, status from dba_rollback_segs where segment_id=12;
2) Dump the transaction table of the rollback segment to see if all TX are commited:
SQL> alter system dump undo header <rollback segment name from query in step 1>;
3) check the trace file created under user_dump_dest
In the trace file search for the Keyword "TRN TBL"
TRN TBL::
index state cflags wrap# uel scn dba
-----------------------------------------------------------------------------
0x00 9 0x00 0x21eb1 0x0023 0x0000.d28c43e9 0x00000000 ......
state=9 means transaction is committed
4) If all transactions are committed, offline the rollback segment:
SQL> alter rollback segment <rollback segment name from query in step 1> offline;
SQL> select status from dba_rollback_segs where segment_id=12;
5) if STATUS=OFFLINE
drop rollback segment <rollback segment name from query in step 1>;
...

kolomyi_a
10 сентября 2009 г. в 12:23

Смотрите, например, подобное решение в Doc ID: 452662.1 Ora-600 [4193] When Opening Or Shutting Down A Database 06-JAN-2009 ...
1) Find out the rollback segment, based on the first part of the xid: 0x0002.045.00006c61
  usn=2 is the segment_id
  select segment_name,status from dba_rollback_segs where segment_id=2;
  RS_DATA1   ONLINE
2) Dump the transaction table of the rollback segment to see if all TX are commited:
  alter system dump undo header RS_DATA1;
3) check the trace file created under user_dump_dest
  In the trace file search for the Keyword "TRN TBL"
TRN TBL::
index state cflags wrap#   uel   scn         dba
-----------------------------------------------------------------------------
0x00   9   0x00 0x21eb1 0x0023 0x0000.d28c43e9 0x00000000 ......
state=9 means transaction is committed
4) offline the rollback segment:
  alter rollback segment rs_data1 offline;
    select status from dba_rollback_segs where segment_id=2;
5)   if STATUS=OFFLINE
    drop rollback segment RS_DATA1;

B. If Database doesn't open:
1.   a) If using rollback segments, remove the rollback_segments line from init.ora, and open database
    b) If using undo segments set undo_management = manual in init.ora/spfile, and try to open database.

2. If database opens means all transactions are committed, and you can drop the rollback segment or the undo tablespace
...

kolomyi_a
10 сентября 2009 г. в 12:45

Вспомнил, это не статья металинка, а рекомендация ведущего сервис запрос по данной ошибке
Abstract ORA-600 [4193], ORA-600 [4194] …
Thu Nov 13 13:24:31 2008
Errors in file /arch/data/admin/bdump/omega2_smon_483720.trc:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [13], [18], [], [], [], [], []
Thu Nov 13 13:24:41 2008
Errors in file /arch/data/admin/bdump/omega2_smon_483720.trc:
ORA-00600: internal error code, arguments: [4193], [42078], [42142], [], [], [], [], ...
13-NOV-08 10:53:46 GMT
ACTION PLAN
Hi, The ORA-600[4193] indicates a difference between undo and redo records.
This implies some kind of block corruption in either the redo or the undo block.
To fix this please run the following steps:
1) Find out the rollback segment, based on the first part of the xid, which you can find
in the trace file
UNDO BLK:
xid: 0x000c.004.002cee22
The segment id is 0x000c in hex, 12 in decimal.
SQL> select segment_name,status from dba_rollback_segs where segment_id=12;
2) Dump the transaction table of the rollback segment to see if all TX are commited:
SQL> alter system dump undo header <rollback segment name from query in step 1>;
3) check the trace file created under user_dump_dest
In the trace file search for the Keyword "TRN TBL"
TRN TBL::
index state cflags wrap# uel scn dba
-----------------------------------------------------------------------------
0x00 9 0x00 0x21eb1 0x0023 0x0000.d28c43e9 0x00000000 ......
state=9 means transaction is committed
4) If all transactions are committed, offline the rollback segment:
SQL> alter rollback segment <rollback segment name from query in step 1> offline;
SQL> select status from dba_rollback_segs where segment_id=12;
5) if STATUS=OFFLINE
drop rollback segment <rollback segment name from query in step 1>;
Regards, Thomas
...

dbstalker
10 сентября 2009 г. в 14:32

Огромнейшее спасибо за массу интереснейшей информации. Есть над чем поразмышлять!
Отдельное спасибо за внимание к блогу.

kolomyi_a
10 сентября 2009 г. в 16:10

И Вам спасибо за интересный блог!

 

Новый комментарий

Я не спамер: введите суму 9+4



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Шины бу
26 апреля, 2 ответа
Потрібна порада
25 апреля, 2 ответа
Посоветуйте адвоката
25 апреля, 1 ответа