SET TARNSACTION
Описание
Инструкция SET TARNSACTION определяет доступ к базе данных транзакции по умолчанию, поведение конфликта блокировки, уровень взаимодействия с другими конкурирующими доступами транзакций к тем же самым данным. Она также может резервировать блокировки для таблицы.
По умолчанию, транзакция имеет READ WRITE доступ к базе данных. Если транзакция требует только чтения данных, определите READ ONLY параметр.
Когда транзакции одновременно пытаются модифицировать те же самые данные в таблице, только первая модификация преуспевает. Ни какая другая транзакция не может изменить или удалить эти данные, пока управляющая транзакция не отменена (rolled back) или не завершена (committed). По умолчанию, транзакции ожидают (WAIT), пока управляющая транзакция не завершится, затем делают попытку своих операций. Чтобы вынудить транзакцию немедленно завершиться и вывести ошибку конфликта блокировки без ожидания, определите параметр NO WAIT.
SNAPSHOT TABLE STABILITY обеспечивает repeatable чтение базы данных, гарантируя, что транзакции не будут записывать в таблицы, хотя они все еще могут быть способными читать из них.
READ COMMITTED позволяет транзакции по умолчанию видеть наиболее недавние изменения сделанные другими одновременными транзакциями. Это может также модифицировать строки, как только никакой конфликт модификаций не происходит. Несовершенные (uncommitted) изменения сделанные другой транзакцией остаются не видимыми, пока не совершены (committed). READ COMMITTED также обеспечивает два факультативных параметра:
- NO RECORD_VERSION, по умолчанию, читает только последнюю версию строки. Если опция WAIT определена, тогда транзакция ожидает, пока последняя версия строки сохранена или отменена, и повторяет чтение.
- RECORD_VERSION читает последнюю сохраненную версию строки, даже если более недавняя не сохраненная версия также расположена на диске.
Предложение RESERVING позволяет транзакции регистрировать желаемый уровень доступа для специфических таблиц, в момент начала транзакции, а не в момент, когда транзакция пытается произвести операции над этой таблицей. Резервирование таблиц в начале транзакций может уменьшить возможность тупиков.
Синтаксис
SET TRANSACTION [READ WRITE | READ ONLY] [WAIT | NO WAIT] [[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY] | READ COMMITTED [[NO] RECORD_VERSION]}] [RESERVING <reserving_clause>; <reserving_clause> = table [, table ...] [FOR [SHARED | PROTECTED] {READ | WRITE}] [, <reserving_clause>]
Обратите внимание:
Аргумент | Описание |
---|---|
READ WRITE |
Определяет, что транзакция может читать и записывать в таблицы (по умолчанию). |
READ ONLY |
Определяет, что транзакция может только читать таблицы. |
WAIT |
Определяет, что транзакция ожидает для доступа, если она сталкивается с с конфликтом блокировки с другой таблицей (по умолчанию). |
NO WAIT |
Определяет, что транзакция немедленно возвращает ошибку, если она сталкивается с конфликтом блокировки. |
ISOLATION LEVEL |
Определяет уровень изоляции для этой транзакции, когда происходит попытка доступа к тем же самым таблицам, как и другие одновременные транзакции. По умолчанию: SNAPSHOT. |
RESERVING <reserving_clause> |
Резервирует блокировку для таблицы в начале транзакции. |
Примеры
Следующая инструкция устанавливает транзакцию по умолчанию gds_$trans, с уровнем изоляции READ COMMITTED. Если транзакция сталкивается с конфликтом модификации, она ожидает, чтобы получить управление, пока первая (блокирующая) транзакция не завершена или отменена.
SET TRANSACTION WAIT ISOLATION LEVEL READ COMMITTED;
Следующая инструкция резервирует три таблицы:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED NO RECORD_VERSION WAIT RESERVING TABLE1, TABLE2 FOR SHARED WRITE, TABLE3 FOR PROTECTED WRITE;