Ідентифікатор і вік транзакції

Ідентифікатор і вік транзакції

Розглянуто питання, необхідні розробнику для створення клієнт-серверних додатків з використанням СУБД 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].

Схожі статті