Category Archives: DATABASE

ECLIPSE İÇİN QUANTUM DB

Hangi Java mail grubuna yada forumuna bakarsanız bakın konu dönüp dolaşıp IDE (Integrated Development Environment) konusuna gelmiÅŸtir. Hatta bir kısım Javacı arkdaÅŸlar bu tartışmalardan ve belirsizlikten bunalıp kendilerini .NET platformunun dolayısıyla Visual Studio ‘nun sıcak kollarına atmışlardır. Her ne kadar Visual Studio gibi kur ve kullan baÅŸka da birÅŸey yapma tarzında yada daha modern bir ifadeyle ALL-IN-ONE bir IDE ‘ye sahip olmasak da Javacılar için de vazgeçilmez hatta yavaÅŸ yavaÅŸ standart haline gelmeye baÅŸlayan Eclipse var. (Bir kere ayarla her yerde kullan.)

Aslında bu tip bir ihtiyaç her uygulama geliÅŸtiricinin hayatında var. Yani uygulama geliÅŸtirirken herÅŸeyin bir arada olması en azından basitçe iÅŸinizi görecek araçların tek bir yerde toplanması önemlidir.(Ciddi durumlarda Aqua Data Studio, Rapid SQL yada TOAD gibi araçlara ihtiyaç olabiliyor.) Bu nedenle Visual Studio ‘nun hakkının verilmesi gerektiÄŸine inanıyorum.

Eclipse ‘e dönecek olursak default olarak gelen eklentilerle zaten Javacıların iÅŸini fazlasıyla görecektir ama ihtiyaçlar deÄŸiÅŸtikçe yeni eklentiler kurarak daha da zenginelÅŸtirmek gerekebilir. Bu noktada en büyük sıkıntı doÄŸru eklentiyi seçme konusunda yaÅŸanır. (Eclipse için yüzlerce plugin -eklenti- mevcut)

quantum2.jpg  Bitirme projem sırasında Visual Studio ‘da en sevdiÄŸim ve sıklıkla kullandığım özelliklerden bir  tanesi de Server Explorer idi. Hatta eÄŸer baÄŸlantı kuracağınız sunucu yerelinizde deÄŸilse SQL  Server 2005 Management Studio ‘dan daha hızlı çalıştığını da söyleyebilirim. Bu güzel özelliÄŸi Eclipse ‘e de kazandırmak gerekli diye düşünürken karşıma Quantum DB eklentisi çıktı. JDBC tabanlı bu güzel plugin ile hem veritabanı sunucunuzda ne var ne yok visual bir ÅŸekilde görebilirsiniz hem de SQL sorgularınızı çalıştırabilirsiniz.

Quantum DB ‘yi Eclipse dahil etmek çok kolay ama burada karşınıza bir GEF (Graphical Editing Framework) plugin sorunu çıkabilir.Öncelikle Eclipse GEF ‘in doÄŸru sürümünü eklemeli , ardından da Quantum DB kurulumuna geçmelisiniz. ( Note: Quantum needs the GEF plugin to work, so you have to install it before installing Quantum)

Eclipse ‘e plugin eklemek için ben genellikle web update ‘i tercih etmiyorum. Onun yerine plugini bilgisayarıma indirip Eclipse ‘e ekliyorum , bu sayede ileride farklı bir Eclipse ‘e de kurma ÅŸansım oluyor. (Plugin dosyalarını kopyalayıp yapıştırmak her zaman olumlu sonuçlar doÄŸurmuyor o nedenle bu yöntem daha saÄŸlıklı !)

Kullandığınız Eclipse sürümü için uygun GEF pluginini buradan indirebilirsin. İndirdiÄŸiniz zip dosyasını uygun bir yere extract ettikten sonra Help -> Software Updates ->Find and Install yolunu takip edin. Search For New Futures To Install seçeneÄŸini seçtikten sonra ilerleyin ve bir sonraki adımda New Local Site butonuna tıklayın. Açılan pencereden az önce plugini extract ettiÄŸiniz dizini seçin ve tamam diyerek bir sonraki adıma geçin. Kullanıcı sözleÅŸmesini de onayladıktan sonra kurulum tamamlanacaktır ve pluginin düzgün bir ÅŸekilde çalışabilmesi için Eclipse ‘i baÅŸtan baÅŸlatın.

GEF eklentisini kurduktan sonra buradan Quantum DB ‘yi indirin ve GEF ‘i kurarken izlediÄŸiniz adımların aynısını tekrarlayın. EÄŸer herhangi bir hata almadıysanız Eclipse ‘i yeniden baÅŸlattıktan sonra eklentiniz kullanımıma hazır.

Window -> Open Perspective -> Other -> Qunatum DB yolunu izleyerek Quantum DB perspektifine geçebilirsiniz. Sonra da Window -> Show View yolu ile bu perspektif içerisinde görülmesini istediğiniz Quantum DB bileşenlerini seçebilirsiniz.

quan.jpg  Artık Quantum DB ‘nin görsel ayarları tamam. Tek yapmanız gereken Veritabanı          sunucunuzun çalışır halde olup olmadığını kontrol etmek ve Database Bookmarks alanına New Bookmark ile eklemek. Burada en önemli nokta uygun sürücüyü Quantum DB ‘ye göstermek. Açılan JDBC Driver penceresinden Add Driver ile veritabanı yönetim sisteminize ait sürücüyü eklemeniz gerekir. (İlgili sürücüleri kullandığınız DBMS ‘in üreticisine ait web sitesinden indirebilirsiniz.) Bir sonraki adımda da ilgili DBMS için gerekli baÄŸlantı bilgilerini verip, bu bookmark ‘a bir ad vererek iÅŸleminizi tamamlayabilirsiniz. ( MySql için yandaki resimde örnek bir baÄŸlantı gerçekleÅŸtirdim.)

Quantum DB ile ilgili baÅŸlangıçta sizlere lazım olacak bilgileri bu yazıda aktarmaya çalıştım. Bu güzel aracın diÄŸer özelliklerini keÅŸfetmek sizlere kalıyor. Fırsat buldukça farklı Eclipse pluginlerini inceleyip , deneyimlerimi sizlerle paylaÅŸamaya çalışacağım. Åžimdilik benden bu kadar . SaÄŸlıcakla kalın…

SQL SERVER 2005 ‘DE FILLFACTOR KAVRAMI

sqlserver.jpgBlogumdaki SQL Server 2005 ile ilgili önceki yazılarımda SQL Server Storage Engine ‘in biraz sorunlu olduÄŸundan bahsetmiÅŸtim. Hal böyle olunca verilerimizi SQL Server üzerinde tutarken daha da dikkatli olmamız gerekiyor. Ben de bu konuda dikkat etmeniz gereken noktalardan bir kaçına deÄŸinmeye karar verdim.

SQL Server verileri diskten EXTENT dediğimiz formatta okur ve yazar . (the smallest unit of data that SQL Server can allocate is 64 KB) Extent ise bünyesinde 8 tane Page barındırır. Windows işletim sistemi ortamında 8*Page_Size=64K eder (İşletim Sistemleri dersini alan arkdaşların kulaklarını da çınlatmış olduk) ki bu da diskten bir defada okunabilecek veri boyutuna denk gelir.

Fillfactor kavramı ise verilerin page üzerinde ne kadarlık bir alanı kaplayacağını belirler. Yani veritabanı yönetim sisteminiz bir page ‘in ne kadarlık kısmını (yüzde olarak 1..100 aralığında) dolduracak ne kadarlık kısmını boÅŸ bırakacak bunu belirleyen parametredir. Fillfactor deÄŸeri index oluÅŸturulurken veya rebuild edilirken karar verilen bir deÄŸerdir. Mesela indeks oluÅŸtururken 70 ‘lik bir fillfactor deÄŸeri belirlediÄŸinizde page üzerinde yüzde 30 ‘luk bir alan sonradan eklenecek veriler için ayrılmış olacaktır. Burada dikkat edilmesi gereken en önemli nokta fillfactor deÄŸerini 100 vermek ile 0 (sıfır) vermek arasında bir fark olmadığıdır. Fillfactor deÄŸerleri 1-100 arasındadır o nedenle 0(sıfır) verdiÄŸinizde bu 100 olarak kabul edilir ve tüm page doldurulur.

Gelelim bu kavramların önemine: EÄŸer veritabanınızdaki okuma sayısı fazla ise bu deÄŸerin yüksek olması çok önemli yani 100 seviyesinde olması en ideali (Zaten server bazında default deÄŸer 100 ) ama okuma iÅŸlemlerinin yanı sıra sıklıkla veri ekleme ve güncelleme (yazma) da yapıyorsanız böyle zamanlarda PAGE SPLIT dediÄŸimiz vakit kaybettirici bir durumla karşılaÅŸmanıza neden olabilir.(Elbette kaybettiÄŸiniz vakti anlamanız o kadar kolay deÄŸil) Nasıl ki multi-threading yapabilen bir iÅŸletim sistemi CPU ‘da processleri çalıştırırken context-switching yapıyorsa (İşletim Sistemleri dersini alan arkadaÅŸların kulaklarını bir kez daha  çınlatmış oldum) aynı durum veriler okunurken ve yazılarken de geçerli. Tam dolu bir page’de sorgulama yaptığınızda aradığın verinin o page içerisinde olma olasılığı daha fazla olur. Öte yandan tam dolu bir page ‘e yazmaya kaltığınızda dolu olduÄŸu için diÄŸer page ‘e geçilir (Page Split) ve page split iÅŸlemi sırasındaki hesaplamalar vakit kaybına neden olur.

Tablolarınızın fillfactor bilgilerini incelemek için SQL Server üzerinde dbcc showcontig komutundan faydalanabilirsiniz. Aşağıdaki örnekte Northwind veritabanınki Categories tablosuna ait bilgiler çağırılmıştır:

use Northwind

go
dbcc showcontig (Categories) with tableresults  (tableresults parametresi seçimliktir)

*Pages Scanned:1 Extent ‘i aşıyor mu aÅŸmıyor mu görmenizi saÄŸlar
*Extent Switches: 1 ise switch var demektir (tehlikeli bir durum :) )
*Scan Density: Düşükse indeksleri yeniden oluşturmak faydalı olabilir (ALTER INDEX REBUILD )
*Avg Page Density: Bu bilgi aracılığıyla pagelerin doluluk oranları hakında bilgi sahibi olabilirsiniz.

Fill factor kullanarak index oluşturmak isterseniz de aşağıdaki örnek size yol gösterebilir:

CREATE CLUSTERED INDEX deneme_indx ON my_table (col1, col2) WITH FILLFACTOR = 50 

Yazımı bitirmeden evvel neden bu konuyu bloguma taşığıma da deÄŸineyim. JDBC_TR mail grubumuzda arkadaşım Emrah Åžeker yapacağı proje için performanslı bir DBMS arayışına girmiÅŸti ve ona cevap verirken Flickr ‘ın altyapısını anlatan bir sunumda bahsi geçen yazma ve okuma deÄŸerlerinin oranına deÄŸindim. (Kullanıcılar her 14 okumya (select) karşılık 1 yazma (insert,delete,update) yapılıyorlarmış) Yani aldığınız bir DBMS ‘i default deÄŸerlerle kullanmak her zaman akıllıca olmuyor. İşinizi ve kullanıcılarınızı iyi analiz etmek gerekir diye düşünüyorum. Yine aynı ÅŸekilde perfomans sorunlarını çözerken olayları donanım güncellemeleri ile ölçeklemeye kalkmak her zaman beklenen sonuçları doÄŸurmayacaktır. Diyorsanız ki kim bu kadar detaylı ÅŸeylere dikkat ediyor? Ben de diyorum ki Dikkat Eden Kazanır!

Åžimdilik benden bu kadar saÄŸlıcakla kalın…

-Tavsiye-
Who Cares about FillFactor?
SQL Server 2005 Books On-Line
Understanding SQL Server’s DBCC SHOWCONTIGÂ

NOT: Yukarıda bahsi geçen konu diÄŸer DBMS ‘leri kapsayacağı gibi kapsamaya da bilir. O nedenle bu yazıyı sadece bilgi sahibi olduÄŸum SQL Server ‘i örnekleyerek yazdım.

PROJE KABUSU SÜRÜYOR

proje-kabusu.pngGeçen hafta cuma günü başlayan proje kabusum hala sürüyor. Aksilikler, sorunlar bir türlü yakamı bırakmadı. Tüm bu sorunlardan kurtulup rahata ereceğim zamanda yenileri katılıyor aramıza. Ama yaşanan bu sorunlardan da kendime çok ders çıkardım.
(Keşke başka türlü çıkarsaydım o dersleri)

Önceki hafta bilgisayarları kapıp hocamızın asistanına bitirme projemizin son halini göstermeye gittik. Projeyi iki kiÅŸi yaptığımız için CETURK ‘ün kurucu Mehmet ACA bize database hosting saÄŸladı. Aynı database üzerinde çalışmak hem senkronizasyon hem de tablolara veri girme derdinden bizi kurtaracaktı. Fakat okula gidince bunun böyle olmadığını gördük. (Çok geç oldu ama neyse) Okuldaki internet çıkışı üzerinden bizim verilerimizin bulunduÄŸu hosta eriÅŸilemiyormuÅŸ. “muÅŸ” dedim çünkü bu problemi Mehmet ‘e anlatınca “ Evet abi doÄŸru bizim okuldan ne yaptıysam ben de eriÅŸememiÅŸtim ” dedi. (Eeee be adam ÅŸunu baÅŸtan söylesene)

Åžimdi aklınıza “Neden bu veritabanın aynısını kendi bilgisayarında oluÅŸturmadın?” gibi bir soru gelir. Elbette oluÅŸturdum. Fakat remote hostta bulunan verileri kendi bilgisayarıma transfer ederken oradaki schema ile aynı schema ismine taşımışım. (Ben de o schema tanımlı olmamasına raÄŸmen) SaÄŸolsun SQL Server Management Studio bu konuda beni hiç uyarmadı.

Verileri kendi bilgisayarıma aktardıktan sonra bu defa da yeni gelen schema üzerinden tablolara eriÅŸemedim. Güvenlik gerekçesiyle izin verilmeyen bu duruma kendimce remote hosttaki kullanıcının aynısını yerel sunucumda da tanımlayarak çözüm bulmak istedim ama nafile. (Microsoft benden uyanık çıktı anlayacağınız…) Bundan ötürü o gün nasılsa veriler remote hostta var ve okulda da internet baÄŸlantısı var diyerek evden çıktım.

Okulda veritabanına eriÅŸemediÄŸimizden dolayı projenin çalışır halini gösteremediÄŸimiz için bu cuma bir kere daha gittik. (Yani dün) Verileri kendi bilgisayarıma bu defa aktarmıştım. (En azından aktardım sanıyordum) Fakat bu defa da tablolardaki constraint ‘ler aktarılmamıştı ve bundan ötürü çoÄŸu veri ekleme iÅŸleminde hata oldu. Anlayacağınız rezillik dizboyuydu. Artık asistana bahane sunacak halim kalmamıştı.

Öte yandan proje arkadaşımın bilgisarındaki virüs yüzünden tüm gece boyunca yazdığı kodları Visual Studio kaydedememişti ve yaptığı değişiklikleri gösteremedik. (Muhtemelen şu anda bilgisayarını geri yüklemekle meşgüldür)

Bir de bütün bu olanların üstüne hocamızın asistanı benden saçma sapan şeyler isteyince (Burada şu da olsa burada bu da olsa şeklinde) bu haftasonumu da projeye feda etmek zorunda kaldım.

Tüm bunları yazmamın nedeni ise bloguma bir müddet yeni yazı ekleyemeyeceÄŸim için ÅŸimdiden özür dilemek ve kendimi az da olsa haklı göstermek. Fakat proje sonlanınca (Yani 8 haziranda) hem proje sırasında öğrendiklerimi (SQL server ve proje gerçekleÅŸtirme sanatı ile ilgili) hem de Arden AGOPYAN tarafından davet edildiÄŸim BiliÅŸim Kongresi ‘nden izlenimlerimi paylaÅŸacağım. Åžimdilik benden bu kadar. Bir sonraki yazıya kadar saÄŸlıcakla kalın…

SQL SERVER 2005 DATABASE DIAGRAM SORUNSALI

İzmir tatilimin sona ermesiyle uzun zamandan beri açıklık getirmeyi düşünüp durduğum bir konuyu da bloguma taşıyorum.
SQL SERVER 2005 DATABASE DIAGRAM HATASI konulu yazımdan sonra beklemediğim sayıda e-mail aldım. Sanırım arama motorlarında aşağıdaki cümleyi arayanlar blogumu karşılarında buldular:

DATABASE DIAGRAM SUPPORT CAN NOT BE INSTALLED BECAUSE THIS DATABASE DOES NOT HAVE A VALID OWNER. TO CONTINUE FIRST USE FILE PAGES OF THE DATABASE DIALOG BOX OR USE ALTER AUTHORIZATION STATEMENT TO SET THE DATABASE OWNER TO A VALID LOGIN….

Ben önceki yazımda bunun kullandığınız veritabanının Compatibility Level ‘i ile alakalı olduÄŸunu ve ayarlardan 90 seviyesine getirilmesini söylemiÅŸtim. Bu sayede SQL Server ‘ın 2005 sürümüyle birlikte görsel yönden daha da iyileÅŸtirilmiÅŸ olan yeni diyagramlardan faydalanabilecektiniz. Fakat o yazıdaki çözüm bazıları için geçerli olmadı. EÄŸer o çözüm ile bir sonuç alamadıysanız ve zaten uyumluluk seviyeniz 90 ise o zaman hata mesajını dikkate almakta fayda var. Database için bizden geçerli bir OWNER atamamızı istiyor. Sakın ola ben bu database ‘i kendim oluÅŸturdum , zaten owner da benim gibi hayallere kapılmayın ve iÅŸinizi saÄŸlama alın. Bunun için:

ALTER AUTHORIZATION ON DATABASE::MyDatabaseName TO [MyServerName\Administrator];
komutunu çalıştıırmanız yeterli olacaktır.

Umarım bu yazı ile bu sorun burada kapanır ve herkes hayalindaki veritabanı diyagramına kavuşur. Gerçi bu diyagramlar için kullanabileceğiniz pek çok ücretsiz araç da mevcut ama tablolar arasında tasarımla oluşturduğunuz ilişkileri arka tarafta veritabanına yansıtanlar var mı onu bilemiyorum.

İstanbul ‘a geri döndüğüme göre blogumu da eski hızımda güncellemeye devam edeceÄŸim. Åžimdilik benden bu kadar. SaÄŸlıcakla kalın…