Назначение
Задаёт параметры транзакции и стартует её.
Синтаксис
SET TRANSACTION
[NAME tr_name]
[<tr_option> ...]
<tr_option> ::=
READ {ONLY | WRITE}
| [NO] WAIT
| [ISOLATION LEVEL] <isolation level>
| NO AUTO UNDO
| RESTART REQUESTS
| IGNORE LIMBO
| LOCK TIMEOUT seconds
| AUTO COMMIT
| RESERVING <tables>
| USING <dbhandles>
<isolation level> ::=
SNAPSHOT [TABLE [STABILITY]]
| SNAPSHOT AT NUMBER snapshot_number
| READ COMMITTED [{[NO] RECORD_VERSION | READ CONSISTENCY}]
<tables> ::= <table_spec> [, <table_spec> ...]
<table_spec> ::= tablename [, tablename ...]
[FOR [SHARED | PROTECTED] {READ | WRITE}]
<dbhandles> ::= dbhandle [, dbhandle ...]
Table 1. Параметры оператора SET TRANSACTION
Параметр |
Описание |
tr_name |
Имя транзакции.Доступно только в ESQL. |
seconds |
Время ожидания оператора (statement) в секундах при возникновении конфликта. |
tables |
Список таблиц для резервирования. |
dbhandles |
Список баз данных, к которым база данных может получить доступ.Доступно только в ESQL. |
table_spec |
Спецификация резервирования таблицы. |
tablename |
Имя таблицы для резервирования. |
dbhandle |
Хендл базы данных, к которой транзакция может получить доступ.Доступно только в ESQL. |
snapshot number |
Номер снимка другой транзакци, данные снимка базы данных которой должны быть общими с новой транзакцией. |
Оператор SET TRANSACTION
задаёт параметры транзакции и стартует её.Старт транзакции осуществляется только клиентскими приложениями, но не сервером (за исключением автономных транзакций и некоторых фоновых системных потоков/процессов, например, таких как sweep).
Каждое клиентское приложение может запускать произвольное количество одновременно выполняющихся транзакций.Фактически есть ограничение на общее количество выполняемых транзакций во всех клиентских приложениях, работающих с одной конкретной базой данных с момента последнего восстановления базы данных с резервной копии или с момента первоначального создания базы данных.Это количество равняется числу 248 -1 то есть ~ 2,8 x 1014 транзакций.В API и MON$ таблицах номер транзакции представляет собой 64 битное число.
Все предложения в операторе SET TRANSACTION
являются необязательными.Если в операторе запуска транзакции на выполнение не задано никакого предложения, то предполагается старт транзакции со значениями всех характеристик по умолчанию (режим доступа, режим разрешения блокировок и уровень изолированности).
По умолчанию транзакция стартует со следующими характеристиками.
SET TRANSACTION
READ WRITE
WAIT ISOLATION LEVEL SNAPSHOT;
При старте со стороны клиента любой транзакции (заданной явно или по умолчанию) сервер передаёт клиенту дескриптор транзакции (целое число). На стороне сервера транзакциям последовательно присваиваются номера.Этот номер средствами SQL можно получить, используя контекстную переменную CURRENT_TRANSACTION
.