İşlevsel tasarım hataları ve SQL Server Management Studio
İşlevsel tasarım, hayatın her aşamasında var ve önemli. SQL Server 2005 client'ı SQL Server Management Studio'daki ufak bir işlevsel tasarım hatasının, onlarca sitenin durmasına nasıl neden olduğunu okuyun.
Olay: "New Query" düğmesiyle bir pencere açıldı ve bir SQL yazıldı. Bir tablodan diğerine
INSERT INTO ... SELECT FROM....
...ifadesiyle kayıt aktarıldı. "New Query" ile yeni bir pencere daha açıldı. Bu kez, doldurulan tablodaki kayıt sayısı
SELECT count(*) FROM ...
ile saydırılmak istendi. Fakat, bu SQL hiç cevap vermedi. Birkaç kez "Execute" edilir ama işe yaramadı. Bu arada, SQL Server'ı kullanan ColdFusion siteleri tamamıyla kapandı. ColdFusion hizmet veremez hale geldi.
Soru: Sizce sorun nedir?
Yanıt: Açılan ilk New Query penceresindeki INSERT ifadesini "commit" etmek unutulmuştur. Commit edilmemiş bir TRANSACTION işlemi mevcut olduğundan, SQL Server, tabloda COUNT(*) işlemi yaptırmadı. Benzer şekilde, sitelerdeki SQL ifadeleri bekletildi. Çünkü, commit edilmemiş INSERT ifadesi için tablo kilitlenmiş ("lock") durumdadır. SQL Server yanıt vermediği için, hem SQL Server'da hem de ColdFusion'da açık connection sayısı artar, artar, ColdFusion kilitlenir.
Çözüm: Açılan ilk Query penceresinin kapatılması gerekiyor. Zira; pencere kapatılmadığı sürece, TRANSACTION'nun commit edilmesi mümkün değildir; "commit edeyim mi" diye tek onay mesajı pencere kapatılırken görüntülenmektedir, hiçbir yerde "Commit" düğmesi yoktur. Pencereler kapatılmış, TRANSACTION'lar commit edilmiş, sorunlar ortadan kalkmıştır.
SQL Server 2005 client'ındaki diğer bir işlevsel tasarım sorunu, yanlış veritabanında işlemler yapmanıza neden olabilir!:
Sorun: Client'ın araç çubuğunun sol kısmındaki New Query düğmesini kullanırsanız, "rastgele" bir veritabanına bağlantı kurulur ve bir SQL penceresi açılır. Eğer, bağlantının hangi veritabanına kurulduğunu kontrol etmezseniz, yanlış veritabanında işlem yapmanız işten bile değildir!
Çözüm: Araç çubuğundaki New Query düğmesini oradan kaldırın. Veritabanında bir SQL çalıştırmak için, veritabanını sağ tıklatın; New Query komutunu verin. Böylece; seçtiğiniz veritabanına bağlantı kurulacaktır.
0 yorum:
Yorum Gönder