Машинный сбой


Сбой пользовательского процесса

Сбой оператора SQL

Различные типы сбоев

Основные типы сбоев: сбой оператора SQL, сбой пользовательского процесса, машинный сбой, сбой распределенной транзакции, сбой экземпляра и дисковый сбой/потеря файла.

 

В Oracle такой оператор DML, как UPDATE, выполняется или для всех строк, удовлетворяющих предложению WHERE, или вообще ни для одной из них.

Сбой оператора может произойти по разным причинам. Например, когда вставляются строки в таблицу, таблица может увеличиться в объеме занятой внешней памяти; если программное обеспечение базы данных обнаруживает, что нет доступного свободного пространства, оно возвращает пользователю сообщение об ошибке. Oracle не оставляет вставленными только половину строк. Если сбой происходит на полпути выполнения оператора, уже измененные строки возвращаются к исходному состоянию. Это называется откатом уровня оператора.

Другие операторы DML в транзакции остаются в отложенном состоянии, готовом для фиксации или отката транзакции.

 

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

Кроме того, фоновый процесс PMON освобождает все блокировки, сегменты отката и другие ресурсы системы, захваченные пользовательским процессом во время работы. Участия администратора базы данных для этого не требуется. База данных продолжает функционировать как обычно, и таблицы доступны для других пользователей. (Небольшая задержка возможна, пока блокировки будут освобождены.)

 

Когда машина, на которой выполняется сервер базы данных, дает сбой и выключается (например, при выключении питания), экземпляр Oracle останавливает выполнение. Если никакие файлы базы данных не потеряны, единственное действие, требуемое от администратора базы данных, - перезапустить экземпляр Огасle. Когда эта операция выполнится, фоновый процесс SMON считает оперативные журнальные файлы и повторно применит все изменения для фиксированных транзакций. Незафиксированные изменения аннулируются.

Оператор COMMIT пишет изменения только в журнальные файлы; он не записывает блоки данных на диск в момент, когда выполняется фиксация транзакции. Если блоки базы данных с зафиксированными изменениями записаны в файлы базы данных перед машинным сбоем, фоновый процecc SMON, очевидно, не должен повторять изменения для этих блоков.