| comfort | 16.02.2005 - 12:46:30 |
| Herkese iyi çalışmalar diliyorum;
Firebird 1.5 VTYS kullanıyorum.Firebird serverım anamakinaya kurulu ve diğer terminaldeki kullanıcılar bu servera bağlanarak vt'ye ulaşıyor.Delphide transaction ın isolation levelini read commited olarak ayarladım(Diğer hepsinide denedim) | |
| coderlord | 16.02.2005 - 13:18:45 |
| Bunu yapabilmen için transaction'lar ve isolation level'lar hakkında iyi bilgi sahibi olman gerektiği için sana Interbase 6'nın pdf'lerini öneriyorum. Transaction başlığı altında hangi level, hangisinin update'ine izin verir, hangisi vermez sorusunun cevabını bulabilir ve istediğinizi yapabilirsiniz.
Firebird'un sayfasında dökümanlar bölümünde bu pdf'leri bulabilirsiniz. En azından şunu söyleyeyim. Read commited NOWAIT transactionlar, transaction oturumu başladığından itibaren veritabanına yapılan ve commit edilen değişiklikleri görebilir. (Mesela snapshot trans. göremez. Snapshot'lar transaction başlatılmadan öncekileri görebilir.) Ancak başka bir read commited trans. daha önce insert veya update yapmışsa ve değişiklikleri commit etmemişse, önceki trans.'nda yapılacak bir değişiklik isteği "lock conflict" ile sonuçlanır. Diğer trans. commit etmesi beklenir. Read commited WAIT olsa idi, diğer trans. commit edene kadar beklenecek, commit edince de değişikliği yapacaktı. | |
| comfort | 16.02.2005 - 17:25:08 |
| @coderlord cevabın için teşekkürler ama benim farkettiğime göre isolation leveller bu konuda biraz yetersiz kalıyor.Şöyle bir yolda var.Tablonun sonuna "Kilit " diye boolean bir alan ekleyip hangi kayıtta çalışıyorsam onun kilit alanını True yaparım işim bitincede False yaparım ama bu hiç efektif bir yol değil bence.Bu işi VT kendisi yapsın istiyorum koskoca firebird bunu yapamayacakmı (ki öyleyse yazıklar olsun) | |
| coderlord | 16.02.2005 - 17:29:01 |
| Yetersiz olan nedir anlamadım?
Kilit alanını true yaptığında kullanıcın kayıtta nasıl çalışmaya devam edecek? Çok kullanıcılı bir uygulamada aynı anda kilit alanını true yaparlarsa ne yapılacak? Boğuşmak zorunda olduğun çok şey var. Ancak transaction belgelerini okursan istediğine ulaşabilirsin diyorum halen. | |
| comfort | 16.02.2005 - 18:05:50 |
Yetersiz olan nedir anlamadım?
Kilit alanını true yaptığında kullanıcın kayıtta nasıl çalışmaya devam edecek? coderlord beni yanlış anladın sanırım.Kilit diye bir alan yarattığımda sorunlarım çözülecek tahminimce.Benim demek istediğim programda yavaşlamaya sebep olabilirmi endişesindeyim . Yetersiz olan şey ise bu işi isolation level in yapmaması. Sürekli deadlock oluyor. | |
| sadettinpolat | 16.02.2005 - 18:25:17 |
| fb 1.5 te
Select ... From Table [Where ...] [Order By ...] For Update With Lock bu tarz bir kullanım mevcut. ama normal projelerimde hiç kullanmadım. bildiğim kadarıyla deadlock hatasını vermesinin nedeni kullanıcılardan birisi x kaydını değiştirmiş ardından post işlemini yapmış fakat commit etmemiştir. bu durumda 2. kullanıcı x kaydını düzenleyip post komutunu verdiğinde deadlock hatası ile karşılaşır. bu durumda post işlemine bir try except koyup deadlock hatası aldığın zaman bunu kullanıcıya bildirir ardından ne yapmak istediğini kullanıcıya sorarsın. duruma göre hareket edersin. nasıl yapılacağı hakkında pdf lere bakabilir veya googledan http://www.google.com/search?hl=tr&q=firebird+lock&lr= olarak aratıp ilk bulunan sayfaya bakabilirsin :) | |
| comfort | 17.02.2005 - 09:27:12 |
fb 1.5 te
Select ... From Table [Where ...] [Order By ...] For Update With Lock hemen deniyorum umarım işimi görür | |
| comfort | 17.02.2005 - 10:26:44 |
| Evet sanırım problem çözüldü gibi ama sorgudan 'for update' deyimini çıkarmam gerekti yani
select * from my_table where id=5 with lock
kodunu bir IBQuery nesnesinin içinde çalıştırıyorum sanırım düzgün çalışıyo.Ama for update eklediğimde hiç kayıt getirmiyor.IBSQL ile denedim gene çalışmadı.Burada for update deyiminin olması gereklimi yada bana ne faydası var. | |
| gkimirti | 17.02.2005 - 10:29:26 |
| aynı sql ile ikinci bir kullanıcı baglandıgında sorun cıkıyormu,
yani kayıtları select etmek icn bir kilit konmus ise diger kullanıcı goremeyebilir. o yuzden sadece update icin kilit atılıyordur. bu konuda daha onceden bir kac yazısma gecmisti forumda arayarak bulabilirsiniz | |
| comfort | 17.02.2005 - 11:22:47 |
| hayır çok denedim başka kullanıcı bağlandığında sadece kilitli olan kayıda erişemiyor ki benim istediğimde tam olarak buydu.:D Diğer kayıtlara erişebiliyor.Nasıl release edieceğini araştırıyorum sanırım rollback veya commit edince kaydı bırakıyor .Şimdi tek mesele kullanıcıya türkçe bir mesaj verdirmek. Yani: Şuan bu kayıt üzerinde işlem yapılıyor.Lütfen daha sonra deneyin gibi bi mesaj bunun için firebird hata kodları gerekli zannediyorum veya başka nasıl yapılabilir | |
| comfort | 17.02.2005 - 11:42:48 |
:alkis: :D :P
Everything OK Arkadaşlar şimdilik bir sorun yok gibi yardımcı olan herkese teşekkür ederim Allah yolunuzu açık etsin | |