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

dbstalker, 03 сентября

Каждый DBA имеет собственную ужасную историю об ORA-00600. Это часть (не самая лучшая) профессии администратора.

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

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

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

В этой статье обсуждается Оракловская блочная коррупция и будут описаны несколько характеристик Оракла, которые могут быть использованы на раннем этапе, для обнаружения коррупции в базе данных.

Oracle Block Structure

Оракловский блок является основой элементов данных и состоит из нескольких блоков операционной системы. Размер блока данных определяется во время создания базы данных параметром инициализации db_block_size.

При стандартной конфигурации UNIX блочную структуру можно изобразить следующим образом:

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

Каждый оракловский блок имеет свой внутренний бинарный формат с определенной структурой: заголовок, каталог таблиц, каталог строк, ITL, свободное пространство, данные. В заголовке блока содержиться адрес блока (data block address DBA). DBA- это 48 bit , используемых для проверки целосности блока. DBA состоит из двух частей: номера файла и относительного номера блока. Относительный номер блока это позиция блока относительно табличного пространства, которому блок принадлежит. Абсолютний номер файла описывает позицию блока в базе - FILE# in V$DATAFILE. Два различных блока в базе данных могут иметь одинаковый номер файла, но относительный номер блока у них будет разный. Используя пакет dbms_utility package можно поличить абсолютный адрес блока DBA в базе данных по известным номеру файла и относительному номеру блока.

SQL> variable dba varchar2; 
SQL> exec :dba := dbms_utility.make_data_block_address(101,5); -> relative address, file number
SQL> print dba
10059  -> absolute block address

Можно также сделать обратную операцию. Зная DBA можна получить номер файла и относительный номер блока (file#, Block#).

В каждом оракловском блоке оракл сохраняет записи данных пользовательский объектов. Каждая запись, сохраненная в блоке, имеет уникальный адрес - ROWID. Это восемнадцатизначное число следующего формата.

object_number.relative_file_number.block_number.row_number.

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

источник

 

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

Я не спамер: введите суму 1+6



 

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

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

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

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


 
 

Бизнес форум

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

Товары для взрослых
24 мая, 1 ответа
Выделенный сервер
23 мая, 3 ответа