Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен рбд.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
39.97 Кб
Скачать
  1. Вложенные и рекурсивные триггеры.

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

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

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

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

  1. Применение триггеров.

Типичное применение триггеров - дополнять встроеннные средства

аудитинга ORACLE. Хотя можно писать триггеры, которые будут

записывать информацию, аналогичную той, что регистрируется

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

если вам требуется более детальная аудиторская информация.

Например с помощью триггеров можно реализовать отслеживание на

уровне значений столбцов в строках таблиц.

  1. Понятие транзакций. Уровни изоляции транзакций.

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

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

Незавершенное (черновое) чтение (read uncommitted) — минимальный уровень изоляции гарантирует только физическую целостность при записи данных. Процессы-читатели могут считывать данные незавершенной транзакции процесса-писателя.

Подтвержденное чтение (read committed) — процессы-читатели не могут считывать данные незавершенной транзакции, но процессы-писатели могут изменять уже прочитанные читателем данные.

Повторяемое чтение (repeatable read) — повторное чтение данных вернет те же значения, что были и в начале транзакции. При этом процессы-писатели могут вставлять новые записи, имеющие статус фантома при незавершенной транзакции.

Сериализуемость (serializable) — максимальный уровень изоляции, гарантирует неизменяемость данных другими процессами до завершения транзакции.

Моментальный срез (snapshot) — данный вид изоляции не входит в рекомендации стандарта SQL 92, но он реализован во многих СУБД. Процессы-читатели не ждут завершения транзакций писателей, а считывают данные, точнее их версию, по состоянию на момент начала своей транзакции.