Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle

/ΠΏΡ€ΠΈΠ²Π΅Ρ‚/ΠΌΠΈΡ€/etc

НСпСриодичСскиС Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π²Ρ‚ΠΎΡ€Π½ΠΈΠΊ, 20 дСкабря 2016 Π³.

Π”Π²Π° кСйса для ora_rowscn Π² Oracle 11g

Π’ Π‘Π£Π‘Π” Oracle систСмный Π½ΠΎΠΌΠ΅Ρ€ измСнСния (SCN, system change number) Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅Π΅ число. КаТдая транзакция, ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ этого Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈΠ· Π‘Π” ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ:

Как Π²ΠΈΠ΄ΠΈΠΌ, SCN ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² для всСх строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: всС строки Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ИзмСним ΠΎΠ΄Π½Ρƒ строку Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ запрос:

ИзмСнилось Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ora_rowscn для всСх строк. ΠŸΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ?

К соТалСнию, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ alter table Π΄Π°Π½Π½ΠΎΠ΅ свойство Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ нСльзя. НуТно ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ SCN для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ это:

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ SCN для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 6 Π±Π°ΠΉΡ‚ Π½Π° строку.

Для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌ rowdependencies с сохранСниСм Π΅Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ зависимостСй ΠΈ Π±Π΅Π· приостановки Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ dbms_redefinition (см., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡ‚Π°Ρ‚ΡŒΡŽ Online Table Redefinition (DBMS_REDEFINITION) Enhancements in Oracle Database 11g Release 1).

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π΄Π²Π° случая, ΠΊΠΎΠ³Π΄Π° псСвдостолбСц ora_rowscn оказываСтся ΠΏΠΎΠ»Π΅Π·Π΅Π½.

КСйс 1. ΠžΠΏΡ‚ΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Допустим, ΠΌΡ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ locations Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбца name строки с id = 8 :

ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС для рСдактирования. ПослС рСдактирования названия («Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³» исправили Π½Π° «Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³ΡŠ»), сохраняСм измСнСния:

ПослСднСС условиС name = :loc_name Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ строка обновится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли считанноС Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ name Π½Π΅ измСнилось Π² Π‘Π” Π·Π° Ρ‚ΠΎ врСмя, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понадобилось Π½Π° Π΅Π³ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Если ΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ 0 строк, Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ сохранСно ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС ΠΎΠ± ошибкС.

Π§Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ora_rowscn Π² этой ситуации? Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ora_rowscn ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ измСнСния, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Если ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ 0 строк, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ строка Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСансС, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС ΠΎΠ± ошибкС.

КСйс 2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π·Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 0 строк, Π° ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строки, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ выполнСния ( l_prev_when ) ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ( l_curr_when ).

ΠžΡ‚ΡΡŽΠ΄Π°, ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»ΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ экспСримСнтировал:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Oracle RAC. ΠžΠ±Ρ‰Π΅Π΅ описаниС / Π§Π°ΡΡ‚ΡŒ 2

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΎ Real Application Cluster (RAC). ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅.

Π‘Ρ‡ΠΈΡ‚Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ кластСр поднялся ΠΈ всС Π·Π°ΠΊΡ€ΡƒΡ‚ΠΈΠ»ΠΎΡΡŒ.

ВзаимодСйствиС ΡƒΠ·Π»ΠΎΠ². Cache-fusion.

Много экзСмпляров Π‘Π”, ΠΌΠ½ΠΎΠ³ΠΎ дисков. Π₯Π»Ρ‹Π½ΡƒΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ запросы… Π²ΠΎΡ‚ ΠΎΠ½ΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΄Π°Π»ΠΈ. =)

Π‘Π°ΠΌΡ‹ΠΌ ΡƒΠ·ΠΊΠΈΠΌ мСстом любой Π‘Π” ΡΠ²Π»ΡΡŽΡ‚ΡΡ дисковый Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ дискам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ запись. Π’ RAC всС Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для single-instance Π‘Π”: Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² RAM располагаСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ SGA (System Global Area), Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ находится Π±ΡƒΡ„Π΅Ρ€Π½Ρ‹ΠΉ кэш (database buffer cache). ВсС Π±Π»ΠΎΠΊΠΈ, Π½Π΅ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ с диска, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² этот Π±ΡƒΡ„Π΅Ρ€, ΠΈ хранятся Ρ‚Π°ΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ дольшС. Но кэш Π½Π΅ бСсконСчСн, поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ TCA (Touch Count Algorithm), ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ количСство ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π±Π»ΠΎΠΊΠ°ΠΌ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² кэш, Π±Π»ΠΎΠΊ размСщаСтся Π² Π΅Π³ΠΎ cold-end. Π§Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ ΠΊ Π±Π»ΠΎΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ, Ρ‚Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΎΠ½ ΠΊ hot-end. Если ΠΆΠ΅ Π±Π»ΠΎΠΊ «залСТался», ΠΎΠ½ постСпСнно ΡƒΡ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свои ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² кэшС ΠΈ рискуСт Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ записью. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Π±Π»ΠΎΠΊΠΎΠ² начинаСтся с Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ…. Кэш ΡƒΠ·Π»Π° – ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ΅Π½ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡƒΠ·Π»ΠΎΠ², поэтому для поддСрТания высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² кластСрС кэшСм Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ (ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ‰Π°Π» сами-Π·Π½Π°Π΅Ρ‚Π΅-ΠΊΡ‚ΠΎ). Π‘Π»ΠΎΠΊΠΈ, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ Π² кэшС ΡƒΠ·Π»Π° кластСра, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, Ρ‚.Π΅. для Π΅Π³ΠΎ собствСнного пользования, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΡƒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½, поскрипСв Π·ΡƒΠ±Π°ΠΌΠΈ дисками, Π±ΡƒΠ΄Π΅Ρ‚ дСлится с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ кластСра.

ВСхнология ΠΎΠ±Ρ‰Π΅Π³ΠΎ кэша Π² кластСрС называСтся Cache-fusion (синтСз кэша). CRS Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ синхронныС процСссы LMSn, ΠΎΠ±Ρ‰Π΅Π΅ ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ сСрвиса β€” GCS (Global Cache Service). Π­Ρ‚ΠΈ процСссы ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π½Π° этом экзСмплярС Π±Π»ΠΎΠΊΠΈ (Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅) ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠ³ΠΎ кэша ΠΊ экзСмпляру, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π° Π½ΠΈΠΌΠΈ обратился ΠΏΠΎ сСти, ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° ΠΎΡ‚ΠΊΠ°Ρ‚ Π½Π΅ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. На ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎ 36 ΡˆΡ‚ΡƒΠΊ (GCS_SERVER_PROCESSES). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ рСкомСндуСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ LMSn Π½Π° Π΄Π²Π° ядра, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΈ слишком сильно Ρ€Π°ΡΡ…ΠΎΠ΄ΡƒΡŽΡ‚ рСсурсы. Π—Π° ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ сСрвис GES (Global Enqueue Service), прСдставлСнный Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ процСссами LMON ΠΈ LMD. LMON отслСТиваСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ рСсурсы всСго кластСра, обращаСтся Π·Π° Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΊ сосСдним ΡƒΠ·Π»Π°ΠΌ, управляСт восстановлСниСм GCS. Когда ΡƒΠ·Π΅Π» добавляСтся ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ‚ кластСр, ΠΎΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ рСсурсов. LMD управляСт рСсурсами ΡƒΠ·Π»Π°, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΈ очСрСдям, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ запросов ΠΊ GCS ΠΈ управляСт обслуТиваниСм ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ запросов LMSn. Π’ обязанности LMD Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ устранСниС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»ΠΎΠ² кластСра.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle

Π’Π°Π±Π»ΠΈΡ†Π° GRD распрСдСлСна ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ кластСра. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ участиС Π² распрСдСлСнии рСсурсов кластСра, обновляя свою Ρ‡Π°ΡΡ‚ΡŒ GRD. Π§Π°ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ GRD относится ΠΊ рСсурсам – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ: Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, индСксы ΠΈ.Ρ‚.ΠΏ. Она постоянно синхронизируСтся (обновляСтся) ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ.
Когда ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΡ‡Π΅Π» Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… с диска, ΠΎΠ½ становится master-ΠΎΠΌ этого рСсурса ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ Π² своСй части Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ GRD. Π‘Π»ΠΎΠΊ помСчаСтся ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚.ΠΊ. ΡƒΠ·Π΅Π» ΠΏΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ. Если ΠΆΠ΅ этот Π±Π»ΠΎΠΊ потрСбовался Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ, Ρ‚ΠΎ процСсс GCS ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ этот Π±Π»ΠΎΠΊ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ (Β«ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Β» для кластСра) ΠΈ пСрСдаст Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π²ΡˆΠ΅ΠΌΡƒ ΡƒΠ·Π»Ρƒ.

DBAlocationmoderoleSCNPI/XI
500ΡƒΠ·Π΅Π» β„–3sharedlocal99960

Π‘Π΅Π· нСобходимости Π½ΠΈΠΊΠ°ΠΊΠΈΡ… записСй Π½Π° диск Π½Π΅ происходит. ВсСгда копия Π±Π»ΠΎΠΊΠ° хранится Π½Π° ΡƒΠ·Π»Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅Ρ‚ Π² глобальном кэшС, Ρ‚ΠΎ ΠΏΡ€ΠΈ запросС master попросит ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ с диска ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ (ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ надобности).

Taking fire, need assistance! Workload distribution.

ОписанноС устройство Cache-fusion, прСдоставляСт кластСру Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ самому (автоматичСски) Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡƒΠ·Π»ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ происходит workload distribution ΠΈΠ»ΠΈ resource remastering (пСрСраспрСдСлСниС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов):
Если, скаТСм, Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ·Π΅Π» β„–1 1500 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ обращаСтся ΠΊ рСсурсу A, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² это ΠΆΠ΅ врСмя 100 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ обращаСтся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ рСсурсу A Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ·Π΅Π» β„–2, Ρ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ большСС количСство запросов, ΠΈ Ρ‡Π°Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ с диска. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ·Π΅Π» β„–1 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ master для запросов ΠΊ рСсурсу A, ΠΈ GRD Π±ΡƒΠ΄Π΅Ρ‚ создано ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ начиная с ΡƒΠ·Π»Π° β„–1. Если ΡƒΠ·Π»Ρƒ β„–2 ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ самыС рСсурсы, Ρ‚ΠΎ для получСния доступа ΠΊ Π½ΠΈΠΌ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚ΡŒ свои дСйствия с GCS ΠΈ GRD ΡƒΠ·Π»Π° β„–1, для получСния рСсурсов Ρ‡Π΅Ρ€Π΅Π· interconnect.
Если ΠΆΠ΅ распрСдСлСниС рСсурсов помСняСтся Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΡƒΠ·Π»Π° β„–2, Ρ‚ΠΎ процСссы β„–2 ΠΈ β„–1 ΡΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ свои дСйствия Ρ‡Π΅Ρ€Π΅Π· interconnect, ΠΈ master-ΠΎΠΌ рСсурса A станСт ΡƒΠ·Π΅Π» β„–2, Ρ‚.ΠΊ. Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π°Ρ‰Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ диску.
Π­Ρ‚ΠΎ называСтся Ρ€ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ (affinity) рСсурсов, Ρ‚.Π΅. рСсурсы Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит большС дСйствий ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ ΠΈ ΠΈΡ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° родствСнности рСсурсов скоординируСт Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСсурсы Π±ΠΎΠ»Π΅Π΅ доступны Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ΠΎΡ‚, ΠΊΡ€Π°Ρ‚ΠΊΠΎ, ΠΈ вСсь workload distribution.

ΠŸΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (remastering) Ρ‚Π°ΠΊΠΆΠ΅ происходит, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠ·Π΅Π» добавляСтся ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ‚ кластСр. Oracle пСрСраспрСдСляСт рСсурсы ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ Β«Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ пСрСраспрСдСлСниС» (lazy remastering), Ρ‚.ΠΊ. Oracle ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… дСйствий ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ рСсурсов. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠ·Π΅Π» ΡƒΠΏΠ°Π», Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Oracle – это ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ½Π΅Ρ‚ рСсурсы, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π²ΡˆΠΈΠ΅ ΠΎΠ±Π²Π°Π»ΠΈΠ²ΡˆΠ΅ΠΌΡƒΡΡ ΡƒΠ·Π»Ρƒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ (ΠΌΠ΅Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ). ПослС стабилизации Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ GCS ΠΈ GES Π·Π°Π½ΠΎΠ²ΠΎ (автоматичСски) пСрСраспрСдСлят рСсурсы (workload distribution) ΠΏΠΎ Ρ‚Π΅ΠΌ позициям, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ вострСбованы. АналогичноС дСйствиС происходит ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡƒΠ·Π»Π°: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π²Π½ΠΎΠ΅ количСство рСсурсов отдСляСтся ΠΎΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² ΠΈ назначаСтся вновь ΠΏΡ€ΠΈΠ±Ρ‹Π²ΡˆΠ΅ΠΌΡƒ. ΠŸΠΎΡ‚ΠΎΠΌ ΠΎΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ workload distribution.
Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСского пСрСраспрСдСлСния, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡƒΠ·Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚.

Π’ΠΎΡ‚ пуля ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π΅Π»Π°, и… Π°Π³Π°? Recovery.

Но ΠΏΠΎΠΊΠ° всС эти процСссы происходят, Π½Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈΠ²ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ.

Пока ΡƒΠ·Π»Ρ‹ ΡΠΏΠ°ΡΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ друга… Failover.

Virtual IP (VIP) – логичСский сСтСвой адрСс, Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠ·Π»Ρƒ Π½Π° внСшнСм сСтСвом интСрфСйсС. Он прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ CRS спокойно Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с этим VIP Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π». Listener (процСсс, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ соСдинСния) Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ свой VIP. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠ·Π΅Π» становится нСдоступным, Π΅Π³ΠΎ VIP ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π° сСбя Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π» Π² кластСрС, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ обслуТивая свои ΠΈ запросы ΡƒΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ ΡƒΠ·Π»Π°.

Если ΡƒΠ·Π΅Π» восстановится ΠΈ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π² online, CRS ΠΎΠΏΠΎΠ·Π½Π°Π΅Ρ‚ это ΠΈ попросит ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π² offline Π½Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ ΡƒΠ·Π»Π΅ ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ VIP адрСс ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ. VIP относится ΠΊ CRS, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ пСрСбросится Ссли Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· строя ΠΈΠΌΠ΅Π½Π½ΠΎ экзСмпляр Π‘Π”.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ failover пСрСносятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запросы select, вмСстС ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ курсорами (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚). Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ пСрСносятся (PL/SQL, temp tables, insert, update, delete), ΠΈΡ… всСгда Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ.

Π’ΡƒΠ΄Π° Π½Π΅ Ρ…ΠΎΠ΄ΠΈ, сюда ходи… Load-balancing.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Β«ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉΒ»), Oracle собираСт Π² AWR (Automatic Workload Repository). Она хранится Π² tablespace SYSAUX. Π‘Π±ΠΎΡ€ статистики запускаСтся ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 60 ΠΌΠΈΠ½ΡƒΡ‚ (default): I/O waits, wait events, CPU used per session, I/O rates on datafiles (ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Ρ‡Π°Ρ‰Π΅ всСго происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅).

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Load-balancing (распрСдСлСнии Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ) ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ Π² кластСрС опрСдСляСтся ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π²: ΠΏΠΎ числу физичСских ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ ΡƒΠ·Π»Ρƒ, ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ процСссора (CPU), ΠΏΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ. Π–Π°Π»ΡŒ Ρ‡Ρ‚ΠΎ нСльзя load-balance ΠΏΠΎ срСднСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния запроса Π½Π° ΡƒΠ·Π»Π°Ρ…, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ связано с задСйствованными рСсурсами Π½Π° ΡƒΠ·Π»Π°Ρ…, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΠΈΡΡ свободными рСсурсам.

О Client load-balancing Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ сказано Π²Ρ‹ΡˆΠ΅. Он просто позволяСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ случайно Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ кластСра ΠΈΠ· списка Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Для осущСствлСния ΠΆΠ΅ Server-side load-balancing ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс PMON (process monitor) собираСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΡƒΠ·Π»ΠΎΠ² кластСра. Частота обновлСния этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ зависит ΠΎΡ‚ загруТСнности кластСра ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ»Π΅Π±Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 1 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π΄ΠΎ 10 ΠΌΠΈΠ½ΡƒΡ‚. На основании этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Listener Π½Π° ΡƒΠ·Π»Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π».

Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ connection pool, Oracle прСдоставляСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Runtime Connection Load Balancing (RCLB). ВмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся ΠΏΡ€Π΅Π΄ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Ρ‚ΡƒΠ΄Π°, Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ (events) прилоТСния ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° ΡƒΠ·Π»Π°Ρ…. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° эти Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ происходит Ρ‡Π΅Ρ€Π΅Π· ONS (Oracle Notification Service). RCLB рСгулярно ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ (feedback) ΠΎΡ‚ ΡƒΠ·Π»ΠΎΠ² кластСра, ΠΈ connection pool Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (срСдняя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡƒΠ·Π»Π°), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСсылаСт RAC, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» строит сам Π² AWR. На ΠΈΡ… основании формируСтся required load advisory ΠΈ помСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ AQ (advanced querying), ΠΎΡ‚ΠΊΡƒΠ΄Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ONS ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΡΡ‚Π°Ρ транзакция Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Oracle

Π”ΠΎ сих ΠΏΠΎΡ€ Π²Ρ‹ знакомились с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ систСмы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Oracle: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ распрСдСлСниСм памяти, Π° Ρ‚Π°ΠΊΠΆΠ΅ способами ΠΈΡ… настройки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Oracle ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ запросы ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ SQL, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС взаимодСйствиС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Oracle происходит Π»ΠΈΠ±ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ΅ запросов SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ SQL (ΠΈΠ»ΠΈ PL/SQL), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚, Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅.

Вранзакция – это логичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Oracle, состоящая ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² SQL. Вранзакция начинаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ исполняСмого ΠΎΠΏΠ΅Ρ€Ρ‚Π°Ρ€Ρ‚ΠΎΡ€Π° SQL ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ фиксируСтСт ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Ѐиксация (commiting) Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ закрСпляСт ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ измСнСния, Π° ΠΎΡ‚ΠΊΠ°Ρ‚ (roll back) – ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, отмСняСт ΠΈΡ…. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ зафиксировали Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, всС ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ послС Π½Π΅Π΅, смогут Π²ΠΈΠ΄Π΅Ρ‚ΡŒ измСнСния, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ вашими транзакциями.

Когда транзакция Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ (скаТСм, ΠΈΠ·-Π·Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСктропитания), Ρ‚ΠΎ ΠΎΠ½Π° вся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°. Oracle ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС измСнСния, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ SQL, возвращая Π΄Π°Π½Π½Ρ‹Π΅ Π² исходноС состояниС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ). Π’Π΅ΡΡŒ процСсс построСн Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… – Ρ‚.Π΅. ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ «всС ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ».

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вставки строки описываСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ Oracle ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

Ѐиксация ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡Π΅Ρ‚Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ: фиксаций (commiting) ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ (rolling back) Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. НиТС ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ±Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°.

Ѐиксация Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

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

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ измСнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ, ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² SGA Π² Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΆΠ΅ спустя ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя послС фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ фиксациСй. Когда Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… фиксируСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΎΠ½Π° выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

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

НСзависимо ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° всСгда ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅.

Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…

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

Oracle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для обСспСчСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Позволяя ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅ΠΌΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² цСлях обновлСния. Π’Π°ΠΆΠ½ΠΎΠΉ характСристикой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Oracle являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎ большСй части происходят автоматичСски. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ дСталях Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ – Oracle Β«Π·Π° кулисами» позаботится ΠΎΠ± этом.

Oracle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. МодСль ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ примСняСтся для ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, Π° модСль раздСляСмой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ SELECT Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. МодСль раздСляСмой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ позволяСт нСскольким ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚Π΅ ΠΆΠ΅ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. МодСль ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² любой Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ строкам, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ обновлСнию, позволяя ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… мноТСству ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ COMMIT ΠΈΠ»ΠΈ ROLLBACK Oracle автоматичСски освобоТдаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ рСсурсы.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Oracle слоТны, ΠΈ Π²Ρ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π½ΠΈΠΌΠΈ Π² Π³Π»Π°Π²Π΅ 8, вмСстС с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Oracle обСспСчиваСт ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π΅ΠΉ записи

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

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

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ числа Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ количСства запросов Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, процСсс-ΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΆΡƒΡ€Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ запись ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ зафиксированной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΡƒ запросов Π½Π° Ρ„ΠΈΠΊΡΠ°Ρ†ΠΈΡŽ, Ссли ΠΎΡ‡Π΅Π½ΡŒ занят Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Вакая пакСтированная запись ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ мноТСствС зафиксированных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ называСтся Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ фиксациСй.

БистСмный Π½ΠΎΠΌΠ΅Ρ€ измСнСния

БистСмный Π½ΠΎΠΌΠ΅Ρ€ измСнСния, ΠΈΠ»ΠΈ SCN (system change number) – Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΎΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Oracle для отслСТивания состояния Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Когда Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ (SELECT) Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Ρ‚ΠΎ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚Π΅ состояния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, вставляСтС ΠΈΠ»ΠΈ удаляСтС строку, Ρ‚ΠΎ состояниС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Oracle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SCN для слСТСния Π·Π° всСми измСнСниями, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. SCN – это логичСская врСмСнная ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Oracle для упорядочивания событий, происходящих с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. SCN ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π½Π΅ послСдняя ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… – восстановлСниС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… послС сбоя.

SCN ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ Oracle сначала ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ… Π² SGA. Когда транзакция ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ»ΠΈ вставляСт Π΄Π°Π½Π½Ρ‹Π΅, Oracle сначала ΠΏΠΈΡˆΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ SCN Π² сСгмСнт ΠΎΡ‚ΠΊΠ°Ρ‚Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡ-ΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Π·Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ вносит запись ΠΎ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния, ΠΈ эта запись ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ SCN Π² сСгмСнт ΠΎΡ‚ΠΊΠ°Ρ‚Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡ-ΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ вносит запись ΠΎ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния, ΠΈ эта запись ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ SCN Π½ΠΎΠ²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ЀактичСски запись этого SCN Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Oracle.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΎΠΉ

Когда Π²Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ измСнСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ нСобходимости. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, нСобходимая для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая Π² основном состоит ΠΈΠ· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ измСнСнию, называСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ (Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ) ΠΈ хранится Π² записях ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ (undo records). ΠŸΡ€ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ROLLBACK Oracle ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти записи ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… исходными вСрсиями. Записи ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹ для восстановлСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСзафиксированныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ Π² согласованном состоянии.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Oracle ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ управляСт Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСгмСнтов ΠΎΡ‚ΠΌΠ΅Π½Ρ‹, Π΄Π²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ пространства undo ΠΈ установки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° UNDO_RETINTION (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, насколько Π΄ΠΎΠ»Π³ΠΎ Oracle Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ для вас записи ΠΎΠ± ΠΎΡ‚ΠΌΠ΅Π½Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ пространствС undo). ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ вашС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ пространство undo Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ достаточно большим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всСм срСдства рСтроспСктивы (flashback), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² вашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…; срСдства рСтроспСктивы Oracle ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… уровнях. НСкоторыС ΠΈΠ· Π½ΠΈΡ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Flashback Query, Flashback Versions Query ΠΈ Flashback Table ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Undo Advisor Oracle Ρ‡Π΅Ρ€Π΅Π· OEM для нахоТдСния идСального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… пространств undo ΠΈ идСальной Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ UNDO_RETENTION. ΠŸΠΎΡΡ€Π΅Π΄ΡΡ‚Π²ΠΎΠΌ статистики Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ использования пространства ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ для вашСго экзСмпляра.

Tags: Oracle Database, Вранзакция

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

10 Transactions

This chapter defines a transaction and describes how the database processes transactions.

This chapter contains the following sections:

Introduction to Transactions

All tasks of a transaction are performed or none of them are. There are no partial transactions. For example, if a transaction starts updating 100 rows, but the system fails after 20 updates, then the database rolls back the changes to these 20 rows.

The transaction takes the database from one consistent state to another consistent state. For example, in a banking transaction that debits a savings account and credits a checking account, a failure must not cause the database to credit only one account, which would lead to inconsistent data.

The effect of a transaction is not visible to other transactions until the transaction is committed. For example, one user updating the hr.employees table does not see the uncommitted changes to employees made concurrently by another user. Thus, it appears to users as if transactions are executing serially.

Changes made by committed transactions are permanent. After a transaction completes, the database ensures through its recovery mechanisms that changes from the transaction are not lost.

The use of transactions is one of the most important ways that a database management system differs from a file system.

Sample Transaction: Account Debit and Credit

To illustrate the concept of a transaction, consider a banking database. When a customer transfers money from a savings account to a checking account, the transaction must consist of three separate operations:

Decrement the savings account

Increment the checking account

Record the transaction in the transaction journal

Oracle Database must allow for two situations. If all three SQL statements maintain the accounts in proper balance, then the effects of the transaction can be applied to the database. However, if a problem such as insufficient funds, invalid account number, or a hardware failure prevents one or two of the statements in the transaction from completing, then the database must roll back the entire transaction so that the balance of all accounts is correct.

Figure 10-1 A Banking Transaction

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle
Description of «Figure 10-1 A Banking Transaction»

Structure of a Transaction

A database transaction consists of one or more statements. Specifically, a transaction consists of one of the following:

One or more data manipulation language (DML) statements that together constitute an atomic change to the database

One data definition language (DDL) statement

A transaction has a beginning and an end.

Beginning of a Transaction

When a transaction begins, Oracle Database assigns the transaction to an available undo data segment to record the undo entries for the new transaction. A transaction ID is not allocated until an undo segment and transaction table slot are allocated, which occurs during the first DML statement. A transaction ID is unique to a transaction and represents the undo segment number, slot, and sequence number.

The following example execute an UPDATE statement to begin a transaction and queries V$TRANSACTION for details about the transaction:

End of a Transaction

A transaction ends when any of the following actions occurs:

A user issues a COMMIT or ROLLBACK statement without a SAVEPOINT clause.

The database issues an implicit COMMIT statement before and after every DDL statement. If the current transaction contains DML statements, then Oracle Database first commits the transaction and then runs and commits the DDL statement as a new, single-statement transaction.

A user exits normally from most Oracle Database utilities and tools, causing the current transaction to be implicitly committed. The commit behavior when a user disconnects is application-dependent and configurable.

Applications should always explicitly commit or undo transactions before program termination.

A client process terminates abnormally, causing the transaction to be implicitly rolled back using metadata stored in the transaction table and the undo segment.

After one transaction ends, the next executable SQL statement automatically starts the following transaction. The following example executes an UPDATE to start a transaction, ends the transaction with a ROLLBACK statement, and then executes an UPDATE to start a new transaction (note that the transaction IDs are different):

Statement-Level Atomicity

A SQL statement that does not succeed causes the loss only of work it would have performed itself.

The unsuccessful statement does not cause the loss of any work that preceded it in the current transaction. For example, if the execution of the second UPDATE statement in Figure 10-1 causes an error and is rolled back, then the work performed by the first UPDATE statement is not rolled back. The first UPDATE statement can be committed or rolled back explicitly by the user.

The effect of the rollback is as if the statement had never been run.

Any side effects of an atomic statement, for example, triggers invoked upon execution of the statement, are considered part of the atomic statement. Either all work generated as part of the atomic statement succeeds or none does.

System Change Numbers (SCNs)

A system change number (SCN) is a logical, internal time stamp used by Oracle Database. SCNs order events that occur within the database, which is necessary to satisfy the ACID properties of a transaction. Oracle Database uses SCNs to mark the SCN before which all changes are known to be on disk so that recovery avoids applying unnecessary redo. The database also uses SCNs to mark the point at which no redo exists for a set of data so that recovery can stop.

SCNs occur in a monotonically increasing sequence. Oracle Database can use an SCN like a clock because an observed SCN indicates a logical point in time and repeated observations return equal or greater values. If one event has a lower SCN than another event, then it occurred at an earlier time with respect to the database. Several events may share the same SCN, which means that they occurred at the same time with respect to the database.

Every transaction has an SCN. For example, if a transaction updates a row, then the database records the SCN at which this update occurred. Other modifications in this transaction have the same SCN. When a transaction commits, the database records an SCN for this commit.

Overview of Transaction Control

Transaction control is the management of changes made by DML statements and the grouping of DML statements into transactions. In general, application designers are concerned with transaction control so that work is accomplished in logical units and data is kept consistent.

Transaction control involves using the following statements, as described in «Transaction Control Statements»:

The COMMIT statement ends the current transaction and makes all changes performed in the transaction permanent. COMMIT also erases all savepoints in the transaction and releases transaction locks.

The ROLLBACK statement reverses the work done in the current transaction; it causes all data changes since the last COMMIT or ROLLBACK to be discarded. The ROLLBACK TO SAVEPOINT statement undoes the changes since the last savepoint but does not end the entire transaction.

The SAVEPOINT statement identifies a point in a transaction to which you can later roll back.

The session in Table 10-1 illustrates the basic concepts of transaction control.

Table 10-1 Transaction Control

This statement ends any existing transaction in the session.

This statement updates the salary for Banda to 7000.

This statement updates the salary for Greene to 12000.

This statement rolls back the transaction to t3, undoing the update to Greene’s salary at t4. The sal_update transaction has not ended.

This statement updates the salary for Banda to 7050.

This statement updates the salary for Greene to 10950.

Oracle Database SQL Language Reference to learn about transaction control statements

Transaction Names

Transaction names provide the following advantages:

You can view transaction names along with transaction IDs in applications. For example, a database administrator can view transaction names in Oracle Enterprise Manager (Enterprise Manager) when monitoring system activity.

The database writes transaction names to the transaction auditing redo record, so you can use LogMiner to search for a specific transaction in the redo log.

Active Transactions

An active transaction has started but not yet committed or rolled back. In Table 10-1, the first statement to modify data in the sal_update transaction is the update to Banda’s salary. From the successful execution of this update until the ROLLBACK statement ends the transaction, the sal_update transaction is active.

Data changes made by a transaction are temporary until the transaction is committed or rolled back. Before the transaction ends, the state of the data is as follows:

The undo data contains the old data values changed by the SQL statements of the transaction. See «Read Consistency in the Read Committed Isolation Level».

Oracle Database has generated redo in the online redo log buffer of the SGA.

The redo log record contains the change to the data block and the change to the undo block. See «Redo Log Buffer».

Changes have been made to the database buffers of the SGA.

The rows affected by the data change are locked.

Other users cannot change the data in the affected rows, nor can they see the uncommitted changes. See «Summary of Locking Behavior».

Savepoints

A savepoint is a user-declared intermediate marker within the context of a transaction. Internally, this marker resolves to an SCN. Savepoints divide a long transaction into smaller parts.

If you use savepoints in a long transaction, then you have the option later of rolling back work performed before the current point in the transaction but after a declared savepoint within the transaction. Thus, if you make an error, you do not need to resubmit every statement. Table 10-1 creates savepoint after_banda_sal so that the update to the Greene salary can be rolled back to this savepoint.

Rollback to Savepoint

A rollback to a savepoint in an uncommitted transaction means undoing any changes made after the specified savepoint, but it does not mean a rollback of the transaction itself. When a transaction is rolled back to a savepoint, as when the ROLLBACK TO SAVEPOINT after_banda_sal is run in Table 10-1, the following occurs:

Oracle Database rolls back only the statements run after the savepoint.

In Table 10-1, the ROLLBACK TO SAVEPOINT causes the UPDATE for Greene to be rolled back, but not the UPDATE for Banda.

Oracle Database preserves the savepoint specified in the ROLLBACK TO SAVEPOINT statement, but all subsequent savepoints are lost.

In Table 10-1, the ROLLBACK TO SAVEPOINT causes the after_greene_sal savepoint to be lost.

Oracle Database releases all table and row locks acquired after the specified savepoint but retains all data locks acquired previous to the savepoint.

The transaction remains active and can be continued.

Oracle Database SQL Language Reference to learn about the ROLLBACK and SAVEPOINT statements

Oracle Database PL/SQL Language Reference to learn about transaction processing and control

Enqueued Transactions

Depending on the scenario, transactions waiting for previously locked resources may still be blocked after a rollback to savepoint. When a transaction is blocked by another transaction it enqueues on the blocking transaction itself, so that the entire blocking transaction must commit or roll back for the blocked transaction to continue.

In the scenario shown in Table 10-2, session 1 rolls back to a savepoint created before it executed a DML statement. However, session 2 is still blocked because it is waiting for the session 1 transaction to complete.

Table 10-2 Rollback to Savepoint Example

TimeSessionExplanation

Session 1 begins a transaction. The session places an exclusive lock on the Banda row (TX) and a subexclusive table lock (SX) on the table.

Session 1 locks the Greene row.

Session 2 attempts to update the Greene row, but fails to acquire a lock because session 1 has a lock on this row. No transaction has begun in session 2.

The Greene row is currently unlocked, so session 3 acquires a lock for an update to the Greene row. This statement begins a transaction in session 3.

Session 1 commits, ending its transaction. Session 2 is now enqueued for its update to the Greene row behind the transaction in session 3.

«Lock Duration» to learn more about when Oracle Database releases locks

Rollback of Transactions

A rollback of an uncommitted transaction undoes any changes to data that have been performed by SQL statements within the transaction. After a transaction has been rolled back, the effects of the work done in the transaction no longer exist.

In rolling back an entire transaction, without referencing any savepoints, Oracle Database performs the following actions:

Undoes all changes made by all the SQL statements in the transaction by using the corresponding undo segments

The transaction table entry for every active transaction contains a pointer to all the undo data (in reverse order of application) for the transaction. The database reads the data from the undo segment, reverses the operation, and then marks the undo entry as applied. Thus, if a transaction inserts a row, then a rollback deletes it. If a transaction updates a row, then a rollback reverses the update. If a transaction deletes a row, then a rollback reinserts it. In Table 10-1, the ROLLBACK reverses the updates to the salaries of Greene and Banda.

Releases all the locks of data held by the transaction

Erases all savepoints in the transaction

Ends the transaction

In Table 10-1, the ROLLBACK leaves the database in the same state as it was after the initial COMMIT was executed.

The duration of a rollback is a function of the amount of data modified.

Committing Transactions

A commit ends the current transaction and makes permanent all changes performed in the transaction. In Table 10-1, a second transaction begins with sal_update2 and ends with an explicit COMMIT statement. The changes that resulted from the two UPDATE statements are now made permanent.

When a transaction commits, the following actions occur:

The i nternal transaction table for the associated undo tablespace records that the transaction has committed. The corresponding unique SCN of the transaction is assigned and recorded in the transaction table. See «Serializable Isolation Level».

The log writer (LGWR) process writes remaining redo log entries in the redo log buffers to the online redo log and writes the transaction SCN to the online redo log. This atomic event constitutes the commit of the transaction.

Oracle Database releases locks held on rows and tables.

Users who were enqueued waiting on locks held by the uncommitted transaction are allowed to proceed with their work.

Oracle Database deletes savepoints.

In Table 10-1, no savepoints existed in the sal_update transaction so no savepoints were erased.

If modified blocks containing data from the committed transaction are still in the SGA, and if no other session is modifying them, then the database removes lock-related transaction information from the blocks. Ideally, the COMMIT cleans out the blocks so that a subsequent SELECT does not have to perform this task.

Oracle Database marks the transaction complete.

After a transaction commits, users can view the changes.

Typically, a commit is a fast operation, regardless of the transaction size. The speed of a commit does not increase with the size of the data modified in the transaction. The lengthiest part of the commit is the physical disk I/O performed by LGWR. However, the amount of time spent by LGWR is reduced because it has been incrementally writing the contents of the redo log buffer in the background.

The default behavior is for LGWR to write redo to the online redo log synchronously and for transactions to wait for the buffered redo to be on disk before returning a commit to the user. However, for lower transaction commit latency, application developers can specify that redo be written asynchronously so that transactions need not wait for the redo to be on disk and can return from the COMMIT call immediately.

Oracle Database PL/SQL Language Reference for more information on asynchronous commit

Overview of Autonomous Transactions

Autonomous transactions are useful for actions that must be performed independently, regardless of whether the calling transaction commits or rolls back. For example, in a stock purchase transaction, you want to commit customer data regardless of whether the overall stock purchase goes through. Additionally, you want to log error messages to a debug table even if the overall transaction rolls back.

Autonomous transactions have the following characteristics:

The autonomous transaction does not see uncommitted changes made by the main transaction and does not share locks or resources with the main transaction.

Changes in an autonomous transaction are visible to other transactions upon commit of the autonomous transactions. Thus, users can access the updated information without having to wait for the main transaction to commit.

Autonomous transactions can start other autonomous transactions. There are no limits, other than resource limits, on how many levels of autonomous transactions can be called.

Figure 10-2 Transaction Control Flow

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ scn oracle
Description of «Figure 10-2 Transaction Control Flow»

When you enter the executable section of an autonomous routine, the main routine suspends. When you exit the autonomous routine, the main routine resumes.

Overview of Distributed Transactions

Unlike a transaction on a local database, a distributed transaction alters data on multiple databases. Consequently, distributed transaction processing is more complicated because the database must coordinate the committing or rolling back of the changes in a transaction as an atomic unit. The entire transaction must commit or roll back. Oracle Database must coordinate transaction control over a network and maintain data consistency, even if a network or system failure occurs.

Two-Phase Commit

The two-phase commit mechanism guarantees that all databases participating in a distributed transaction either all commit or all undo the statements in the transaction. The mechanism also protects implicit DML performed by integrity constraints, remote procedure calls, and triggers.

The two-phase commit mechanism is transparent to users who issue distributed transactions. In fact, users need not even know the transaction is distributed. A COMMIT statement denoting the end of a transaction automatically triggers the two-phase commit mechanism. No coding or complex statement syntax is required to include distributed transactions within the body of a database application.

Oracle Database Administrator’s Guide to learn about the two-phase commit mechanism

In-Doubt Transactions

An in-doubt distributed transaction occurs when a two-phase commit was interrupted by any type of system or network failure. For example, two databases report to the coordinating database that they were prepared to commit, but the coordinating database instance fails immediately after receiving the messages. The two databases who are prepared to commit are now left hanging while they await notification of the outcome.

The recoverer ( RECO ) background process automatically resolves the outcome of in-doubt distributed transactions. After the failure is repaired and communication is reestablished, the RECO process of each local Oracle database automatically commits or rolls back any in-doubt distributed transactions consistently on all involved nodes.

In the event of a long-term failure, Oracle Database enables each local administrator to manually commit or undo any distributed transactions that are in doubt because of the failure. This option enables the local database administrator to free any locked resources that are held indefinitely because of the long-term failure.

If a database must be recovered to a past time, then database recovery facilities enable database administrators at other sites to return their databases to the earlier point in time. This operation ensures that the global database remains consistent.

Oracle Database Administrator’s Guide to learn how to manage in-doubt transactions

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *

TimeSession 1Session 2Session 3Explanation