ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΎΠΊ

Π”ΠΈΠΏΠ»ΠΎΠΌΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ РаспрСдСлСнныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, запускаСмыС Π² Transact-SQL, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ структуру. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сцСнарий Transact-SQL выполняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Transact-SQL, которая ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. ЭкзСмпляр SQL Server Database Engine, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, становится ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ сСрвСром Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‚Π΅ΠΌ выполняСт… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΎΠΊ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. НормативныС ссылки
  • 2. Анализ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области
    • 2.1 ΠžΠ±Ρ‰Π΅Π΅ описаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области
    • 2.2 ОписаниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ
    • 2.3 ОписаниС Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ
    • 2.4 Бписок ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ
  • 3. Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств
  • 4. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ распрСдСлСнной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    • 4.1 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    • 4.2 РСализация рСляционной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
      • 4.2.1 ОписаниС Ρ‚Π°Π±Π»ΠΈΡ†
      • 4.2.2 ОписаниС прСдставлСний
      • 4.2.3 Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • 5. РаспрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ
    • 5.1 Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π Π‘Π”
    • 5.2 Настройка Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ
    • 5.3 РаспрСдСлСнныС запросы ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ
  • 6. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ распрСдСлСнными транзакциями
    • 6.1 Запуск распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ
    • 6.2 Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
    • 6.3 Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ
    • 6.4 Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ
    • 6.4.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ
  • 7. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ распрСдСлСнных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…
    • 7.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ раздСлСния
    • 7.2 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ схСмы раздСлСния
    • 7.3 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… индСксов
  • 8. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ распрСдСлСнных запросов
  • 8.1 План выполнСния запросов
  • 8.2 ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • 8.3 Врассировка запросов
  • 9. Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Π½ΠΈΠ΅
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Данная курсовая Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ транспортной ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ процСссы Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π‘Π£Π‘Π”.

ВранспортныС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ большоС количСство Π·Π°ΠΊΠ°Π·ΠΎΠ² Π½Π° Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ быстро ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‚ больший ΠΏΠ°Ρ€ΠΊ автотранспорта, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚оспособном состоянии. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Π°, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСссы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π‘Π£Π‘Π” Π½Π° Π±Π°Π·Π΅ Microsoft SQL Server 2012, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ большой спСктр возмоТностСй. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это упростит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π·Π°ΠΊΠ°Π·ΠΎΠ², ускорит ΠΈΡ… ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ статистику, Ρ‡Ρ‚ΠΎ благоприятно скаТСтся Π½Π° ΠΏΡ€ΠΈΠ±Ρ‹Π»ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

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

1. НормативныС ссылки

Π’ Π½Π°ΡΡ‚оящСй курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ссылки Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ руководящиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

Π“ΠžΠ‘Π’ 34. Ρ…Ρ…Ρ… «Π˜Π½Ρ„ормационная тСхнология. КомплСкс стандартов ΠΈ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‰ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ систСмы»

Π“ΠžΠ‘Π’ 19. Ρ…Ρ…Ρ… «Π•Π΄ΠΈΠ½Π°Ρ систСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ»

IEEE 830−1994 «Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° формирования спСцификаций ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния»

IEEE 829 — ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств

Π“ΠžΠ‘Π’ 28 806 «ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств. Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ»

Π“ΠžΠ‘Π’ 28 195 «ΠžΡ†Π΅Π½ΠΊΠ° качСства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств. ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния»

Π“ΠžΠ‘Π’ 9126 «Π˜Π½Ρ„ормационная тСхнология. ΠžΡ†Π΅Π½ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π₯арактСристики качСства ΠΈ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‰ΠΈΠ΅ указания ΠΏΠΎ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ»

Π“ΠžΠ‘Π’ Π  Π˜Π‘О/МЭК 92 991−93. Руководство ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. — Πœ.: Изд-Π²ΠΎ стандартов, 1994

2. Анализ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

2.1 ΠžΠ±Ρ‰Π΅Π΅ описаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

Π’ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΡ€Ρ‚Π½ΡƒΡŽ компанию ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π·Π°ΠΊΠ°Π·Ρ‹ Π½Π° Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π³Ρ€ΡƒΠ·Π°, вСс, ΠΏΡƒΠ½ΠΊΡ‚ отправлСния ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ назначСния. Компания ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΄Π°Ρ‚Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ, выставляСт Ρ†Π΅Π½Ρƒ. Π’ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ врСмя ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·Ρ‡ΠΈΠΊ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π³Ρ€ΡƒΠ·, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΈΡ‚ ΠΈ ΠΎΡ‚Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚.

2.2 ОписаниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

На Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏ Π³Ρ€ΡƒΠ·Π°, вСс, ΠΏΡƒΠ½ΠΊΡ‚ отправлСния ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ назначСния.

2.3 ОписаниС Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, Π΄Π°Ρ‚Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ, Ρ†Π΅Π½Ρƒ

2.4 Бписок ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ

Автомобили дСлятся ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΈΠΌΡ‹Ρ… Π³Ρ€ΡƒΠ·ΠΎΠ². ИмСя свободныС Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ…одящиС ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π³Ρ€ΡƒΠ·Π°, Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСтвлСна.

3. Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹Π±Ρ€Π°Π½ Microsoft SQL Server 2012 Π² Π²ΠΈΠ΄Ρƒ Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… возмоТностСй, доступности ΠΈ Π±ΠΎΠ³Π°Ρ‚ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Для программирования прилоТСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π” Π²Ρ‹Π±Ρ€Π°Π½Π° срСда Microsoft Visual Studio 2012 ΠΈ ΡΠ·Ρ‹ΠΊ C#, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ простотой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Microsoft Windows.

4. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ распрСдСлСнной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

4.1 ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ модСль Π Π‘Π” выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Рисунок 1 — ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ модСль

4.2 РСализация рСляционной Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

4.2.1 ОписаниС Ρ‚Π°Π±Π»ΠΈΡ†

Π’Π°Π±Π»ΠΈΡ†Π° Orders содСрТит свСдСния ΠΎ Π·Π°ΠΊΠ°Π·Π°Ρ… Π½Π° Π³Ρ€ΡƒΠ·ΠΎΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€, поставщик, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ, Π΄Π°Ρ‚Ρƒ заявки, Ρ‚ΠΈΠΏ Π³Ρ€ΡƒΠ·Π°, массу, ΠΏΡƒΠ½ΠΊΡ‚ назначСния, расстояниС Π΄ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния.

Π’Π°Π±Π»ΠΈΡ†Π° Criterias содСрТит Ρ‚ΠΈΠΏΡ‹ Π³Ρ€ΡƒΠ·ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ: Π½ΠΎΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ°, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° Transport содСрТит Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± Π°Π²Ρ‚отранспортС: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€, госномСр, ΠΌΠ°Ρ€ΠΊΡƒ автомобиля, модСль, Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ, минимальноС ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ расстояниС Ρ…ΠΎΠ΄ΠΊΠΈ, врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π΅.

Π’Π°Π±Π»ΠΈΡ†Π° TransportCriterias устанавливаСт соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ автотранспортом ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π³Ρ€ΡƒΠ·ΠΎΠ².

Π’Π°Π±Π»ΠΈΡ†Π° Timetable ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π·Π°Π½ΡΡ‚ΠΎΡΡ‚ΡŒ автотранспорта Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠ°Ρ… ΠΈ Π΄Π°Ρ‚Ρƒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠΈ.

4.2.2 ОписаниС прСдставлСний

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ «Π—апрос ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ+Π—Π°ΠΊΠ°Π·Ρ‹» ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π·Π°ΠΊΠ°Π·Π°Ρ… Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΈΠ΄Π΅ — Π² ΡˆΠ°ΠΏΠΊΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π° Ρ€ΡƒΡΡΠΊΠΎΠΌ языкС, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚ΠΈΠΏΠΎΠ² Π³Ρ€ΡƒΠ·ΠΎΠ² Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Ρ‚СкстовыС значСния.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ «Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹» являСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ прСдставлСния, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΊΠ°Π·Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², отсортированных ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ поставщика Π² ΠΏΡ€ΡΠΌΠΎΠΌ порядкС ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ потрСбитСля — Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ.

4.2.3 Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Рисунок 2 — Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π‘Π”

5. РаспрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ

5.1 Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π Π‘Π”

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

5.2 Настройка Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Для настройки Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ слияниСм Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ нСсколько шагов:

1. УбСдимся, Ρ‡Ρ‚ΠΎ АгСнт SQL Server Π²ΠΊΠ»ΡŽΡ‡Π΅Π½. Π’ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ SQL Server (рисунок 3) Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ «Π‘Π»ΡƒΠΆΠ±Ρ‹ SQL Server» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ АгСнт SQL Server находится Π² ΡΠΎΡΡ‚оянии «Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚», ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π΅Π³ΠΎ Ссли это Π½Π΅ Ρ‚Π°ΠΊ.

Рисунок 3 — ДиспСтчСр ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ SQL Server

2. Π’ MS SQL Server Management Studio Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ мСню «Π Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ» Π½Π°ΠΆΠ°Ρ‚ΡŒ ПКМ Π½Π° «Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ» ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ» .

Рисунок 4 — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

3. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ «ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ слияниСм», Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π·Π° Π½Π΅Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ АгСнт ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимков (рисунок 5), ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΊ Π½Π΅ΠΉ (учСтная запись с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π’Ρ‹ Π²Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€, Π² Π½Π°ΡˆΠ΅ΠΌ случаС ASH-PCAsh), Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ >>|», ввСсти имя ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΡΠ½ΠΎΠ²Π° Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ» .

4. Π’ ΠΏΡƒΠ½ΠΊΡ‚Π΅ «Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ» Π½Π°ΠΆΠ°Ρ‚ΡŒ ПКМ Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ подписку» (рисунок 6).

5. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ настройки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² ΠΎΠΊΠ½Π΅ «ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ» ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сСрвСр-подписчик ΠΈ Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ бСзопасности АгСнта SQL Server Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Π΅ 3 (рисунок 7). ΠΠ°ΠΆΠ°Ρ‚ΡŒ «Π“ΠΎΡ‚ΠΎΠ²ΠΎ >>|» ΠΈ ΡΠ½ΠΎΠ²Π° «Π“ΠΎΡ‚ΠΎΠ²ΠΎ». РСпликация настроСна! ПослС синхронизации всС Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ пСрСнСсСны Π² Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Рисунок 5 — ΠœΠ°ΡΡ‚Π΅Ρ€ создания ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ Рисунок 6 — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ подписки Рисунок 7 — ΠœΠ°ΡΡ‚Π΅Ρ€ создания подписки

5.3 РаспрСдСлСнныС запросы ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Π΅ΠΈΡ… Π±Π°Π·Π°Ρ… Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ ΠΊ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ запросам. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти запросы Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ сбоСв Π½Π΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ рассогласования, обратимся ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ транзакциям. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… транзакциях написано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

6. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ распрСдСлСнными транзакциями

6.1 Запуск распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π² Transact-SQL ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами:

1. Π―Π²Π½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ BEGIN DISTRIBUTED TRANSACTION.

НапримСр, для измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Orders Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… expert_db ΠΈ Π΅Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ re_ex, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос:

use expert_db

go

begin distributed transaction;

update Orders set Supplier = 'Izmenen' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Supplier = 'Izmenen' Where ID = '1017';

commit transaction;

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

2. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ распрСдСлСнный запрос. Π’ ΡΡ‚ΠΎΠΌ случаС транзакция автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° Π΄ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ просто опустим слово distributed, ΠΏΡ€ΠΈ этом эффСкт ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ запроса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ ΠΆΠ΅.

Рисунок 8 — Π Π°Π±ΠΎΡ‚Π° распрСдСлСнной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

6.2 Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ транзакция ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ, послС выполнСния всСх дСйствий Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ инструкциСй COMMIT TRANSACTION, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ инструкциСй ROLLBACK TRANSACTION. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС всС измСнСния сохранятся Π² Π±Π°Π·Π΅, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ — ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹.

Π’ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ:

use expert_db

go

begin transaction

update Orders set Customer = 'x' Where ID = '1016';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'x' Where ID = '1016';

rollback transaction

begin transaction

update Orders set Customer = 'z' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'z' Where ID = '1017';

commit transaction

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° измСнится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строка с ID 1017, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ измСнСния Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ 1016 ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ.

6.3 Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

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

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ 2 запроса Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Для удобства создадим Π΄Π²Π° ΠΎΠΊΠ½Π° запроса с ΡΡ€Π΅Π΄Π΅ SQL Management Studio. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ ΠΊΠΎΠ΄ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π² ΡΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

— Π’ранзакция 1

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Mass = '1000' WHERE ID = '1008'

— Π’ранзакция 2

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Distance = '100' WHERE ID = '1008'

COMMIT TRANSACTION

ΠŸΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ запросы. Вранзакция 2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ выполнСния Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° транзакция 1 Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‡Π΅Π½Π°. Π”ΠΎΠΏΠΈΡˆΠ΅ΠΌ строку COMMIT TRASACTION Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ запрос сразу ΠΆΠ΅ выполнится.

6.4 Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡΠΎΠ±ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ ΡΠΎΡ€Π΅Π²Π½ΡƒΡŽΡ‚ΡΡ Π·Π° Ρ€Π΅ΡΡƒΡ€ΡΡ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. НапримСр, пСрвая транзакция установила Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ рСсурса А, ΠΈ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурс Π‘, Π° Π² ΡΡ‚ΠΎ ΠΆΠ΅ врСмя вторая транзакция, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠ°Ρ рСсурс Π‘, нуТдаСтся Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ рСсурса А.

КаТдая ΠΈΠ· ΡΡ‚ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° другая снимСт свою Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚. Если Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ внСшнСго воздСйствия ΠΈΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания), Ρ‚ΠΎ ΡΡ‚Π° ситуация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ бСсконСчно.

РаньшС Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ прСдставляли собой ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ SQL Server позволяСт ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅.

6.4.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

ΠŸΡ€ΠΎΡ‰Π΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² SQL Server с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ запросов ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Management Studio. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈ Π²Ρ‚орая Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ строки, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ порядкС.

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ ΠΊΠΎΠ΄ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ запроса ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ:

— Π’ранзакция 1 — Π¨Π°Π³ 1

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Mass = '1000' WHERE ID = '1008'

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ запросов Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

— Π’ранзакция 2 — Π¨Π°Π³ 2

USE expert_db

BEGIN TRANSACTION

UPDATE Transport SET MaxDistance = '1000' WHERE ID = '1'

UPDATE Orders SET Distance = '100' WHERE ID = '1008'

COMMIT TRANSACTION

Вторая транзакция ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ снятиС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ 1018 Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Orders.

ВСрнСмся Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠΌ запрос.

— Π’ранзакция 1 — Π¨Π°Π³ 3

UPDATE Transport SET InRepair = '1' WHERE ID = '1'

COMMIT TRANSACTION

Вранзакция 2 Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, поэтому всС Π΅Ρ‰Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ строку 1 Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Transport. Вранзакция 1 обращаСтся ΠΊ ΡΡ‚ΠΎΠΉ строкС, продолТая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ 2 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π§Π΅Ρ€Π΅Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ SQL Server ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π°Π²Ρ‚оматичСски устранит Π΅Π΅ (рисунок 9).

Рисунок 9 — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

7. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ распрСдСлСнных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

7.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ раздСлСния

Для удобства обращСния ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ объСмам Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Orders Π½Π° 3 большиС части: Π·Π°ΠΊΠ°Π·Ρ‹ Π΄ΠΎ 2006 Π³ΠΎΠ΄Π°, с 2006 ΠΏΠΎ 2011 Π³ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠΎΡΠ»Π΅ 2011 Π³ΠΎΠ΄Π°. Для этого обратимся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ раздСлСния. Под Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ раздСлСния понимаСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ† Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎ ΡΡ‚ΠΎΠ»Π±Ρ†Ρƒ Π΄Π°Ρ‚Ρ‹ Π½Π° 3 части, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»Π΅Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄Π°Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π°Π·Π΄Π΅Π» Π΄ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ саму Π³Ρ€Π°Π½ΠΈΡ†Ρƒ:

USE expert_db

CREATE PARTITION FUNCTION fnyears (Date)

AS RANGE LEFT FOR VALUES

('31/12/2005', '31/12/2010');

7.2 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ схСмы раздСлСния

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ раздСлСния, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ схСму раздСлСния. Π‘Ρ…Π΅ΠΌΠ° раздСлСния позволяСт Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π±Π°Π·Π΅ сущСствуСт ΠΎΠ΄Π½Π° файловая Π³Ρ€ΡƒΠΏΠΏΠ°, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ 3 для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Orders. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ добавляСт 3 Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ с ΠΎΠ΄Π½ΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ:

USE expert_db;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test1fg;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test2fg;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test3fg;

GO

ALTER DATABASE expert_db

ADD FILE

(

NAME = test1dat1,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt1dat1. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test1fg;

ALTER DATABASE expert_db

ADD FILE

(

NAME = test2dat2,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt2dat2. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test2fg;

GO

ALTER DATABASE expert_db

ADD FILE

(

NAME = test3dat3,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt3dat3. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test3fg;

GO

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ схСму раздСлСния. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ создаСт схСму раздСлСния, помСщая Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹:

CREATE PARTITION SCHEME psYears AS PARTITION fnyears TO (test1fg, test2fg, test3fg);

7.3 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… индСксов

Для быстрого обращСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, создадим кластСризованный индСкс Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Orders. ΠŸΡ€ΠΈ создании ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π½Π° Ρ€Π°Π½Π½ΠΈΡ… этапах проСктирования ΠΏΠΎΠ»Π΅ ID ΡƒΠΆΠ΅ содСрТало кластСризованный индСкс, поэтом сдСлаСм Π΅Π³ΠΎ нСкластСризованным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ кластСризованный индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½. Для этого Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ ПКМ Π½Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ», Π² ΠΏΠΎΠ»Π΅ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ кластСризованный» Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π½Π΅Ρ‚» (рисунок 10).

Рисунок 10 — ИзмСнСниС индСкса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кластСризованный индСкс. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ выполняСт это дСйствиС:

CREATE clustered INDEX Order_ID ON Orders (ID, Date) ON psYearsAll (Date);

8. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ распрСдСлСнных запросов

8.1 План выполнСния запросов

План выполнСния запросов позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ запроса. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ информация Π² Π²ΠΈΠ΄Π΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠ΅ ΠΏΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΡƒ ΠΌΡ‹ΡˆΠΈ. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 11 прСдставлСн ΠΏΠ»Π°Π½ выполнСния запроса. Для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Π½Π° выполнСния запроса Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ запросов послС Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния» Π² ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, Π»ΠΈΠ±ΠΎ Π² ΠΌΠ΅Π½ΡŽ «Π—апрос» .

Рисунок 11 — План выполнСния запроса.

8.2 ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

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

Рисунок 12 — БистСмный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€

Как ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, запрос Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ 100 000 строк Π² ΠΈΠ½Π΄ΡƒΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ процСссор Π½Π° 20−25%.

8.3 Врассировка запросов

Врассировка запросов — это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инструмСнт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов. Врассировка Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС происходящиС Π½Π° SQL Server процСссы, показывая сколько рСсурсов ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Ρ‹Π»ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ трассировку запросов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ SQL Server Profiler, Π² ΠΌΠ΅Π½ΡŽ «Π€Π°ΠΉΠ»» Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ трассировку…», ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ SQL Server, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ события ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Запустим трассировку ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ происходит Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния запроса (рисунок 13).

Рисунок 13 — Врассировка запросов

9. Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Π½ΠΈΠ΅

Π’Π•ΠœΠ 4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ распрСдСлСнными транзакциями

1 Π¦Π΅Π»ΠΈ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ

1) Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ управлСния распрСдСлСнными транзакциями.

2) Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ.

3) ΠžΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅.

4) ΠžΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚.

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

2.1 ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

MS SQL Server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Π΄Π°Π»Π΅Π΅ DTC) для обслуТивания Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… нСсколько сСрвСров, — ΠΈΡ… ΠΏΠΎΠ΄Ρ‚вСрТдСния ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π°. Π‘Π»ΡƒΠΆΠ±Π° DTC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΡƒΡŽ схСму подтвСрТдСния многосСрвСрных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ доступны ΠΎΠ±Π° сСрвСра, ΠΏΡ€ΠΈ этом слуТба DTC выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

1. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠ² отправляСт сообщСниС ΠΎ Π³ΠΎΡ‚овности ΠΊ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ.

2. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠ² выполняСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ этап подтвСрТдСния, гарантируя Ρ‚Π΅ΠΌ самым ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

3. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠ² сообщаСт ΠΎΠ± ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ.

4. Волько послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС сСрвСры ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎ Π³ΠΎΡ‚овности ΠΊ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ, сообщСниС ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ отправляСтся всСм ΠΈΠΌ.

Если логичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ слуТбы DTC Π½Π΅ Ρ‚рСбуСтся. Волько ΠΊΠΎΠ³Π΄Π° выполняСтся ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, транзакция рассматриваСтся ΠΊΠ°ΠΊ распрСдСлСнная.

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ слуТбой SQL Server, которая запускаСтся ΠΈ ΠΎΡΡ‚анавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SQL Server Service Manager.

Волько ΠΎΠ΄ΠΈΠ½ экзСмпляр этой слуТбы запускаСтся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ сСрвСрС, нСзависимо ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° установлСнных ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° Π½Π΅ΠΌ экзСмпляров SQL Server. ЀактичСскоС имя слуТбы — msdtc. Π΅Ρ…Π΅, потрСбляСмый объСм памяти — 2,5 ΠœΠ±Π°ΠΉΡ‚.

Π‘Π»ΡƒΠΆΠ±Π° DTC Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, ΠΊΠΎΠ³Π΄Π° инициируСтся распрСдСлСнная транзакция, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС послСдняя Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой.

2.2 Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ РаспрСдСлСнныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, запускаСмыС Π² Transact-SQL, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ структуру. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ сцСнарий Transact-SQL выполняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Transact-SQL, которая ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. ЭкзСмпляр SQL Server Database Engine, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, становится ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ сСрвСром Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‚Π΅ΠΌ выполняСт Π»ΠΈΠ±ΠΎ распрСдСлСнныС запросы ΠΊ ΡΠ²ΡΠ·Π°Π½Π½Ρ‹ΠΌ сСрвСрам, Π»ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ распрСдСлСнныС запросы ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сСрвСр автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚) (MS DTC), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ связанныС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры.

Когда сцСнарий ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ COMMIT ΠΈΠ»ΠΈ ROLLBACK, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ экзСмпляр SQL Server Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ MS DTC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт процСссом Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΠΎΠΉ фиксации ΠΈΠ»ΠΈ увСдомляСт связанныС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ своих Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Transact-SQL, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ распрСдСлСнныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, нСмногочислСнны, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ большая Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ производится Π²Π½ΡƒΡ‚Ρ€ΠΈ экзСмпляра SQL Server Database Engine ΠΈ MS DTC.

2.2.1 Запуск распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π² Transact-SQL ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ способами:

1. Π―Π²Π½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ BEGIN DISTRIBUTED TRANSACTION.

НапримСр, для измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Orders Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… expert_db ΠΈ Π΅Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ re_ex, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос:

use expert_db

go

begin distributed transaction;

update Orders set Supplier = 'Izmenen' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Supplier = 'Izmenen' Where ID = '1017';

commit transaction;

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

2. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ распрСдСлСнный запрос. Π’ ΡΡ‚ΠΎΠΌ случаС транзакция автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π° Π΄ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ просто опустим слово distributed, ΠΏΡ€ΠΈ этом эффСкт ΠΎΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ запроса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ ΠΆΠ΅.

Рисунок 14 — Π Π°Π±ΠΎΡ‚Π° распрСдСлСнной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

2.2.2 Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π§Ρ‚ΠΎΠ±Ρ‹ транзакция ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ, послС выполнСния всСх дСйствий Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ инструкциСй COMMIT TRANSACTION, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ инструкциСй ROLLBACK TRANSACTION. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС всС измСнСния сохранятся Π² Π±Π°Π·Π΅, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ — ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ:

use expert_db

go

begin transaction

update Orders set Customer = 'x' Where ID = '1016';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'x' Where ID = '1016';

rollback transaction

begin transaction

update Orders set Customer = 'z' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'z' Where ID = '1017';

commit transaction

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° измСнится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строка с ID 1017, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ измСнСния Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ 1016 ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ.

2.3 ИспользованиС распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ МногиС администраторы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²ΡΡ‚Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ для поддСрТания Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ распрСдСлСнныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΅ΡΡ‚ΡŒ свои ΠΏΠ»ΡŽΡΡ‹ ΠΈ ΠΌΠΈΠ½ΡƒΡΡ‹. Π Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ — слоТный процСсс, связанный с ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… снимков, своСврСмСнной синхронизациСй ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ этой систСмы Π² Ρ€Π°Π±ΠΎΡ‚оспособном состоянии, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ распрСдСлСнной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ увСличиваСтся Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° Π²ΡΠ΅ ΡƒΠ·Π»Ρ‹ распрСдСлСнной Π±Π°Π·Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ запрос выполняСтся Π½Π΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ сСрвСрС, Π° ΡΡ€Π°Π·Ρƒ Π½Π° Π²ΡΠ΅Ρ…. Какой ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ администратор.

2.4 Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ происходит для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, другая Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ привСсти ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΡŽ Π»ΠΎΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Пока пСрвая транзакция Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, вторая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ 2 запроса Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Для удобства создадим Π΄Π²Π° ΠΎΠΊΠ½Π° запроса с ΡΡ€Π΅Π΄Π΅ SQL Management Studio. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π² ΡΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

— Π’ранзакция 1

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Mass = '1000' WHERE ID = '1008'

— Π’ранзакция 2

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Distance = '100' WHERE ID = '1008'

COMMIT TRANSACTION

ΠŸΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ запросы. Вранзакция 2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ выполнСния Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° транзакция 1 Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‡Π΅Π½Π°. Π”ΠΎΠΏΠΈΡˆΠ΅ΠΌ строку COMMIT TRASACTION Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ запрос сразу ΠΆΠ΅ выполнится.

2.5 Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡΠΎΠ±ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ ΡΠΎΡ€Π΅Π²Π½ΡƒΡŽΡ‚ΡΡ Π·Π° Ρ€Π΅ΡΡƒΡ€ΡΡ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. НапримСр, пСрвая транзакция установила Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ рСсурса А, ΠΈ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурс Π‘, Π° Π² ΡΡ‚ΠΎ ΠΆΠ΅ врСмя вторая транзакция, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠ°Ρ рСсурс Π‘, нуТдаСтся Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ рСсурса А.

КаТдая ΠΈΠ· ΡΡ‚ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° другая снимСт свою Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚. Если Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ внСшнСго воздСйствия ΠΈΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания), Ρ‚ΠΎ ΡΡ‚Π° ситуация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ бСсконСчно.

РаньшС Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ прСдставляли собой ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ SQL Server позволяСт ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅.

2.5.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠŸΡ€ΠΎΡ‰Π΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² SQL Server с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ запросов ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Management Studio. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈ Π²Ρ‚орая Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ строки, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ порядкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ запроса ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ:

— Π’ранзакция 1 — Π¨Π°Π³ 1

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Mass = '1000' WHERE ID = '1008'

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ запросов Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

— Π’ранзакция 2 — Π¨Π°Π³ 2

USE expert_db

BEGIN TRANSACTION

UPDATE Transport SET MaxDistance = '1000' WHERE ID = '1'

UPDATE Orders SET Distance = '100' WHERE ID = '1008'

COMMIT TRANSACTION

Вторая транзакция ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ снятиС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡΡ‚Ρ€ΠΎΠΊΡƒ 1018 Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Orders.

Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ запрос.

— Π’ранзакция 1 — Π¨Π°Π³ 3

UPDATE Transport SET InRepair = '1' WHERE ID = '1'

COMMIT TRANSACTION

Вранзакция 2 Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, поэтому всС Π΅Ρ‰Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ строку 1 Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Transport. Вранзакция 1 обращаСтся ΠΊ ΡΡ‚ΠΎΠΉ строкС, продолТая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ 2 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π§Π΅Ρ€Π΅Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ SQL Server ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π°Π²Ρ‚оматичСски устранит Π΅Π΅ (рисунок 15).

Рисунок 15 — Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

3 Задания Для своСго Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π Π‘Π” (см. Π·Π°Π΄Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ 3) Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

1. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ слуТбы DTC.

2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запуск Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ всСми Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ способами, описанными Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

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

5. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

6. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅.

4 ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ распрСдСлСнной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

2. КакиС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ способы выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ?

3. Какова структура ΠΆΡƒΡ€Π½Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ?

4. ΠšΠ°ΠΊΠΎΠ²Ρ‹ отличия распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Transact-SQL ΠΎΡ‚ MS DTC?

5. Π’ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ использования распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ вмСсто Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…?

6. КакиС Ρ‚ΠΈΠΏΡ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚?

7. Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ?

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

1. ΠœΠ°Π»Ρ‹Ρ…ΠΈΠ½Π° М. П. Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡΠ½ΠΎΠ²Ρ‹, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, использованиС. — Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2006. — 528 с.

2. НильсСн Пол. Microsoft SQL Server 2005. Библия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: «Π˜.Π”. Π’ΠΈΠ»ΡŒΡΠΌΡ», 2008. — 1232 с.

3. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Π€Π°ΡƒΠ»Π΅Ρ€, КСндалл Π‘ΠΊΠΎΡ‚Ρ‚ — UML. ΠžΡΠ½ΠΎΠ²Ρ‹ — 2002.

4. Павловская Π’. А. C#. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня: ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ для Π²ΡƒΠ·ΠΎΠ². — Π‘Пб.: ΠŸΠΈΡ‚Π΅Ρ€, 2007. — 432 с.

5. Π¨ΠΈΠ»Π΄Ρ‚ Π“. ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ C#. ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: Π’ΠΈΠ»ΡŒΡΠΌΡ, 2004.

6. ΠžΡ€Π»ΠΎΠ² Π‘. А. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. — Π‘Пб.: ΠŸΠΈΡ‚Π΅Ρ€, 2003. — 480с.

7. Π›Π΅ΠΎΠ½Π΅Π½ΠΊΠΎΠ² А. Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ UML. — BHV Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2001. — 304с.

8. Иванова Π“. Π‘. ВСхнология программирования: Π£Ρ‡Π΅Π±Π½ΠΈΠΊ для Π²ΡƒΠ·ΠΎΠ². — Πœ.: Изд-Π²ΠΎ ΠœΠ“Π’Π£ ΠΈΠΌ. Π. Π­. Π‘Π°ΡƒΠΌΠ°Π½Π°, 2002.

9. ЛяхСвич А. Π“. Π›Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡΠ΅Ρ‚Π΅Π²Ρ‹ΠΌ тСхнологиям, 2002 Π³. — 165 с

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

Листинг ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… запросов

Π’Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Transport

" SELECT * FROM Transport Where ID IN (select TransportID FROM TransportCriterias WHERE CriteriaID = '" + order. FreightCriteriaID + «') and ID not in (select TransportID from Timetable Where Date = '» + order. Date + «') and Capacity >= '» + order. Mass + «' and MinDistance <= '» + order. Distance + «' and MaxDistance >='» + order. Distance + «' and InRepair = 0»

SELECT * FROM Transport

SELECT CriteriaID FROM TransportCriterias WHERE TransportID = '" + tID + «'

delete from TransportCriterias

INSERT INTO TransportCriterias values ((select ID from Transport where RegNumber Like '" + RegNumber + «'), «+ CriteriaID + «)

SELECT ID, RegNumber FROM Transport

select distinct «+ TransportCrit + «FROM Transport where «+ TransportCrit + «is not null

Π’Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Criterias

SELECT * FROM Criterias Where [Level] = '" + Level + «' order by Name

SELECT Name FROM Criterias Where ID = '" + ID + «' order by Name

select * from Criterias where Parent = (select ID from Criterias where Name like '" + ParentName + «') order by Name

SELECT * FROM Criterias Where Name LIKE '" + Name + «' and [Level] = '» + Level + «' order by Name

SELECT ID FROM Criterias Where [Name] LIKE '" + Name + «'

SELECT ID FROM Criterias Where [Parent] = '" + ParentID + «'

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Criterias

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Π΅ транзакция

insert into Criterias ([Parent], [Level], [Name]) values ('0','0','" + Name + «')

insert into Criterias ([Parent], [Level], [Name]) values ((select id from criterias where name like '" + Parent + «'),'» + Level + «','» + Name + «')

Запросы Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅

delete from Orders where FreightCriteriaID =" + Find (Name)

delete from Criterias where [Name] like '" + Name + «'

delete from Orders where FreightCriteriaID IN (SELECT ID FROM Criterias Where Parent LIKE '" + ParentID + «')

delete from Criterias where [Parent] = '" + ParentID + «'

delete from TransportCriterias where [CriteriaID] = '" + ID + «'

delete from Criterias where [ID] = '" + ID + «'

delete from TransportCriterias where [CriteriaID] IN (SELECT ID FROM Criterias Where Parent LIKE '" + ParentID + «')

delete from Criterias where [Parent] = '" + ParentID + «'

delete from Criterias where [ID] = '" + ID + «'

delete from Orders where [ID] = '" + ID. ToString () + «'

delete from TimeTable where [OrderID] = '" + ID. ToString () + «'

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Orders

insert into orders (Supplier, Customer, Date, FreightCriteriaID, Mass, Destination, Distance) values ('" + os. Supplier + «','» + os. Custumer + «','» + os.Date.ToString () + «',» + os.FreightCriteriaNameID.ToString () + «,» + os.Mass.ToString () + «,'» + os. Destination + «',» + os. Distance + «);

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Timetable

insert into Timetable (TransportID, OrderID, [Date]) values ((select ID from Transport Where RegNumber = '" + RegNumber + «'),(select MAX (ID) from Orders),'» + Date + «');

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ поиска

USE expert_db;

GO

CREATE PROCEDURE Find @FName varchar (20)

AS

SELECT @FName = '%' + RTRIM (@FName) + '%';

SELECT *

FROM Orders

WHERE Supplier LIKE @FName;

Запуск Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

USE expert_db;

GO

EXEC Find @FName = 'Π°';

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования

use expert_db

go

Create procedure Existance

@Type nvarchar (100)

AS

IF EXISTS (SELECT * FROM Orders WHERE FreightCriteriaID = (select id from Criterias Where Name = @Type))

Print 'ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сущСствуСт'

else

Print 'ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚'

Запуск Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

use expert_db

go

execute Existance 'ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹'

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ агрСгирования

use expert_db

go

create procedure sum_mass_by_supp

@Supp varchar (50)

as

select Supplier, sum (Mass) AS Summ from Orders group by Supplier Having Supplier = @Supp

Запуск Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

use expert_db

go

execute sum_mass_by_supp 'Владос'

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ распрСдСлСнной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

use expert_db

go

begin /*distributed*/ transaction;

update Orders set Supplier = 'Izmenen' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Supplier = 'Izmenen' Where ID = '1017';

commit transaction;

ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

use expert_db

go

Declare @Transa varchar (10) = 'Transa1';

begin transaction @Transa;

update Orders set Customer = 'x' Where ID = '1016';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'x' Where ID = '1016';

rollback transaction @Transa;

begin transaction;

update Orders set Customer = 'z' Where ID = '1017';

Update [ASH-PC]. re_ex.dbo.Orders set Customer = 'z' Where ID = '1017';

commit transaction

Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

— Π’ранзакция 1 — Π¨Π°Π³ 1

USE expert_db

BEGIN TRANSACTION

UPDATE Orders SET Mass = '1000' WHERE ID = '1008'

— Π’ранзакция 2 — Π¨Π°Π³ 2

USE expert_db

BEGIN TRANSACTION

UPDATE Transport SET MaxDistance = '1000' WHERE ID = '1'

UPDATE Orders SET Distance = '100' WHERE ID = '1008'

COMMIT TRANSACTION

— Π’ранзакция 1 — Π¨Π°Π³ 3

UPDATE Transport SET InRepair = '1' WHERE ID = '1'

COMMIT TRANSACTION

БозданиС индСкса

USE expert_db;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test1fg;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test2fg;

GO

ALTER DATABASE expert_db

ADD FILEGROUP test3fg;

GO

— Adds one file for each filegroup.

ALTER DATABASE expert_db

ADD FILE

(

NAME = test1dat1,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt1dat1. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test1fg;

ALTER DATABASE expert_db

ADD FILE

(

NAME = test2dat2,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt2dat2. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test2fg;

GO

ALTER DATABASE expert_db

ADD FILE

(

NAME = test3dat3,

FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL11. MSSQLSERVERMSSQLDATAt3dat3. ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB

)

TO FILEGROUP test3fg;

GO

USE expert_db

CREATE PARTITION FUNCTION fnyears (Date)

AS RANGE LEFT FOR VALUES

('31/12/2005', '31/12/2010');

CREATE PARTITION SCHEME psYears AS PARTITION fnyears TO (test1fg, test2fg, test3fg);

CREATE clustered INDEX Order_ID ON Orders (ID, Date) ON psYearsAll (Date);

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС

USE expert_db;

GO

SET NUMERIC_ROUNDABORT OFF;

SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON;

GO

CREATE VIEW vOrders

WITH SCHEMABINDING

AS

SELECT dbo.Orders.Supplier AS ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ, dbo.Orders.Customer AS ΠŸΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŒ, dbo.Orders.Date AS Π”Π°Ρ‚Π°, dbo.Criterias.Name AS НаимСнованиС, dbo.Orders.Mass AS ВСс, dbo.Orders.Destination AS АдрСс,

dbo.Orders.Distance AS РастояниС, dbo.Orders.ID as oID, dbo.Criterias.ID AS cID

FROM dbo. Criterias INNER JOIN

dbo.Orders ON dbo.Criterias.ID = dbo.Orders.FreightCriteriaID

GO

—Create an index on the view.

CREATE UNIQUE CLUSTERED INDEX IDX_V1

ON vOrders (oID, cID);

GO

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ