Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Хранение БД.doc
Скачиваний:
50
Добавлен:
16.04.2013
Размер:
173.06 Кб
Скачать

Временные табличные области

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

Сегменты отката

Результатом выполнения любой транзакции может стать либо её заве­ршение, либо её откат. Как правило, транзакция завершается (commit), при этом все внесенные ею изменения записываются в базу данных. Откат (rollback) транзакции отменяет все её результаты, как если бы она никогда не выполнялась. Чтобы гарантировать откат транзакции,Oracleдолжна следить за данными, модифицируемыми транзакцией, до тех пор, пока она не завершится или не будет выполнен её откат.

Для записи данных отката транзакции в Oracleсуществуют специаль­ные сегменты, называемые сегментами отката (rollback segments). Иногда их называют сегментами отмены (undo segments). Когда выполняется откат транзакции,Oracleсчитывает нужные данные в сегменте отката, чтобы воссоздать информацию в том виде, в каком она была до изменения её транзакцией. На рис. $.6 показано, как для отмены результатов выполнения откатываемой транзакции используются сегменты отката.

Запись информации в сегменты отката

Oracleзаписывает информацию в сегменты отката не так, как это происходит с сегментами других видов. На рис. $.7 показано, как производится запись информации в экстенты сегмента отката.

Как можно увидеть на рис. $.7, сегмент отката представляет собой цик­лическую группу экстентов. Когда транзакции записывают информацию в текущий экстент сегмента отката и в итоге заполняют его информацией отката, точка записи переходит, или поворачивается (wrap) к следующему экстенту сегмента и запись информации продолжается. Если транзакция настолько продолжительна, что она прокручивает все экстенты сегмента отката и при этом заполняется текущий экстент,Oracleприходится выделять дополнительный экстент для сохранения ранее записанной информации, которая может потребоваться для отката длительной транза­кции. Если сегменты отката становятся больше своего первоначального размера,Oracleможет сократить их до оптимального числа экстентов. Позже будет рассказано о некоторых параметрах хранения, устанавлива­емых для управления выделением экстентов для сегментов отката.

Сегмент отката system

Для каждой базы данных Oracleсуществует, по меньшей мере, один сегмент отката, называемыйSYSTEM(системный). При создании новой базы данных в табличной областиSYSTEMавтоматически создается сегмент откатаSYSTEM.

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

Несколько сегментов отката

Как правило, для базы данных Oracleсоздается несколько сегментов отката, которые размещаются в табличной области, специально отведен­ной для хранения их информации. Число сегментов отката для базы данных не ограничивается. Каждый такой сегмент может иметь собственные размеры и атрибуты хранения. О хранении сегментов, в том числе и о хранении сегментов отката, более подробно рассказано ниже.

Когда начинает выполняться новая транзакция, Oracleавтоматически назначает ей доступный сегмент отката базы данных. Чтобы распреде­лить нагрузку среди всех доступных сегментов отката это назначение производится по алгоритму циклического обслуживания, иногда называемому каруселью (round-robin).

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