Foydalanuvchilarni boshqarish. Foydalanuvchilar



Yüklə 44,52 Kb.
səhifə9/13
tarix13.12.2022
ölçüsü44,52 Kb.
#74230
1   ...   5   6   7   8   9   10   11   12   13
Narziyev Asomiddin databaza lab2

Izolyatsiya darajalari
Izolyatsiya darajalaridan foydalanib, ma’lumotlar bazasiga parallel murojaatda qaysi muammolar yuzaga kelishi mumkinligini va qaysi birining oldini olish kerakligini belgilash mumkin. Database Engine komponenti ma`lumotlarga parallel murojaat qilishni boshqaradigan quyidagi beshta izolyatsiya darajasini qo`llab-quvvatlaydi:

  • READ UNCOMMITTED

  • READ COMMITTED

  • REPEATABLE READ

  • SERIALIZABLE

  • SNAPSHOT

Izolyasiya darajasi SET instruksiyasining TRANSACTION ISOLATION LEVEL parametri orqali o’rnatiladi



READ UNCOMMITTED izolyasiya darajasi
READ UNCOMMITTED izolyatsiya darajasi tranzaktsiyalar o'rtasida eng oddiy izolyatsiyani ta'minlaydi, chunki u o`qishni boshqa operasiyalardan umuman izolyasiya qilmaydi. Tranzaksiya ushbu izolyatsiya darajasida yozuvni olganda, u hech qanday qulflanmaydi va mavjud bo'lgan qulflarni inobatga olmaydi. Bunday operasiya tomonidan o`qilgan ma`lumotlar nomutanosib bo’lishi mumkin. Ya’ni tranzaksiya boshqa bir faol tranzaksiya tomonidan yangilangan ma`lumotlarni o`qiydi. Agar u faol tranzaksiya keyinchalik qilgan o’zgarishlarini bekor qilsa, unda birinchi tranzaksiya hech qachon mavjud bo'lmagan ma`lumotlarni o`qigan bo’ladi.
READ UNCOMMITTED izolyatsiya darajasi 3 ta amalga ruxsat beradi: “iflos o`qishlar”(dirty read), takrorlanmaydigan o`qishlar va fantomlar.
READ UNCOMMITTED izolyatsiya darajasi faqat ma`lumotlarning aniqligi muhim bo'lmagan hollarda yoki ma`lumotlar kamdan-kam o`zgartirilganda foydalanilishi lozim.
Misol: 2 ta tranzaksiya bitta yozuvni bir vaqtning o’zida o’zgartirmoqda. “Tranzaksiya 1” o’zgarishi “Tranzaksiya 2” tomonidan bekor qilinadi. 2 ta tranzaksiya boshlanishidan oldin “Value” qiymati “1” ga teng bo’lsin.




Tranzaksiya 1

Tranzaksiya 2




UPDATE Table1
SET Value = Value + 5
WHERE Id = 1;

SELECT Value


FROM Table1
WHERE Id = 1;



UPDATE Table1
SET Value = Value + 7
WHERE Id = 1;

SELECT Value


FROM Table1
WHERE Id = 1;



Natija:

Value = 6

Value = 8

Farza qilamiz, “Tranzaksiya 1” birinchi o’qib oldi, “Tranzaksiya 2” esa birinchi update-ni bajarib, o’zgarishni saqladi(ya’ni 1+7=8), keyin “Tranzaksiya 1” o’zgarishni saqladi(1+5=6 bo’ladi, 1+7+5=13 bo’lmaydi, chunki “Tranzaksiya 1” Value-ning “1” qiymatini oldin o’qib bo’lgandi). Bu hodisa o’zgarishlarning yoqolib qolishi deyiladi.
Yuqoridagi holatga o’xshash, Value-ning qiymati oldin o’zgaruvchiga o’qib olinadi.




Tranzaksiya 1

Tranzaksiya 2




BEGIN TRAN;

DECLARE @Value INT;


SELECT @Value = Value


FROM Table1
WHERE Id = 1;

WAITFOR DELAY '00:00:10';


UPDATE Table1


SET Value = @Value + 5
WHERE Id = 1;

COMMIT TRAN;


SELECT Value


FROM Table1
WHERE Id = 1;



BEGIN TRAN;

DECLARE @Value INT;


SELECT @Value = Value


FROM Table1
WHERE Id = 1;

UPDATE Table1


SET Value = @Value + 7
WHERE Id = 1;

COMMIT TRAN;


SELECT Value


FROM Table1
WHERE Id = 1;



Natija:

Value = 6

Value = 8



Yüklə 44,52 Kb.

Dostları ilə paylaş:
1   ...   5   6   7   8   9   10   11   12   13




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin