![Ідентифікатор і вік транзакції (вік) Ідентифікатор і вік транзакції](https://images-on-off.com/images/161/identifikatorivozrasttranzaktsii-8a25149c.jpg)
Розглянуто питання, необхідні розробнику для створення клієнт-серверних додатків з використанням СУБД Firebird, що стала розвитком СУБД Borland Interbase 6. Утримується огляд концепцій і моделей архітектури клієнт / сервер, а також практичні рекомендації по роботі з клієнтськими бібліотеками Firebird. Детально описані особливості типів даних SQL, мова маніпулювання даними (Data Manipulation Language, DML), а також синтаксис і оператори мови визначення даних (Data Definition Language, DDL). Велика увага приділена опису транзакцій і наведено поради щодо їх використання при розробці додатків. Описано програмування на стороні клієнта і сервера написання тригерів і збережених процедур, створення і використання подій бази даних, обробка помилок в коді на сервері і багато іншого. Матеріал супроводжується численними прикладами, порадами та практичними рекомендаціями.
Для розробників баз даних
Книга: Firebird КЕРІВНИЦТВО РОЗРОБНИКА БАЗ ДАНИХ
Ідентифікатор і вік транзакції
Розділи на цій сторінці:
Ідентифікатор і вік транзакції
Ідентифікатор транзакції є 32-бітовим цілим, яке генерується з одиничним приростом. Нова або тільки відновлена база даних починає Серію ідентифікаторів з одиниці. Вік транзакції визначається її ідентифікатором: найстаріша має найменший ідентифікатор.
Ідентифікатори транзакцій і асоційовані з ними стану даних зберігаються в інвентарних сторінках транзакцій. На заголовної сторінці бази даних система обліку підтримує набір полів, що містять ідентифікатори транзакцій, що цікавлять цю систему, а саме найстарішу зацікавлену транзакцію (Oldest Interesting Transaction, OIT), найстарішу активну транзакцію (Oldest Active Transaction, OAT) і число, яке використовується в наступної транзакції. "Миттєвий знімок" ідентифікатора транзакції також записується кожен раз, коли збільшується OAT - зазвичай той же самий ідентифікатор, що і OAT, або близький до нього.
Отримання ідентифікатора транзакції
Firebird 1.5 і пізніші версії мають контекстну змінну CURRENT? TRANSACTION, яка повертає ідентифікатор даної транзакції. Вона може використовуватися в SQL в будь-якому вираженні. Наприклад, для збереження коду транзакції в таблиці протоколу ви можете використовувати наступне:
INSERT INTO BOOK_OF_LIFE
(TID, COMMENT, SIGNATURE) VALUES
'This has been a great day for transactions', CUERENT_USER);
Важливо пам'ятати, що ідентифікатори транзакцій є циклічними. Оскільки нумерація скидається після кожного відновлення (restore) бази даних, ідентифікатори транзакцій не повинні використовуватися для первинних ключів або обмежень унікальності.
Переповнення ідентифікатора транзакції
Як було сказано, ідентифікатор транзакції є 32-бітовим цілим. Якщо послідовність ідентифікаторів перевищить ліміт в 4 Гбайт і почнеться новий відлік, то можуть відбутися неприємні речі. Коли завершиться остання транзакція, системна транзакція перестане працювати, і зміна метаданих буде неможливим. Прибирання сміття припиниться. Транзакції користувача не стануть запускатися.
При 100 транзакціях в секунду це займе 1 рік, 4 місяці, 11 днів, 2 години і приблизно 30 хвилин [90].