6. Server Çok Kullanıcılı Veritabanını Başlatmak proserve sports2000 Veritabanı broker’ı Veritabanı Paylaşılan bellek Sunucu makine
7. Server Çok Kullanıcılı Bir Veritabanına Bağlanmak Veritabanı broker’ı Veritabanı Paylaşılan bellek Sunucu makine
8. İki İstemci Oturumu Başlatmak İstemci oturumlarını ikisiyle birlikte çalışacak şekilde ayırın
9. 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 Çok Kullanıcılı Erişimi Yönetmek Devamlılık İki kullanıcı da kaydı okuyabilir Veri bütünlüğü Biri kayda eriştiğinde diğeri aynı kayda yazamaz
10. Varsayılan Kilitleme Kaydı SHARE-LOCK ile okuma 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. SHARE-LOCK kilidini bir EXCLUSIVE-LOCK kilidine yükseltme isteği
11. 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 Önerilen Kilitleme A Kullanıcısı B Kullanıcısı A kullanıcısı kaydı değiştirirken EXCLUSIVE-LOCK kilidine sahiptir B kullancısı kaydı okurken NO-LOCK düzeyindedir
12. Bir Kayıt Kapsamı Ne Anlama Gelir? 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 Item ???
13. OrderLine Item Order Kayıt Kapsamını Belirlemek Order kayıt kapsamı 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.ItemnumFORMAT ">>9" LABEL "Item #" Item.ItemNameFORMAT "x(10)" Item.PriceFORMAT ">>9.99" Qty FORMAT ">>>". UPDATE Discount FORMAT ">9%". END. /*forline*/ END. /*forord*/ OrderLineve Item kayıt kapsamı Ayrıca transaction kapsamı
14. Kayıt kapsamı transaction kapsamına eşit Transaction kapsamı daha büyük Kayıt kapsamı daha büyük Kayıt Kapsamı ve Transaction Kapsamı T R T R T R
15. Alt-prosedur’ler ve Kayıt Kilitleme Transaction kapsamı /* Main procedure eRunTrans.p */ REPEAT: PROMPT-FOR Customer.CustNum. . . . SET CreditLimit. . . . DO: RUN eUpdOrder.p(. . .). END. END. /* Sub-procedure eUpdOrder.p */ . . . FOR EACH Order OF Customer: . . . SET Carrier. FOR EACH OrderLine OF Order: . . . ASSIGN Orderline.Price = ITEM.Price. . . . END. END. Siparişler ve ayrıntılarındaki tüm kilitler bu noktada serbest bırakılır
16. Customer Customer 5 Match Point Tennis JAL 5000 5 Match Point Tennis JAL 1000 Record Locking Contention İstemci oturumu 1 İstemci oturumu 2
17. Uygulama 1 : Kayıt Kapsamı ve Kilitleme Düzeyini Belirleme
18. 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 Deadlock A kullanıcısı B kullanıcısı A kullanıcısıSHARE-LOCK B kullanıcısı SHARE-LOCK Kullanıcı kilidi bırakana kadar diğer kullanıcı kayda yazamaz
19. 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 1 Fins 36.00 1 Fins 24.00 1 Fins 36.00 1 Fins 24.00 Kilitleme Stratejileri SHARE-LOCK SHARE-LOCK Varsayılan kilitleme EXCLUSIVE-LOCK NO-LOCK Kötümser kilitleme NO-LOCK NO-LOCK EXCLUSIVE-LOCK İyimser kilitleme
20. Customer Customer 5 Match Point Tennis JAL 1000 İstemci oturumu 1 İstemci oturumu 2 Varsayılan Kilitleme Metodunu Değiştirme FIND Customer USING CustNum NO-LOCK: 5 Match Point Tennis JAL 1000
21. 1 Fins 24.00 1 Fins 24.00 1 Fins 24.00 İyimser Kilitleme – Optimal Devamlılık A kullanıcısı B kullanıcısı A kullanıcısı SHARE-LOCK B kullanıcısıSHARE-LOCK 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
22. İyimser Strateji İçin Best Practise Kaydı NO-LOCK NO-ERROR ile çek Kullanıcı girdisini bekle Kaydı yeniden NO-LOCK ile çek ya da Kaydı RELEASE et TRANSACTION bloğu: Kaydı EXCLUSIVE-LOCK ile çek Varlığını doğrula Değişiklikleri kontrol et Aksi takdirde transaction’ı geri al Değişiklikleri kaydet
23. EXCLUSIVE-LOCK ile FIND CURRENT Kullanıcı kaydı DEĞİŞTİREMEZ 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
24. Customer Customer 5 Match Point Tennis JAL 1000 Kayıt Değişti mi? IF NOT CURRENT-CHANGED Customer THEN... Orijinal değerler Veritabanı Şimdiki değerler (değişmiş olabilir) 5 Match Point Tennis JAL 1000
25. Kayıt Kullanılabilir Durumda mı? FIND CURRENT Customer EXCLUSIVE-LOCK NO-ERROR. IF AVAILABLE Customer THEN . . . Evet ? Hayır Şimdi ASSIGN edilebilir Kullanıcıyı bilgilendir
26. Customer Kayıt Kilit Mi? FIND Customer USING CustNum. Varsayılan kilit = SHARE-LOCK 5 Match Point Tennis JAL 1000 FIND CURRENT Customer EXCLUSIVE-LOCK NO-WAIT NO-ERROR. IF LOCKED Customer THEN...
27. Yeniden dene? Kilitlendi mi, Yoksa Silindi Mi? Kilitli mi? Hayır Evet Kayıt silinmiş Evet Retry bayrağını ayarla
28. Uygulama 2 : Kaydın Kilitli Olup Olmadığını Öğrenme
29. İyimser Kilitleme – Tümü Birarada Kaydı NO-LOCK NO-ERROR ile çek Kullanıcı girdisini bekle Kaydı yeniden NO-LOCK ile çek ya da Kaydı RELEASE et TRANSACTION bloğu: Kaydı EXCLUSIVE-LOCK ile çek Varlığını doğrula Değişiklikleri kontrol et Aksi takdirde transaction’ı geri al Değişiklikleri kaydet