Доступ к идентификатору транзакции
Доступ к идентификатору транзакции
Начиная с Firebird 1.5 идентификатор (TID) текущей транзакции (который получается из хранимых данных состояния транзакции) доступен в виде контекстной переменной. Он доступен в DSQL, isql, триггерах и хранимых процедурах. Это переменная CURRENT_TRANSACTION.
Например, для получения идентификатора в запросе вы можете выполнить следующее:
SELECT CURRENT_TRANSACTION AS TRAN_ID FROM RDВ$DATABASE;
Для сохранения его в таблице нужно выполнить:
INSERT INTO TASK_LOG (USER_NAME, TRAN_ID, START_TIMESTAMP)
VALUES (CURRENT_USER, CURRENT_TRANSACTION, CURRENT_TIMESTAMP) ;
! ! !
ВНИМАНИЕ! Идентификаторы транзакции не являются достаточно стабильными, чтобы их использовать в качестве ключей. Серия номеров для идентификаторов транзакций будет устанавливаться в 1 каждый раз при восстановлении базы данных.
. ! .
Firebird 1.0.x не предоставляет механизма отслеживания транзакций.
Использование TID в приложениях
Идентификатор транзакции на сервере не является тем же самым, что и дескриптор транзакции, который клиент Firebird получает в свое приложение. Довольно обоснованным является ассоциирование идентификатора транзакции с дескриптором транзакции при условии, что вы помните о необходимости изменить отношение между идентификатором и дескриптором транзакции при новой инициализации дескриптора. Каждое использование дескриптора в вашем приложении должно быть атомарным.
Идентификатор транзакции может быть полезным при отслеживании приложений и пользователей, ответственных за долгие транзакции в системе, ухудшающие ее производительность. Служебная программа циклического отслеживания может записывать на сервер время старта и завершения транзакций (подтверждение или отмена). В частности, отсутствие времени завершения будет полезным для отыскания пользователей, привычно использующих кнопку "восстановить" для завершения задач, или приложений, в которых регулярно происходит отказ при подтверждении работы.