13 Ağustos 2007 Pazartesi

İş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.

11 Ağustos 2007 Cumartesi

ColdFusion 8 yeni özellikler ve AJAX desteği

Abobe.com'da ColdFusion 8 yeni özellikler sayfası. Başarılı bir sayfa. cfdiv etiketi YouTube videosu. cfajaxproxy etiketi YouTube videosu.

ColdFusion 8'in yeni özelliklerini anlatan çok iyi bir sayfa var Adobe.com'da. Tüm geliştiricilerin okumasında fayda var. Adobe'ye geçişten sonra, ColdFusion belgelendirmeleri daha ayrıntılı ve daha iyi hale geldi:

http://www.adobe.com/products/coldfusion/features/

etiketi:

http://www.youtube.com/watch?v=whjPKSqPl6c

etiketi:

http://www.youtube.com/watch?v=JkQuW285qtM

25 Temmuz 2007 Çarşamba

SQL Server LDF dosyasını silme

Sistem çalışırken LDF dosyalarını silmek mümkün. İnternette konuyla ilgili çeşitli yöntemler aktarılmaktadır. Sistemi durdurmadan nasıl yapılacağı pek anlatılmaz. Bu yazıda, bir yöntemden bahsedilmektedir.

1) Recovery Model'e "Simple" ayarlayın:




2) LDF dosyalarını silin veya yeni LDF dosyaları ekleyin:



3) Recovery Model'i geri alın.

14 Temmuz 2007 Cumartesi

'Reverse AJAX'

AJAX'ın çok önemli bir eksikliği var; tek yönlülük. İstemci tarafı yazılım sunucuya başvurmadığı sürece, güncel bilgi edinilemiyor. Yazı, bu eksikliği gideren 'Reverse AJAX' yaklaşımına değinmektedir.

AJAX; iyi, güzel, pratik. Fakat çok önemli bir sıkıntısı var; sunucudaki bilgi güncellendiğinde istemcideki bilgi anında nasıl güncellenecek? Her 30 saniyede bir kere sunucu HttpRequest ile kontrol mü edilecek? Hmmm. Kolay ve pratik bir yöntem, ama çok önemli dezavantajları var; sunucu yorulur, istemci yazılım yorulur, bantgenişliğine yük biner, istemci tarafı ânında güncellenemez (finans uygulamaları) vs... Bu sorunların çözümü için teknik yaklaşım şu şekilde olmalıdır; bir bilgi güncellendiğinde, sunucunun kendisi istemcilere yeni bilgiyi göndermelidir. İşte bu teknolojik yaklaşıma bugünlerde 'Reverse AJAX' deniyor. Konu hakkında güzel, az, öz ve ilginç bir kaynak: http://www.reverseajax.com/

Not: AJAX frameworkleriyle ilgili olarak harika bir konferans söz konusu. Oturumların kısa özetleri yayında. Hangi AJAX/Javascript Framework'ü seçilmeli sorusunun yanıtını bulmaya yardımcı olabilir: http://ajaxexperience.techtarget.com/west/html/frameworks.html