Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Firebird Π Π£ΠšΠžΠ’ΠžΠ”Π‘Π’Π’Πž Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ БАЗ ДАННЫΠ₯Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 119

Автор Π₯Π΅Π»Π΅Π½ Π‘ΠΎΡ€Ρ€ΠΈ

Π’ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.


ИспользованиС рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ†

ИспользованиС рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ† с уровнями изоляции SNAPSHOT ΠΈ READ COMMITTED являСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ с SNAPSHOT TABLE STABILITY, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† являСтся ΠΌΠ΅Π½Π΅Π΅ агрСссивным ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ способом ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†. Он доступСн для использования с Π»ΡŽΠ±Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ изоляции. ΠŸΡ€ΠΈ этом Π΅Π³ΠΎ использованиС с SNAPSHOT TABLE STABILITY Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эффСкта ΠΏΡ€ΠΈ ограничСниях доступа ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ доступ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ прСдлоТСния RESERVING.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ† Π½Π΅ являСтся срСдством для Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ использования, Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π² Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡Π°Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΡ†Π΅Π½ΠΊΠ° отчСтности ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΏΠΎ "Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ запасам" ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.


ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ†

КаТдоС Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сконфигурировано с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для задания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ запросах доступа ΠΊ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ.


! ! !

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. Вранзакция SNAPSHOT TABLE STABILITY Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдства рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ†.

. ! .


Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

[PROTECTED | SHARED] {READ | WRITE}

Атрибут PROTECTED прСдоставляСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈ позволяСт Π΄Ρ€ΡƒΠ³ΠΈΠΌ транзакциям с уровнями изоляции SNAPSHOT ΠΈ READ COMMITTED Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки. Π—Π°ΠΏΠΈΡΡŒ ограничиваСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ двумя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ:

* PROTECTED WRITE позволяСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запись Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями;

* PROTECTED READ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для любой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ.

Атрибут SHARED позволяСт любой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ SNAPSHOT ΠΈΠ»ΠΈ READ COMMITTED Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ прСдоставляСт Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями:

* SHARED WRITE любой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ чтСния/записи SNAPSHOT ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ чтСния/записи READ COMMITTED ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ строки Π² Π½Π°Π±ΠΎΡ€Π΅, ΠΏΠΎΠΊΠ° никакая транзакция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ запросит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΏΠΎ записи;

* SHARED READ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π»ΠΈΠ±Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ условиСм рСзСрвирования. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ позволяСт любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ чтСния/записи ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.


Π˜Ρ‚ΠΎΠ³ΠΈ

Π›ΡŽΠ±Π°Ρ другая транзакция ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ сущСствуСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… способов ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π° Π½Π° запись для этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Ρ‚. Π΅. всС ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ сконфигурированы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСимущСствСнных ΠΏΡ€Π°Π² Π½Π° запись). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условия всСгда Π±ΡƒΠ΄ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ:

* другая транзакция ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции SNAPSHOT TABLE STABILITY;

* другая транзакция сконфигурирована Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ PROTECTED WRITE (хотя ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ссли тСкущая транзакция Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π»Π° Π΅Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ SHARED READ);

* другая транзакция собираСтся Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ SHARED WRITE, Π° тСкущая транзакция Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π»Π° Π΅Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ PROTECTED READ ΠΈΠ»ΠΈ PROTECTED WRITE.

Π’ случаС Ссли это всС Π΅Ρ‰Π΅ Π²Π°ΠΌ нСпонятно, посмотритС Π½Π° рис. 26.1, Π³Π΄Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сконфигурированныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ сами всС расскаТут.


Рис. 26.1. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ†

ВСрсии записСй

Когда запрос Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° сСрвСр, Firebird создаСт ΠΈ записываСт Π½Π° диск ссылку, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· строки, Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - ΠΈΠ½ΠΎΠ³Π΄Π° это называСтся Π΄Π΅Π»ΡŒΡ‚ΠΎΠΉ, - с Π½ΠΎΠ²ΠΎΠΉ вСрсиСй строки, содСрТащСй измСнСния запроса. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Ρ‹ строки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ вСрсиями записи. Когда новая вСрсия записи создаСтся Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ, Ρ‡Π΅ΠΌ транзакция, которая создала "ΠΆΠΈΠ²ΡƒΡŽ" Π²Π΅Ρ€ΡΠΈΡŽ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ транзакция, создавшая Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΎΡ‚ΠΊΠ°Ρ‚. ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания вСрсий ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описан Π² Π³Π»Π°Π²Π΅ 25.

Пока транзакция, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Π½Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ измСнСния, ΠΎΠ½Π° Π½Π΅ касаСтся "ΠΆΠΈΠ²ΠΎΠΉ" вСрсии. Π’ своСм собствСнном контСкстС ΠΎΠ½Π° Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° самой послСднСй ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ вСрсиСй. Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ "Π²ΠΈΠ΄Π΅Ρ‚ΡŒ" ΡΠ°ΠΌΡƒΡŽ послСднюю ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. Π’ случаС "ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ снимка" Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (snapshot) Π² транзакциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π΄ΠΎ нашСй Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, послСдняя подтвСрТдСнная вСрсия записи, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ видят, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ старой, Ρ‡Π΅ΠΌ Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΈΠ΄ΠΈΡ‚ наша транзакция ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Ρ€Π°Π½Π΅Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅, Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции READ COMMITTED.


ЗависимыС строки

Если Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π½Π° сСрвСр, ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, сСрвСр создаСт вСрсии строк Π² этих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ "ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚" ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ строкС[96]. Π­Ρ‚ΠΈ зависимыС строки, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ строки Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, зависящиС ΠΎΡ‚ Π½ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ становятся нСдоступными Π΄Ρ€ΡƒΠ³ΠΈΠΌ транзакциям для измСнСния, ΠΏΠΎΠΊΠ° выполняСтся наша транзакция.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

Π’ Firebird Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ возрастом Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π° записи ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ систСмой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ вСрсий. ВсС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строки, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° транзакция ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции SNAPSHOT TABLE STABILITY ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΏΠΎ записи.

ВрСмя дСйствия

ВрСмя дСйствия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строки ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ активности чтСния/записи являСтся оптимистичСским - Π½Π΅ выполняСтся никакая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½ΠΈΠΊΠ°ΠΊΠΈΡ… строк Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Π°. Пока измСнСния строки Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° сСрвСр, строка свободна для "получСния" любой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ чтСния/записи.


ΠŸΠ΅ΡΡΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

ΠŸΠ΅ΡΡΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ, ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° для Π½Π°Π±ΠΎΡ€ΠΎΠ² строк ΠΈΠ»ΠΈ для Ρ†Π΅Π»Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†. Π Π΅ΠΆΠΈΠΌΡ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ описаны (см. Ρ€Π°Π·Π΄. "Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†" ΠΈ "SNAPSHOT TABLE STABILITY (ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ)").

ΠŸΠ΅ΡΡΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строки ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π°Π±ΠΎΡ€Π° являСтся Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ строки ΠΈΠ»ΠΈ нСбольшого Π½Π°Π±ΠΎΡ€Π° выполняСтся Π΄ΠΎ фактичСской пСрСсылки измСнСния ΠΈΠ»ΠΈ удалСния.


Явная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΡΠ²Π½ΡƒΡŽ ΠΏΠ΅ΡΡΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ строки Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² синтаксис SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° SELECT Π² Firebird 1.5. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° "внСшним ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ" ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² SELECT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ курсоры. Она Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ подзапросам.

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ синтаксис запроса явной пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строки:


SELECT <Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ-список>

FROM <Ρ‚Π°Π±Π»ΠΈΡ†Π°-ΠΈΠ»ΠΈ-ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°-ΠΈΠ»ΠΈ-просмотр>

[WHERE <условия-поиска>]

[GROUP BY <спСцификация-группирования>]

[UNION <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π²Ρ‹Π±ΠΎΡ€Π°> [ALL]]

[PLAN <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-ΠΏΠ»Π°Π½Π°>]

[ORDER BY <список-столбцов>]

[FOR UPDATE [OF столбСц1 [, столбСц2 ...]] [WITH LOCK]]


ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ FOR UPDATE, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ инструкциСй Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π½Π°Π±ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС Π·Π° Ρ€Π°Π·, Π° Π½Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„Ρ€Π°Π·Π° WITH LOCK являСтся элСмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ строки, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСр ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ с сСрвСра. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ.


Π€ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ измСнСния

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом получСния пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ строки Π² Firebird ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ измСнСния (dummy updates). Π­Ρ‚ΠΎΡ‚ Ρ‚Ρ€ΡŽΠΊ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства многовСрсионной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. ΠšΠ»ΠΈΠ΅Π½Ρ‚ просто посылаСт Π½Π° сСрвСр для строки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСняСт - ΠΎΠ½ просто устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбца Π² Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ сСрвСр создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ записи ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ запрос Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ этой строки.

Условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пСссимистичСская Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΈ тСхничСскиС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π΅Π΅ использованию ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 27.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ появляСтся, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… для этих Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ частично пСрСкрываСтся. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Firebird ΠΈ стратСгии поддСрТания ΠΌΠ½ΠΎΠ³ΠΈΡ… вСрсий записи, защищая измСняСмыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ пСрСзаписи ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опСрациями Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π­Ρ‚Π° стратСгия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС Π΄Π²ΡƒΡ… условий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.