Upload
kaan-verdioglu
View
263
Download
2
Embed Size (px)
Citation preview
Bölüm 8 : Kayıt Kilitlerini Yönetmek
Bu dersi tamamladığımız zaman şunları yapabileceksiniz;
• Çok kullanıcılı bir ortam oluşturmak• Devamlılığı ve kayıt kilitlerini açıklamak• Optimistik kilit stratejisini uygulamak• Transaction kapsamı < kayıt kapsamı durumunda devamlılığı artırmak
Çok Kullanıcılı Veritabanı
Veritabanı
Sunucu makineCONNECT sp
orts2000
CONNECT sports2000
CONNECT sports2000
Paylaşılan bellek
Veritabanı broker’ı
Server
Çok Kullanıcılı Veritabanını Başlatmak
Veritabanı
proserve sports2000
Sunucu makine
Paylaşılan bellek
Veritabanı broker’ı
Server
Çok Kullanıcılı Bir Veritabanına Bağlanmak
Veritabanı
Sunucu makine
Paylaşılan bellek
Veritabanı broker’ı
Server
Çok Kullanıcılı Erişimi Yönetmek
Devamlılık
Veri bütünlüğü
1 Fins 24.00
1 Fins 24.00 1 Fins 24.00
İki kullanıcı da kaydı okuyabilir
Biri kayda eriştiğinde diğeri aynı kayda yazamaz
Varsayılan Kilitleme
Kaydı SHARE-LOCK ile okuma
SHARE-LOCK kilidini bir EXCLUSIVE-LOCK kilidine yükseltme isteği
REPEAT: PROMPT-FOR Customer.CustNum. FIND Customer USING CustNum NO-ERROR. IF AVAILABLE Customer THEN DO: DISPLAY Name Discount CreditLimit.
UPDATE Discount CreditLimit. END.END.
Önerilen Kilitleme
1 Fins 24.00
1 Fins 24.00 1 Fins 24.00
A Kullanıcısı B Kullanıcısı
B kullancısı kaydı okurken NO-LOCK düzeyindedir
A kullanıcısı kaydı değiştirirken EXCLUSIVE-LOCK kilidine sahiptir
Bir Kayıt Kapsamı Ne Anlama Gelir?
Item
forord:
FOR EACH Order WHERE OrderNum < 5:
DISPLAY OrderNum Terms SalesRep. forline:
FOR EACH OrderLine OF Order, EACH ITEM OF OrderLine:
DISPLAY Linenum FORMAT ">9" LABEL "Line#“ Item.Itemnum FORMAT ">>9" LABEL "Item #" Item.ItemName FORMAT "x(10)" Item.Price FORMAT ">>9.99" Qty FORMAT ">>>".
UPDATE Discount FORMAT ">9%".
END. /*forline*/
END. /*forord*/
Order
OrderLine
Kayıt Kapsamını Belirlemek
forord:FOR EACH Order WHERE OrderNum < 5: DISPLAY OrderNum Terms SalesRep. forline: FOR EACH OrderLine OF Order, EACH ITEM OF OrderLine: DISPLAY Linenum FORMAT ">9" LABEL "Line#" Item.Itemnum FORMAT ">>9" LABEL "Item #" Item.ItemName FORMAT "x(10)" Item.Price FORMAT ">>9.99" Qty FORMAT ">>>". UPDATE Discount FORMAT ">9%". END. /*forline*/END. /*forord*/
OrderLine ve Item kayıt kapsamıAyrıca transaction kapsamı
Order kayıt kapsamı
OrderLine
Item
Order
Kayıt Kapsamı ve Transaction Kapsamı
Kayıt kapsamı transaction kapsamına eşit
Transaction kapsamı daha büyük
Kayıt kapsamı daha büyük
T R T RT
R
Alt-prosedur’ler ve Kayıt KilitlemeTransaction kapsamı/* Main procedure eRunTrans.p */
REPEAT: PROMPT-FOR Customer.CustNum. . . . SET CreditLimit. . . . DO: RUN eUpdOrder.p(. . .). END.END.
Siparişler ve ayrıntılarındaki tüm kilitler bu noktada serbest bırakılır
/* Sub-procedure eUpdOrder.p */. . .FOR EACH Order OF Customer: . . . SET Carrier. FOR EACH OrderLine OF Order: . . . ASSIGN Orderline.Price = ITEM.Price. . . . END.END.
Record Locking Contention
Customer
5 Match Point Tennis JAL 5000
Customer
5 Match Point Tennis JAL 1000
İstemci oturumu 1 İstemci oturumu 2
Deadlock
1 Fins 24.00
1 Fins 24.00
A kullanıcısı B kullanıcısı
A kullanıcısıSHARE-LOCK
B kullanıcısı SHARE-LOCK
1 Fins 24.00
Kullanıcı kilidi bırakana kadar diğer kullanıcı kayda yazamaz
Kilitleme Stratejileri
Varsayılan kilitleme
1 Fins 24.00
1 Fins 24.00
1 Fins 24.00
SHARE-LOCK SHARE-LOCK
Kötümser kilitleme
1 Fins 36.00
1 Fins 24.00
EXCLUSIVE-LOCK NO-LOCK
İyimser kilitleme
1 Fins 36.00
1 Fins 24.00
NO-LOCK NO-LOCK
EXCLUSIVE-LOCK
1 Fins 24.00
1 Fins 24.00
Varsayılan Kilitleme Metodunu Değiştirme
Customer
5 Match Point Tennis JAL 1000
İstemci oturumu 1
Customer
İstemci oturumu 2
FIND Customer USING CustNum NO-LOCK:
5 Match Point Tennis JAL 1000
İyimser Kilitleme – Optimal Devamlılık
1 Fins 24.00
1 Fins 24.00
A kullanıcısı B kullanıcısı
1 Fins 24.00
Diğer kullanıcı SHARE-LOCK düzeyini bıraktıktan sonra kullanıcının kaydı değiştirmek için EXCLUSIVE-LOCK düzeyine yükselmeye ihtiyacı vardır
A kullanıcısı SHARE-LOCK
B kullanıcısıSHARE-LOCK
İyimser Strateji İçin Best Practise
Kaydı NO-LOCK NO-ERROR ile çekKullanıcı girdisini bekle
Kaydı yeniden NO-LOCK ile çek ya daKaydı RELEASE et
TRANSACTION bloğu: Kaydı EXCLUSIVE-LOCK ile çek Varlığını doğrula Değişiklikleri kontrol et Aksi takdirde transaction’ı geri alDeğişiklikleri kaydet
EXCLUSIVE-LOCK ile FIND CURRENT
PROMPT-FOR Customer.CustNum.FIND Customer USING CustNum NO-LOCK NO-ERROR.. . .. . . FIND CURRENT Customer EXCLUSIVE-LOCK NO-ERROR.
Kullanıcı kaydı DEĞİŞTİREBİLİR
Kullanıcı kaydı DEĞİŞTİREMEZ
Kayıt Değişti mi?
Customer
5 Match Point Tennis JAL 1000
CustomerVeritabanı
Orijinal değerler
Şimdiki değerler(değişmiş olabilir)
IF NOT CURRENT-CHANGED Customer THEN...
5 Match Point Tennis JAL 1000
Kayıt Kullanılabilir Durumda mı?
?
FIND CURRENT Customer EXCLUSIVE-LOCK NO-ERROR. IF AVAILABLE Customer THEN . . .
Şimdi ASSIGN edilebilirKullanıcıyı bilgilendir
EvetHayır
Kayıt Kilit Mi?
FIND CURRENT Customer EXCLUSIVE-LOCK NO-WAIT NO-ERROR.IF LOCKED Customer THEN...
Customer
FIND Customer USING CustNum.Varsayılan kilit =
SHARE-LOCK
5 Match Point Tennis JAL 1000
Kilitlendi mi, Yoksa Silindi Mi?
Kayıt silinmiş
HayırEvet
Kilitli mi?
Yeniden dene?
Evet
Retry bayrağını ayarla
İyimser Kilitleme – Tümü Birarada
Kaydı NO-LOCK NO-ERROR ile çekKullanıcı girdisini bekle
Kaydı yeniden NO-LOCK ile çek ya daKaydı RELEASE et
TRANSACTION bloğu: Kaydı EXCLUSIVE-LOCK ile çek Varlığını doğrula Değişiklikleri kontrol et Aksi takdirde transaction’ı geri alDeğişiklikleri kaydet
Bir BROKER’ı Başlatmak ve Durdurmak
Veritabanı
proserve sports2000
Sunucu makine
Paylaşılan bellek
Broker
Server
proshut sports2000
Paylaşılan bellek
Sunucu makine