Доступ к идентификатору транзакции

We use cookies. Read the Privacy and Cookie Policy

Доступ к идентификатору транзакции

Начиная с 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 получает в свое приложение. Довольно обоснованным является ассоциирование идентификатора транзакции с дескриптором транзакции при условии, что вы помните о необходимости изменить отношение между идентификатором и дескриптором транзакции при новой инициализации дескриптора. Каждое использование дескриптора в вашем приложении должно быть атомарным.

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