27 Temmuz 2008 Pazar

SQL SERVER 2000

MİCROSOFT SQL SERVER 2000
Kurumsal kaynak planlama (ERP), müşteri ilişkileri yönetimi (CRM) ve tedarik zinciri yönetimi (SCM) gibi bir işletmenin en kritik uygulamalarına veri besleyen SQL Server, Windows 2000 platformu için geliştirilen yeni sürümünde baştan aşağıya yeni bir kimlik kazandı. Önceki sürümü SQL Server 7.0’ın sil baştan yazılan çekirdeği (kernel) performans, ölçeklenebilirlik, yönetim avantajları gibi veritabanları için son derece kritik konularda önemli artılar sunuyordu. SQL Server 2000 ise analiz araçları ve komple veritabanı yapısının olgunlaşmasıyla birlikte yeni nesil web uygulamaları için ideal bir altyapı sunuyor. SQL Server 2000 ile gelen özellikler hakkında kısaca şunları söylemek mümkün: Zengin XML ve HTTP desteği; yeni bir uygulamayı en kısa zamanda geliştirme nın ayağa kalkma süresini minimum düzeylere indirme ve üzerindeki yükü dağıtma gibi olanaklarla sağlanan süreklilik (availability), veritabanıyla ilgili rutin işleri otomatikleştirmek için daha gelişmiş bir yönetim ve veritabanı işlevlerine özel ayarlar yapabilme. SQL Server 2000, el bilgisayarlarında kullanılan Windows CE’den 64-bit Windows Server’a kadar geniş bir aralıkta ölçeklenebilen yapısıyla internetin gerektirdiği tüm esnekliklere sahip. Tüm bu özelliklerin etkin kullanımı, dip toplamda, bu ilişkisel veritabanının toplam maliyetini (TCO) ciddi ölçülerde azaltıyor.
Windows DNA 2000’in .NET Enterprise Server Ailesi’nin Parçası
SQL Server 2000, zengin ilişkisel veritabanı işlevleri ve veri analiz araçları ile internet platformu için geliştirilen uygulamaların ayrılmaz bir parçasıdır. Ayrıca, web uygulama hizmetleri, hızlı yazılım geliştirme araçları ve ölçeklenebilen sunucu uygulamalarını kapsayan .NET Enterprise Server ailesinin en önemli bileşenidir.
.NET Enterprise Server ailesini kısaca Windows işletim sistemi ortamına tam anlamıyla entegre olmuş web uygulama hizmetleri olarak tanımlayabiliriz. Windows 2000 için tasarlanmış bir web uygulama sunucusu olarak da adlandırabileceğimiz .NET Enterprise Server ailesinin Windows 2000 platformu içindeki bileşenleri, SQL Server 2000, Application Server 2000, Commerce Server 2000, BizTalk Server 2000, Exchange 2000 Server, Internet Security and Acceleration Server ve Host Integration Server 2000 olarak tasarlandı.
Elektronik ticaret uygulamaları, yüksek yoğunluklu işlemler anlamına gelir. Binlerce kullanıcının ulaştığı e-ticaret sitelerindeki veri trafiğini iyi yönetebilmek, söz konusu işlem yükünü sunucular üzerinde dengeli dağıtmak ve pazara doğru refleks verebilmek için güçlü ilişkisel veritabanlarına büyük bir gereksinim vardır. Bu tür ortamlarda genelde melez bir sunucu ve ağ altyapısı olduğu için uygulamaların karşılıklı çalışabilmesi (interoperability), dolayısıyla bu tür entegrasyonlar için veritabanının programlanabilme esnekliği son derece yüksek olmalıdır. Dolayısıyla pazarın isteklerine anında yanıt vermeye uygun (time-to-market) ve yalın bir yönetim mantığına sahip olan SQL Server 2000, her türlü e-ticaret çözümü için biçilmiş bir kaftandır.
İnternete açılan tüm kurum ve kuruluşların artık mal ve hizmet üretmesinde, pazarlamasında ve hatta yeni yatırımlara yönelmesinde, web üzerinden akan müşteri bilgilerinin büyük bir önemi var. Ancak büyük hacimlerde ve rasgele akan bu verinin iş hedefleri açısından tanımlanması gerekiyor. İşte bu noktada SQL Server 2000’in analiz araçları, tüketici tutum ve davranış kalıplarını değerlendirmeye çalışan yöneticilerin en güçlü yardımcısı konumuna yerleşti. Bu ilişkisel veritabanı sunucusu, çeşitli senaryolara göre yapılandırılabildiği için yönetim sorunlarını en alt düzeye çekmesi nedeniyle ciddi bir ilgi görüyor.

XML’e Açılan Kapı
Web üzerinde değişik formatlardaki verinin değişimi için artık bir standart haline gelmeye başlayan XML (eXtended Markup Language) günümüzde entegre e-ticaret çözümlerinin önemli bir bileşeni. Bu nedenle işletmeler arası ya da tüketiciye yönelik e-ticaret çözümlerini ya da kendi extranet’lerini planlayan firmalar, XML desteğine büyük bir önem veriyor. Çünkü XML, firmaların asıl işlemlerin gerçekleştiği arka tarafta yer alan mevcut uygulamalarının web’le konuşturma aşamasında entegrasyon sorunlarını önemli ölçüde azaltıyor. Bazı firmalar, çeşitli platformlardaki uygulamalarını birbiriyle ilişki kurması aşamasında iletişim sorunlarını çözmek için XML’e bir tür orta katman (middle-tier) yazılımı rolü biçerken, uygulama geliştirenler ise yüksek hızlı veri saklama ve üretme gibi amaçlarla XML’le yaratılan belgelerin ve verinin esnekliğinden yararlanmak istiyor.
SQL Server 2000’in XML işlevselliği, web çözümü geliştiren yazılımcıları, ilişkisel veritabanı programlamanın karmaşasından korumayı amaçlıyor. Aynı şekilde, veritabanı geliştirenler de SQL Server 2000 sayesinde XML’in tüm zorluklarını anlamak yada nesne temelli dili öğrenmek zorunda kalmıyor.
Web kullanıcısını anlamak
SQL Server 7.0, kendi üzerindeki veritabanı kayıtlarından HTML sayfalar üretme, SQL Server verilerini HTTP ve FTP sunuculara gönderme ve e-posta alıp verme özelliklerine sahipti. SQL Server 2000 ise önceki sürümüne göre birkaç adım daha ileriye gitti. Web aracılığıyla OLAP veri küplerini ve SQL Server veritabanları içinde saklanan verilere erişmek için yeni ve gelişkin yöntemler sunuyor. Böylece herhangi bir web tarayıcısına (browser) sahip her kullanıcıya gerekli veriler kolayca sunulabilirken, kapsamlı veri arama özellikleri de hem sunucu, hem de bağlı uygulamaları geliştiren yazılımcılara ciddi bir esneklik tanıyor.
SQL Server 2000’in tartışılmaz avantajlarından biri de Analysis Services adı altında toplanan veri analiz araçlarıdır. SQL Server 2000’e entegre gelen yeni Data Mining (veri araştırma) araçları, veritabanındaki kayıtlardan hareketle yöneticilere kapsamlı bir veri analizi yapabilme olanağı sunuyor. Tüm SQL Server 2000 ailesinde hazır gelen Data Mining, SQL Enterprise Server 2000 Enterprise Edition’da Analysis Services’in bir bileşeni olarak yer alıyor. Veri araştırma teknolojisi, kullanıcıların ilişkisel veritabanı içindeki verileri ve çokboyutlu OLAP veri küplerini çözümleyerek söz konusu verilerin kalıpsal ya da trende bağlı nitelikleri hakkında tahminler yapabilmek amacıyla kullanılıyor. Aslında verilerin analizi konusundaki bir adım sonraki aşama elde edilen bu veri araştırma sonuçlarının OLAP veri analizi araçları kısmında yeni veri küpü tanımlarını oluşturabilmek için kullanılmasıdır. İnternet üzerinden elde edilen karmaşık verinin bu gibi araçlarla çözümlenerek, geleceğe ışık tutan gerçekçi tahminlerin yapılmasında bu araçların işletmelerin pazarı anlaması bağlamında kritik bir rolü bulunuyor. SQL Server 2000 bu anlamda veriambarı uygulamalarına da ciddi bir destek veriyor.
Kurumsal güveni hak ediyor
İş dünyasında giderek büyüme eğilimi gösteren kurumsal sistem altyapısı ve web sitelerinin gereksinimi olan güvenilirlik ve ölçeklenmeyi SQL Server 2000 çeşitli işlevleriyle garanti ediyor. Distributed Partitioned Views ve log yükleme özellikleri, simetrik çoklu işlemcili (SMP) sistemlerin tüm avantajlarını değerlendirirken, işlemleri de dengeli bir şekilde dağıtarak veri trafiğinden kaynaklanabilecek olası sorunları başından önlüyor.
Distributed Partitioned Views, SQL Server verilerini bölerek (partitioning) veritabanı işlem yükünü sunucu grubu içinde dağıtmaya yarıyor. Verilerin dağıtıldığı sunucular bölümlenmiş verinin yönetimi için işbirliği yapıyor fakat bağımsız çalışabiliyorlar. Veriler bölümlense de veritabanı üzerindeki bu bilgilere ulaşmaya çalışan tüm uygulamalar, veritabanının sunucular üzerindeki dağıtık yapısından bağımsız şekilde veritabanını bir bütün olarak görebiliyor. Bu arada tüm sunucular, veritabanı sorguları ve sorgu güncellemeleri, veri tarama işlemleri ve veri güncellemeleri için bağlantıları kabul ediyor.
Log Shipping de SQL Server 2000 ile gelen yeni bir özellik. Sistemlerin sürekli çalışır durumda olması gereken ortamlarda sunucular arasında işlem kayıt dosyalarını (log) aktararak verilerin zamanında ilgili yerlerde yedeklenmesini sağlıyor

SQL SERVER NEDİR ?

Microsoft SQL Server Client-Server ve web tabanlı uygulamalarda ihtiyaç duyulan veri depolama çözümlerinde kullanılan bir server yazılımıdır.

SQL Server’ı iki tür veritabanını yönetmek için kullanırız. Bunlar OLTP (Online Transaction Processing) veritabanları ve OLAP (Online Analytical Processing) veritabanları. Genel olarak farklı client’lar network üzerinden haberleşerek veritabanlarına erişirler.

SQL Server ile terabyte boyutundaki veritabanlarını yönetebilirsiniz. Birden fazla server arasında Windows Clustering yaparak SQL Server’ı kullanabilirsiniz.

SQL SERVER’A GİRİŞ

SQL Server ile yoğun verileri işleyebilir, saklayıp analiz edebilir ve yeni uygulamalar geliştirebilirsiniz. SQL Server OLTP ve OLAP için gerekli olan veri saklama ürünlerini ve teknolojilerini destekler. SQL Server bir ilişkisel veritabanı yönetim sistemidir (RDBMS: Relational database management system).SQL Server;

• Veri işleme ve analiz için saklanan veri yığınlarını yönetebilir.
• Client uygulamalarından gelen isteklere cevap verebilir.
• SQL Server ve clientlar arasında veri göndermek için T-Sql (Transact SQL), XML, MDX veya SQL-DMO kullanabilir.

İlişkisel Veritabanı Yönetim Sistemi (RDBMS)

Bir RDBMS aşağıdaki işlemlerden sorumludur;

• Bir veritabanındaki veriler arasında ilişkiler kurmak
• Verileri hatasız bir şekilde saklamak ve veriler arasında tanımlanan ilişkileri bozmamak
• Bir sistem hatası durumunda tüm verileri kurtarabilmek

Veri saklama modelleri

SQL Server OLTP ve OLAP veritabanları yönetebilir.

OLTP Veritabanları: Bir OLTP veritabanı içinde veriler genellikle ilişkisel tablolar içinde organize edilir. Gereksiz veri yığınları azaltır ve veri güncelleme hızını arttırır. SQL Server çok sayıda kullanıcının gerçek zamanlı olarak veri analiz edebilmesini ve güncellemesini sağlar. Örnek olarak OLTP veritabanları havayolu bilet satış bilgileri ve bankacılık işlemlerini içerir.

OLAP Veritabanları: OLAP teknolojisi büyük verilerin organize edilmesi ve incelenmesini sağlar. Örneğin bir analist büyük verileri hızlı ve gerçek zamanlı olarak değerlendirebilir.SQL Server Analiz Servisi toplu raporlama ve analizde, veri modelleme ve karar desteğe kadar geniş alanda çözümler sunar.

Client Uygulamaları

Kullanıcılar SQL Server ve Analiz Servisine direct olarak ulaşamaz; verilere erişmek için yazılmış client uygulamaları kullanırlar. Bu uygulamalar SQL Server aşağıdaki yöntemlerle ulaşırlar;

Transact-SQL: Bu sorgulama dili SQL’in farklı bir versiyonudur. SQL Server kullanıcıları için birincil bir sorgulama ve programlama dilidir.
XML: Bu format bir sorgu ve prosedürün çalışması sonucu gelen verinin HTTP üzerinden URL veya şablonlar kullanılarak iletilmesidir. XML’I veritabanina veri girerken, güncellerken ve silerken kullanabilirsiniz.

MDX: MDX bir OLAP veritabanı içindeki çok boyutlu objelerin, sorguların ve çok boyutlu verilerin düzenlenmesini ifade eder.

OLE DB ve ODBC API’leri: Client uygulamaları veri tabanına komut gönderirken OLE DB ve ODBC API’lerini kullanırlar. Bu API’leri kullanarak gönderilen komutlar T-SQL dilini kullanırlar.

ActiveX Data Objects ve ActiveX Data Objects (Multidimensional)

ADO ve ADO MD Visual Basic, ASP, VB Script programlama dillerinde OLE DB’yi kapsamak için kullanılır. OLTP veritabanları içindeki verilere erişmek için ADO kullanılır. Analiz Servisi veri küpleri içindeki verilere erişmek için ise ADO MD kullanılır.

English Query: Bu uygulama ile kullanıcılar doğal dillerini kullanarak karmaşık T-SQL ve MDX yapılarını kurarak veritabanıdan bilgi elde edebilirler. Örneğin bir kullanıcı “Satış bölümünün bu ay ki cirosu nedir ?” diye bir soru sorabilir. Adındanda anlaşıldığı gibi sorularda ingilizce dili kullanılır.

Client-Server Bileşenleri

SQL server verileri saklamak ve tekrar almak için client, server bileşenlerini içerir. SQL server uygulamaları temel network ve protokollerden izole etmek için katmanlı iletişim modelini kullanır.Bu yapı uygulamanız farklı network ortamlarında kullanmanızı sağlar.

Client-Server Mimarisi

SQL server iş yükünü azaltmak için server ve clientlar üzerindeki iş yükünü parçalara böler.

• Client uygulama ticari hesaplama ve bunların kullanıcıya gösterilmesinden sorumludur. Bunlar her ne kadar client üzerinde çalışsa bile veri sorgularken server üzerinde çalışır.
• SQL Server birden fazla gelen istekleri karşılayabilmek için disk, bellek, işlemci ve bant genişliği gibi kaynakları yönetebilir.

Client-Server mimarisi ile çeşitli ortamlar için uygulamalar dizayn edip geliştirebilirsiniz. Client uygulaması çeşitli bilgisayar ortamlarında çalışır ve SQL Server ile network üzerinden haberleşir.




Client Bileşenleri:

Haberleşme mimarisinde client bileşenleri aşağıdakileri içerir;

Client Applications: Bir client uygulamasındaki amaç T-SQL kodlarını göndermek ve sonuçları almaktır. Veritabanı API’si kulanarak bir client uygulaması geliştirebilirsiniz. Böylece SQL Server ile haberleşmek için kullanılan network protokolünü bilmeye gerek yoktur.

Database API: Database API’leri bir driver veya DLL kullanarak T-SQL kodlarını geçirir ve sonuçları alır. Bu T-SQL kodlarını gönderirken ve sonuçları alırken client uygulama ile SQL Server arasında kullanılan bir arayüzdür.

Client Net-Library: Client Net-Library network bağlantılarını control eder ve verileri client’a yönlendirir. Bu bir çeşit veritabanı isteklerini ve sonuçlarını paketleyip çeşitli network ortamlarında taşıyan haberleşme yazılımıdır.

Server Bileşenleri:

Haberleşme mimarisinde server bileşenleri aşağıdakileri içerir;

Server Net-Libraries: SQL Server aynı anda birçok Net-Library’leri izleyebilir. Bağlantının sağlanabilmesi için Client Net-Library ve Server Net-Libraries aynı olmalıdır. SQL Server şu protokollere destek verir; TCP/IP, Named Pipes, NWLink, IPX/SPX, VIA ServerNet II SAN, VIA GigaNet San, Banyan VINES ve AppleTalk.

Open Data Services: SQL Server’ın bir bileşeni olan bu uygulama network bağlantılarını izler, client isteklerini çalıştırmak üzere SQL Server’a geçirir ve sonuçları tekrar client uygulamaya döndürür. Open Data Services SQL Server’a yüklenmiş olan tüm Net-Libraries’I dinler.

Relational Engine: T-SQL kodlarını çalışabilir parçalara böler, optimizasyonunu yapar, tanımlanmış diğer kodları çalıştırır ve güvenliği sağlar.

Storage Engine: Storage Engine veritabanı dosyalarını, dosyalardaki boş alanları, fiziksel sayfalara veri giriş çıkışını, veri önbelleklerini, loglamaları, kurtarma operasyonlarını yönetir.


Client-Server Haberleşme İşlemleri

Client ve Serverlar tipik olarak bir network üzerinden haberleşirler. Aşağıdaki adımlar bir sorgunun veritabanı API’si kullanılarak hangi aşamalardan geçtiğini göstermektedir.

1. Bir client uygulaması sorgu gönderir. Client uygulama API’yi çağırır ve sorguyu verir. API driver veya DLL’I kullanarak sorguyu bir veya daha fazla TDS (Tabular Data Stream) paketlere gruplar ve Client Net-Library’e geçirir.

2. Client Net-Library bu paketleri networkte taşınabilecek şekilde paketler. Client Net-Library windows interprocess communication (IPC) API’sini çağırır ve işletim sisteminde yüklü olan protocol üzerinde bu paketleri server net-libraries’e gönderir. Server net-libraries bu network paketlerini çözer ve TDS paketlerinin elde eder. Data sonar bu TDS paketlerini Open Data Services’e geçirir.

3. Open Data Services bu TDS paketlerini açar ve sorguyu relational engine’e verir. Relational engine bu sorguyu derler ve optimizasyonu yapılmış çalışabilir bir şekle çevirir ve çalıştırır. Relational engine storage engine ı ile OLE DB arayüzünü kullanarak haberleşir.

4. Storage engine databaseden dönen verileri data buffer’a oradan relational engine’e verir. Relatinal Engine gelen verilere son şeklini verir ve Open Data Services’e geçirir.

5. Open Data Services bu verileri Server Net-libraries, network protokolü, client net-library ve database API kullanarak client’a iletir. Bu sonuçlar XML şeklinde de iletilebilir.

SQL Server Servisleri

Microsoft SQL Server aşağıdaki servisleri içerir;

MSSQLServer service, SQLServerAgent service, Microsoft Distributed Transaction Coordinator (MS DTC) ve Microsoft Search. Bu servisler genellikle Windows 2000 üzerinde servis olarak çalışırlar fakat uygulama gibi de çalışabilirler.

MSSQLServer Service:MSSQLServer bir veritabanı motorudur. Tüm T-SQL yapılarını çalıştıran ve veritabanını kapsayan tüm dosyaları yöneten servistir. MSSQLServer servisi;


1. Sistem kaynakları birden fazla kullanıcıya paylaştırır
2. Mantıksal hataları engeller. Mesela bir datayı aynı anda güncellemek isteyen kişileri engeller.
3. Veri bütünlüğünü sağlar.

SQLServerAgent Service:Bu servis SQL Server ile birleşik olarak çalışır ve alert’leri ve multiserver işlemlerin yönetilmesini sağlar.

1. Alert’ler bir işlemin sonuçları hakkında bilgi verir. Mesela bir sorgu bitti veya çalışma sırasında bazı hatalarla karşılaşıldı gibi.
2. SQLServerAgent görev oluşturma ve zamanlama aracı ile bazı işlemlerin otomatikleştirilmesini sağlar.
3. SQLServerAgent servisi bir problem olduğunda mail atabilir, çağrı cihazına mesaj gönderebilir veya başka bir uygulamayı çalıştırabilir. Mesela bir veritabanı dolduğunda veya bir yedekleme işlemi bittiğinde size mail atmasını sağlayabilirsiniz.

Microsoft Distributed Transaction Coordinator:MS DTC bir işlem ile birden fazla farklı kaynağın üzerinde işlem yapılmasını sağlar. Mesela bir işlem ile tüm serverlar üzerinde kalıcı bir güncelleme işlemi yapabilir veya yapılmış bu işlemi hepsinden geri alabilir.

Microsoft Search:Microsoft Search Windows 2000 üzerinde çbir servis olarak çalışan full-text bir arama motorudur.

SQL Server Entegrasyonu

SQL Server Microsoft işletim sistemi ve diğer server uygulamaları ile bütünleşik çalışabilen client-server bileşenlerine sahiptir. Farklı işletim sistemleri üzerinde bulunan Internet tarayıcıları ve diğer üçüncü parti yazılımlar SQL Server’a erişebilmektedir

İşletim Sistemi ve SQL Server Entegrasyonu

SQL server belirttiğimiz gibi farklı işletim sistemleri üzerinde çalışabilen client ve server bileşenlerine sahiptir.

Client Bileşenleri:SQL Server 2000’nin tüm versiyonlarındaki client bileşenleri Windows CE sürümü hariç tüm Windows 2000, Windows NT, Windows ME 95 ve 98 sürümleri üzerinde çalışabilmektedir.Tüm SQL Server CE sürümü bileşenleri ise Windows CE üzerinde çalışabilmektedir.

Server Bileşenleri:SQL Serverin değişik sürümleri Windows 2000, CE, ME, 98 ve 95 işletim sistemleri üzerinde çalışabilmektedir. İşletim sistemi ve SQL server’in spesifik özelliklerinden dolayı server bileşenlerinde bazı kısıtlamalar olmaktadır. Mesela Windows NT 4.0 üzerine SQL Server 2000 kurabilmek için SP5 gerekmektedir. Ve sadece veritabanı motoru ve analiz server gibi server bileşenleri işletim sistemine gore kısıtlanmaktadır. Örneğin Windows 2000 Pro, ME, 98, 95 ve NT Workstation gibi işletim sistemlerine SQL Server 2000 Enterprise Edition’I kuramazsınız sadece SQL Server 2000 EE Cd’sini client yazılımını kurmak için kullanabilirsiniz.

SQL Server 2000 ve Windows 2000 Entegrasyonu

SQL Server tam anlamıyla Windows 2000 ile entegre olabilmekte ve Windows 2000’nin özelliklerinden ileri gelen tüm avantajlarından faydalanabilmektedir.

Active Directory:Serverlar ve özellikleri server start edildiğinde otomatik olarak active directory içine kaydedilmektedir. Kullanıcılar istedikleri server’a active directory search kullanarak erişebilmektedirler. Örneğin; Bir kullanıcı bir veritabanını tüm SQL Server’la üzerinde aratabilmektedir. Veya Active Directory üzerinden SQL Server üzerindeki veritabanlarıa bakabilmektedir.

Security:SQL Server Windows 2000 güvenlik sistemine entegre olarak çalışmaktadır. Bu entegrasyon kullanıcıların tek bir kullanıcı ismi ve şifresi ile hem SQL Server’a hem de Windows 2000 kaynaklarına erişmesine izin vermektedir. SQL Server Windows 2000 encryption metodlarını kullanmaktadır. Kerberos gibi. SQL Server Windows 2000 güvenliğinden ayrı olarak kendiside güvenlik sistemi barındırmaktadır. Kullanıcılar Windows 2000 den ayrı olarak SQL Server kullanıcı ismi ve şifrelerinede sahip olabilmektedir.

Multiprocessor Desteği:SQL Server Windows 2000’in SMP(Symmetric multiprocessing) özelliğini de desteklemektedir. SQL server sisteme eklenen yeni bir işlemcinin avantajlarından otomatik olarak faydalanablmektedir.

Microsoft Olay Günlüğü (Event Viewer):SQL Server sorunların takip edilebilmesi ve çözüme kavuşturulabilmesi için Windows 2000’de kullanılan olay günlüğünün uygulama, güvenlik ve system alanlarına mesajlar yazabilmektedir.

Windows 2000 Component Servisleri:Component servisleri COM ve Transaction Server’a dayanmaktadır. Böylece daha fazla işlem, güvenlik, yönetim kolaylığı, uygulama yönetimi, uygulama paketleme özelliklerinden faydalanılabilmektedir.


Windows 2000 Sistem Monitörü:SQL Server system monitörüne performans ölçülerini gönderebilmektedir. Böylece SQL Serverin değişik açılardan performansı incelenebilmektedir.

Microsoft Internet Information Service:Internet tarayıcısı ile SQL Server veritabanlarına erişimi sağlamaktadır.

Windows Clustering:SQL Server Windows 2000 Advanced Server’in bir özelliği olan clustering servisinden faydalanabilmektedir. Böylece makinalardan bir tanesinde sorun olursa diğer makinaya konumlanabilmekte ve işlemler aksamadan devam etmektedir.



SQL Server ve Diğer Microsoft Server Uygulamaları Entegrasyonu

SQL Server en iyi şekilde diğer Microsoft Server uygulamaları ile entegre olabilmektedir. Microsoft bir grup server uygulamaları ile iş çözümleri üretmenize yardımcı olmaktadır. Aşağıdaki tabloda SQL Server ile sıkça beraber kullanılan server’lar listelenmiştir.

Microsoft Exchange Server:SQL Server’in email göndermesini sağlamaktadır. SQL Server veritabanında problem olduğunda veya belirlenen senaryolar sonucunda ilgili kişilere mail atabilmektedir.

Microsoft Host Integration Server 2000:PC tabanlı networkleri SNA protokolünü kullanarak IBM ortamlarına bağlamaktadır. Böylece SQL Server IBM mainframe ve AS/400 uygulamaları ile entegre olabilmektedir.

Microsoft System Mnagement Server:Bilgisayar yazılımlarını, donanımlarını ve SQL Server veritabanlarını yönetmeye yardımcı olur.

SQL SERVER İLE UYGULAMA GELİŞTİRME

Web Tabanlı Uygulamaların işlevliği arttıkça kontrolleri de artmaktadır. Bu ise çok fazla kontrol kodu demektir. Server-Side kodlar, Client-Side kontroller, grafik tasarım, DHTML derken ASP sayfamız içinden çıkılmaz bir hale dönüşebilir. Özellikle uygulamaya yeni modül eklentilerinde, baştaki tasarımınıza bağlı olarak yama yapabilir yada her şeye yeniden başlayabilirsiniz. Öte yandan uygulamanızın efektif kullanımına yönelik performansı da düşünmek zorundasınız. Bu amaçla bileşenler oluşturabilir ya da mevcut bileşenlerden faydalanabilirsiniz; ayrıca grafik tasarım ve ara yüz standardını da belirlemeniz gerekir. Tüm katmanların aynı yerde farklı kodlanması ve kontrolü, standartlaşma ve birlikte çalışabilirlik unsurları da dikkate alındığında, sistem tasarımcılarını üzerinde çok fazla düşündürmektedir.

Bu anlatımda ki temel amacım bir web tabanlı uygulamanın mümkün olduğunca çok yönlü, çok amaçlı ve kullanışlı (generic) bir yapıda olmasını sağlamak için tespit ettiğim arayışlardır. Bildiğiniz gibi veritabanına bağlı uygulamalarda yoğunlukla veri girişi, düzenleme, sorgulama ve silme gibi işlemler yapılmaktadır. Bunun için veritabanından bir tablonun kayıtlarını kullanıcı ekranına listeleriz ve gerekli butonlar vasıtası ile interaktif olarak kullanıcıdan istek bekleriz. Standart veritabanı işlemleri dışında uygulamadan yapılması istenen özel durumlarda kod yazarak kontrol oluşturmamız gerekir. Örneğin veritabanından gelen kayıt listesinin kullanıcının istediği alana (column) göre sıralama (sort) işleminin artan yada azalan şekilde yapılabilmesi.

Bu aşamada uygulamanın sistem mimarisinde üç ana unsur ortaya çıkmaktadır. Sistem tasarımı, veritabanı tasarımı ve ara yüz tasarımı. Kullanıcı-Uygulama iletişimini sağlayan ara yüz standardı büyük önem kazanmaktadır. Sistem mimari tasarımında kullanıcıya anlaşılır (user friendly) ara yüzler tasarlamak ve standartları belirlemek, varsa belirlenmiş standartlara uymak, oluşturacağımız generic yapıda en önemli unsur olacaktır. Kullanıcının isteklerini bildireceği ara yüz tasarımında standartları belirlemek ve yerleşik bir ortamda (XML gibi) tutmak uygulamanın geliştirilmesi ve uygulamalar arası entegrasyon açısından fayda sağlayacaktır. Tasarım aşamasında ihtiyaçlar ve iş gereçlerini planlayarak ara yüz standart oluşumuna yansıtmak gerekir. Büyük bir ivme ile yaygınlaşan XML teknolojilerini bu amaçla kullanım gerekliliği aşikardır. Bunun yanı sıra arka planda server-side kodlarla veritabanı ile yapılan iletişimlerde XML büyük efektiflik sağlayacaktır.

Bir dinamik ASP sayfasının oluşumunda, ara yüz standartlarını belirleyeceğimiz iş akışını veritabanında saklayabiliriz. Bunu açacak olursak veritabanında ki nesneler ve özelliklerine göre asp sayfasının nasıl davranacağını belirlemek ve kullanıcının rahat davranabilmesi sağlayacak ara yüz tasarımı oluşturmak için gerekli iş adımlarını veritabanına gömmek olarak tanımlayabiliriz. Üzerinde düşünüldüğünde bu generic yapıyı, veritabanı özelliklerini kullanarak oluşturabileceğimizi görebiliriz. Böylece karmaşık uygulamalarda bile iyi bir veritabanı ve ara yüz tasarımı ile ölçeklenebilir, genişletilebilir ve performans kazançlı web tabanlı uygulamalar geliştirebiliriz. Bunun için mevcut araçların ( XML, Database ) özelliklerini iyi bilmemiz ve nerde nasıl kullanabileceğimiz Tespit etmemiz gerekir.

SQL Server 2000 'da Sütun (column) Description Değerinin Alınması

Microsoft SQL Server 2000'deki SQL Server Enterprise Manager içinde herhangi bir tablonun Table Design penceresini açtığınızda, pencerenin alt yarısında seçili sütunun (column) bazı özellikleri listelenir. Bunlardan birsi de Description (Tanım) özelliğidir. Enterprise Manager Description özelliği bir genişletilmiş özelliktir (extended property).

Bu genişletilmiş özellikleri bazı veritabanı nesnelerinin bilgilerini saklamak için kullanabiliriz. Ben burada sizlere tablolar (tables) ve sütünların (columns) Description genişletilmiş özellik tanımlanmasını ve bu bilgileri ASP sayfası içinden nasıl elde edileceğini (retrieve) anlatmaya çalışacağım.SQL Sever 2000'de genişletilmiş özellikleri almak için bir sistem fonksiyonu tanımlanmıştır. Bu fonksiyon fn_listextendedproperty() sistem fonksiyonudur. Bu fonksiyonun sözdizimi (syntax) aşağıdaki gibidir.

Syntax
fn_listextendedproperty(
{default | [ @name = ] 'property_name' | NULL }
, {default | [ @level0type = ] 'level0_object_type' | NULL }
, {default | [ @level0name = ] 'level0_object_name' | NULL }
, {default | [ @level1type = ] 'level1_object_type' | NULL }
, {default | [ @level1name = ] 'level1_object_name' | NULL }
, {default | [ @level2type = ] 'level2_object_type' | NULL }
, {default | [ @level2name = ] 'level2_object_name' | NULL }
)

Aşağıdaki sözdizimi veritabanındaki table nesnesinden T1 tablosunun tüm sütunlarının (column) genişletilmiş özellikleri listeler. Eğer 'column' nesnesinden sonra default yerine tabloda herhangi bir sütun adını verirsek o sütunun genişletilmiş özellikleri listelenecekti.

SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'T1', 'column', default)
Veritabanımızda belediye bilgilerini tutan il_t_belediye adında bir tablomuz olsun. Tablomuzun Table Design penceresi yandaki şekilde olduğu gibidir. Gördüğünüz gibi belediyead sütununun Description özelliğne ' Belediye Adı ' değeri atanmıştır.
Aşağıdaki SQL cümleciğinde tablo adını il_t_belediye ve sütun adını belediyead olarak girersek; SQL Server Query Analyzer'da çalıştırdığımızda aldığımız sonuç nesne tipinin sütun (COLUMN) olduğunu , nesne isminin ' belediyead ' ve değerinin (value) ise ' Belediye Adı ' olduğunu görebiliriz.




Yukarıdaki örnek SQL cümleciğinde bir sütunun Description genişletilmiş özelliğinin nasıl alınacağını gördünüz. Şimdi ise veritabanında depolanan bu bilgiye ASP sayfasından nasıl erişebileceğimize bakalım.Öncelikle bu fonksiyonu dinamik bir yapıda kullanacağımızı düşünürsek, veritabanına erişen bir bileşen (ActiveX DLL) haline getirmek bir çok açıdan daha uygun olacaktır. Bu amaçla Visual Basic ortamında geliştirdiğim FileldDesc() fonksiyonu aşağıdaki gibidir. FileldDesc() fonksiyonuna değişken olarak gelecek sTableName ve sFieldName değerlerini strSQL cümleciğinde veritabanından sorgulayarak veritabanında gelecek olan sütun Description değerini (value) döndürür.

Not : Kodda görmüş olduğunuz OpenRS ve CloseRS birer Private fonksiyon olup ADO'nun Connection ve Recordset nesnelerini kullanarak veritabanına bağlantı ve kayıt seti oluşturma işlevlerini yapmaktadır.

Public Function FieldDesc(ByVal strConn As Variant, ByVal sTableName As Variant, &_ ByVal sFieldName As Variant) As Variant
Dim sFieldNameAs String
OpenRS strConn
strSQL = "SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', &_ '" & sTableName & "', 'column', '" & sFieldName & "')"
rs.CursorLocation = adUseServer
rs.Open strSQL, conn, adOpenStatic
If Not (rs.BOF or rs.EOF) Then
sFieldName = rs("value")
End If
FieldDesc = sFieldName
CloseRS
End Function



Son olarak oluşturduğumuz bileşeni (ActiveX DLL) ASP sayfamızdan nasıl çağıracağımızı görelim. Öncelikle Server nesnesinin CreateObject metodunu kullanarak oluşturduğumuz ActiveX bileşeninden bir örnekleme (instance) nesne oluşturmamız gerekir. Aşağıda gördünüz gibi ActiveX DLL'mizin adı SQL2kObj.dll, Class Module adı da DBDesc 'dir. ActiveX bileşenimizden objSQL2kDB isimli bir nesne örnekledik.

<% Set objSQL2kDB = Server.CreateObject("SQL2kObj.DBDesc") %>


Aşağıdaki örnek ara yüzde gördünüz üzere; il_t_belediye tablosunun tüm sütun (column) Description değerlerini dinamik bir yapıda yazdırmak istediğimizde objSQL2kDB nesnemizin FieldDesc metodu değerlerini (attributes) aşağıdaki gibi tanımlayabiliriz. Aşağıdaki kodu bir döngü içinde kullanırsak, tablonun tüm sütun adlarını fonksiyona gönderebilir ve fonksiyonda veritabanından Description değerlerini bize geri döndürerek istediğimiz alana yazdırmış oluruz.
<% strConn = "Veritabanına bağlantı string'i" %>
<%Response.Write objSQL2kDB.FieldDesc(strConn, "il_t_belediye", fld.name)%>





Yukarıdaki arayüzde gördüğünüz üzere kayıtları veritabanından listelerken sütun adlarını da daha önce veritabanında tanımladığımız sütun Description genişletilmiş özelliklerden alarak dinamik olarak yazdırabiliriz.

SQL Server 2000 sysforeignkeys Sistem Tablosunun Kullanımı
Bu örnekte, veritabanımızda il_t_belediye ve il_t_il tabloları var ve bu tablolar arasında bir ilişki (Relationship) kurulmuştur. Şekil'den de anlaşılacağı üzere il_t_il tablosu (Primary key table) ilkod alanı ile il_t_belediye tablosu (Foreign key table) ilkod alanları arasında birden çoğa (one to many) bir ilişki vardır. Yani Belediye Bilgileri tablosundaki ilkod sütunu İller tablosundaki bir sütuna referans eder.
Burada size anlatmaya çalışağım konu Belediye Bilgileri kayıtlarını ekrana yazdırırken, il_t_belediye tablosunda ilkod (Foreign Key) sütunundaki il kodu değeri yerine, referans eden İller Tablosunda ilkod (Primary Key) değeri ile eşleştirerek karşılık gelen ilad sütunundaki İl Adı değerini İller Tablosundan çekerek yazdırmak.
Bir tabloda bulunan foreign key bir sütunun (column) veritabanında referans eden Primary Key sütuna ulaşmak için veritabanında ki sistem tablolarından sysforeignkeys sistem tablosundan faydalanacağız. SQL Server Query Analyzer'da aşağıdaki SQL cümleciğin WHERE koşuluna foreign key tablo adını yazarsak bize referans eden primary key tablo ve sütun adını getirecektir.




Bu bilgileri ASP sayfalarımızda dinamik olarak kullanabilmek için yukarıdaki SQL cümlesini kullanarak daha önce oluşturduğumuz SQL2kObj.dll ActiveX bileşenimize bir fonksiyon daha ekleyelim.
Bu fonksiyona foreign key sütun adını (sFieldName), değerini (sFieldValue), refereans eden tablodaki kaçıncı sütunu yazdırmak istediğimizi (nWhichField) ve foreign key tablo adını gönderiyoruz.
Kodu inceleyecek olursak; pkSQL cümlesinin WHERE koşulunda foreign key tablo adını (sTableName) göndererek sysforeignkeys sistem tablosundan referans eden primary key tablo adı/adlarını ve sütun adı/adlarını alıyoruz. Foregin key tablomuz veritabanında birden fazla tabloya referans edebileceğini düşünerek oluşacak kayıt setinde bir döngü ile 'column_name' ile foreign key (sFieldName) alanımız arasında eşitlik arıyoruz. Kayıt setinde foregin key (sFieldName) sütununa karşılık gelen primary key tablo adını tespit ettikten sonra SELECT cümlesi ile bizim foregin key sütunumuzun değeri ile primary key tablodaki karşılık gelen sütunun değerini alıyoruz. Eğer değer dönerse daha önceden karar verdiğimiz (sWhichField) primary key tablo sütununun değerini fonksiyona atıyoruz. Dolayısı ile bize bu fonsiyon bize dinamik olarak primary tablosunu bularak bu tablodan istediğimiz sütun değerini yazdırmamızı sağlıyor.
Burada fonksiyonu generic bir yapıda kurduğumuzdan fonksiyona foreign key tablo adı verilmediği takdirde değer dönmeyeceğinden bir flag tutuyoruz ve fonksiyon sonucunda gönderilen sütun değerini (sFieldValue) tekrar fonksiyona atıyoruz.
Public Function FindPkFld(ByVal strConn As Variant, ByVal sFieldName As Variant, &_ ByVal sFieldValue As Variant, ByVal nWhichField As Variant,&_ ByVal sTableName As Variant) As Variant

Dim Flag As Boolean
Dim sPKey As String
Dim pkSQL As String

Dim consulta As ADODB.Command
Dim rsconsulta As ADODB.Recordset

OpenRS strConn
Flag = False

pkSQL = "SELECT object_name(fkeyid) as FKey_Table, "
pkSQL = pkSQL + "col_name(fkeyid, fkey) as column_name, "
pkSQL = pkSQL + "object_name(rkeyid) as PKey_Table, "
pkSQL = pkSQL + "col_name(rkeyid, rkey) as referenced_column_name "
pkSQL = pkSQL + "FROM sysforeignkeys "
pkSQL = pkSQL + "WHERE object_name(fkeyid) = '" & sTableName & "'"

rs.CursorLocation = adUseServer
rs.Open pkSQL, conn, adOpenStatic

Do While Not rs.EOF
If rs("column_name") = sFieldName Then
Set consulta = New ADODB.Command
Set consulta.ActiveConnection = conn
consulta.CommandText = "SELECT * FROM " & rs("referenced_table_name") &_
" WHERE " & rs("referenced_column_name") & "=" & sFieldValue
Set rsconsulta = consulta.Execute
If Not (rsconsulta.EOF And rsconsulta.EOF) Then
sPKey = rsconsulta(nWhichField)
End If
Set rsconsulta = Nothing
Set consulta = Nothing
Flag = True
FindPkFld = sPKey
End If
rs.MoveNext
Loop
If Flag = False Then
FindPkFld = sFieldValue
End If
CloseRS
End Function

Konuyu şekildeki İller tablosu ve Belediye Bilgileri tablosundaki değerlerle açıklayacak olursak; aşağıdaki şekilde arayüzünü görmüş olduğunuz Belediye Bilgileri modülünde kayıtları ekrana yazdırırken, il_t_belediye tablosunun ilkod sütununda ki değerler il kodlarıdır. Yani şekilde görülen İli alanındaki ZONGULDAK değerleri aslında il_t_belediye tablosunda 67 olarak tutulmaktadır. Biz bu alana 67 değerini değilde bu sutüna referans eden primary key tablosundaki ilkod alanının değerini eşleştirerek eşitlik sağlandığı satırdaki ilad sütununun değerini yazdırmak istiyoruz. Bu durumda il_t_belediye tablosundaki 67 değeri il_t_il tablasundaki 67 değeri ile eşleştiriliyor ve bu satırdaki karşılık gelen ilad değeri yani ZONGULDAK değeri il_t_il tablosundan alınarak yazdırılıyor.




Aşağıdaki server-side script'te gördüğünüz üzere objSQL2kDB nesnemizin FindPkFld metodu değerlerini (attributes) örnekteki gibi tanımlayabiliriz. Aşağıdaki kodu bir döngü içinde kullanırsak, tablonun foreign key tüm sütun adları fonksiyona gönderilir ve fonksiyon sistem tablosunu kullanarak karşılık gelen primary key tablodan istediğimiz sütunun değerini bize geri döndürür.
Aşağıdaki script, foreign key sütun adı, değer, ve karşılık gelen primary key tablosunun 1 nci (yani ikinci satırını - kayıt setinde satırlar 0'dan başlar) sütun değerini TD tag'i arasına yazdırır.
<%strConn = "Veritabanına bağlantı string'i" %>

<%Response.WriteobjSQL2kDB.FindPkFld(strConn,fld.name,rs(fld.name),1,"il_t_belediye")%>


Gradient Fitler

Aşağıdaki arayüz de üzerinde Belediye Bilgileri yazılı olan ve Windows işletim sistemlerinden bildiğiniz renk geçişli program başlık barı aslında Microsoft® Internet Explorer 5.5 veya sonraki sürümlerinde kullanılabilecek bir renk geçişi filtresidir. (Gradient Filter) . Arayüzlerde görmüş olduğunuz filtre kodunu CSS dosyanıza ekleyerek yada tag içinde stil (style) tanımlayarak kullanabilirsiniz. Benim kullandığım TD tag için CSS style filtre kodu aşağıdaki gibidir.


TD.tdGradient
{
FILTER: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#000080, endColorstr=#6099FC)
}

GradientType 0 (sıfır) veya 1 (bir) değerlerini alır. 0 olması renk geçişinin yukarda aşağıya, 1 olması renk geçişinin soldan sağa doğru olmasını sağlar.
startColorstr ve endColorstr anlaşılacağı üzere başlangıç ve bitiş renk değerlerini veriyorsunuz. Bu örnekte koyu lacivertten açık tona doğru renk geçişi var.


SQL ile veritabanı sorgulama

Select ifadesini kullanmadan önce hangi veritabanı ve tablolar ile işlem yapacağımızı bilmeliyiz. Verilerle işlem yapmadan önce bazı komutlarla bu verilerin çekilmesi gerekmektedir. Bu komutlara SQL ifadesi diyoruz. Select ifadesi ile seçmek istediğiniz kolon ve satırları belirtebilirsiniz.

Select ifadesinin kullanımı :

Select ifadesi veritabanından bilgi çekmek için kullanılır. Select ifadesi ile istediğiniz kolan ve satırları belirtebilirsiniz.
• Select ifadesi istenen satırları bir liste şeklinde verir.
• WHERE ifadesini kullanarak sorgunuzu filtreleyebilir ve sadece sizin kriterlerinize uygun satırların sorgu sonucu olarak gelmesini sağlayabilirsiniz. Bu kriterler lojik ifadeler, karşılaştırmalar olabilir.
• FROM ifadesi bu verilerin alınacağı tablo isimlerini belirtmemizi sağlar.

Kolonların belirlenmesi :

Sorgu sonucunda tablodaki tüm kolonlar değil de sadece işinize yarayacak kolonların gelmesini isteyebilirsiniz. Bu durumda istediğiniz kolanların her birinin adını belirmek zorundasınız. Select’den sonra kolon isimleri, local değişkenler, hesaplanmış ifadeler belirtebilirsiniz. Yani veritabanından çekilen kolon üzerinde herhangi bir işlem yaptırarak listelettirebilirsiniz. Örneğin veritabanımızda ürün fiyatları olsun. Fakat bizim ürün fiyatları yanında KDV’sine de ihtiyacımız oldu fakat bu bilgi veritabanında yok. Bu durumda Select ifadesi ile veriyi çekme aşamasında iken bunu da hesaplanmış ek bir kolon olarak çekebiliriz. Select ifadesinden sonra sadece kolon isimleri bulunmak zorunda değil.
Kolon isimlerini virgül (,) ile ayırmak zorundayız. Veriler listelenirken kolon bilgileri verdiğimiz sırada gelir. Performans kazanmak için kolon kullanımına alışmalıyız. * kullandığımız takdirde tablodaki tüm alanlar ihtiyacımız olsun veya olmasın gelecektir. Bu
durum ise bize performans kaybı sağlayacaktır. Aşağıdaki örnekte employees tablosunda belirttiğimiz kolonları çekiyoruz. Bu tablo Northwind veritabanında bulunmaktadır.

ÖRN: SELECT employeeid, lastname, firstname, title
FROM employees

Where ifadesinin kullanımı :

Where ifadesi ile istediğimiz satırları alabiliriz. Where ifadesinden sonra belirttiğimiz kriterler sınırsız sayıda olabilir. Where ifadesinden sonra kriter olarak kullandığımız verinin tipi char, nchar, varchar, nvarchar, text, datetime ve smalldatetime ise tek tırnak (‘) kullanmalıyız. Where ifadesi ile normalde fazla sayıda gelen satır sayısını azaltmış oluruz. Where ifademiz tutarsız ise tüm satırlar yine gelecektir.

ÖRN : SELECT employeeid, lastname, firstname, title
FROM employees
WHERE employeeid=5



Sonuç olarak tüm kayıtlarımız arasından sadece employeeid’si 5 olan veriler geldi.

Veri Filtreleme :

Zaman zaman ihtiyacınız olan verileri filtrelemek isteyebilirsiniz. Verilerinizi Where ifadesinden sonra kullanacağınız bazı koşullar ile filtreleyebilirsiniz. Bu koşullar şunlardır;

• Karşılaştırma operatörleri =, >, <, >=, <=, <>
• String karşılaştırmalar LIKE ve NOT LIKE
• Lojik operatörler AND, OR
• Lojik operatörler (Negatif) NOT
• Değer aralıkları BETWEEN ve NOT BETWEEN
• Değer listeleri IN ve NOT IN
• Bilinmeyen değerler IS NULL ve IS NOT NULL

Karşılaştırma operatörlerinin kullanımı :

Karşılaştırma operatörleri ile tablodaki bir veri ile belirlenmiş bir veri veya hesaplanmış veri karşılaştırılabilir. Fakat karşılaştırmak istediğiniz alan ve verinin tipleri aynı olmalıdır. Sayısal bir ifadeyi tarih ifadesi ile karşılaştıramazsınız. Burada kullanılan operatörler:

= Eşittir
> Büyüktür
< Küçüktür
>= Büyük veya eşittir
<= Küçük veya eşittir
<> Eşit değildir

NOT ifadesinin kullanımı tavsiye edilemez. Çünkü kullanıldığı takdirde tüm tablo değerlendirilir ve veri akışının yavaş olması problemi yaşanır.

ÖRN: SELECT lastname, city
FROM employees
WHERE country=’USA’



Country alanı USA olanların listesi alındı. Dikkat edilirse country alanı string bir ifade olduğu için USA ifadesi tek tırnak içine alındı. Bu dikkat edilmesi gereken bir noktadır.

ÖRN :SELECT orderid, customerid
FROM orders
WHERE orderdate < ‘8/1/96’



String Karşılaştırmaların Kullanımı :

Satırlarımızdaki verileri LIKE ifadesi ile bazı wildcard’ları kullanarak filtreleyebiliriz. LIKE ifadesini sadece char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime ve datetime veri tiplerinde kullanabiliriz. Bu wilcardlar aşağıdaki gibidir:



% 0 veya daha fazla karakterli string
_ tek bir karakter
[] belirtilenler arasından tek bir karakter
[^] belirtilenler arasında olmayan tek bir karakter
Bu wildcarların LIKE ile kullanım örnekleri aşağıdaki gibidir;
LIKE ‘BR%’ BR ile başlayan tüm isimler
LIKE ‘Br%’ Br ile başlayan tüm isimler. Büyük küçük harf farkı
LIKE ‘%een’ een ile biten tüm isimler
LIKE ‘%en%’ en karakterlerini içeren tüm isimler
LIKE ‘_en’ en ile biten tüm 3 karakterli isimler
LIKE ‘[CK]%’ C veya K ile başlayan tüm isimler
LIKE ‘[S-V]ing’ Tüm 4 karakterli ve ilk karakteri S ile V arasında olan ve ing ile biten tüm isimler
LIKE ‘M[^c]%’M ile başlayan ve ikinci karakteri c olmayan tüm isimler

ÖRN : SELECT companyname
FROM customers
WHERE companyname LIKE ‘%Restaurant%’



Lojik operatörler :

Birden fazla kriterleri bir arada kullanmamıza yardımcı olurlar. AND operatörü kullandığımız takdirde verdiğimiz tüm koşullara uyan kayıtlar gelir. OR operatörü kullandığımız takdirde verdiğimiz koşullardan birine uyanlar gelir. NOT kullandığımızda ise NOT dan sonraki koşulu sağlamayan kayıtlar gelir. Birden fazla koşul kullandığımız durumlarda parantezi koşulları gruplamak için kullanabiliriz. Böylece daha okunaklı olur ve gruplama işlemini yapabiliriz. SQL Server 2000 ilk önce NOT operatörüne arkasından AND ve OR operatörlerine bakar. Eğer tüm operatörler aynı grup içerisinde ise soldan
sağa doğru işlenir.

ÖRN : SELECT productid, productname, supplierid, unitprice
FROM products
WHERE (productname LIKE ‘T%’ OR productid=46)
AND (unitprice >16.00)



Değer aralıkları :

BETWEEN ifadesini Where ile beraber kullanarak belli bir değer aralığındaki kayıtları getirebiliriz. Between ifadesi ile belirlenen aralık dışında kalan verileri almak için NOT BETWEEN kullanabiliriz. Between ifadesinde verilen aralığın bir bitiş noktası olmadır. Between ile verilen aralık (10 and 20) aslında AND ifadesi kullanımı ve büyük eşittir, küçük eşittirden oluşan bir koşuldur. Bunu kısaca between ifadesi ile yapmaktayız.
Örneğin (KOD BETWEEN 10 AND 20) aslında ((KOD>=10) AND (KOD<=20)) demektir.

ÖRN : SELECT productname, unitprice
FROM products
WHERE unitprice BETWEEN 10 AND 20



Aslında aynı ifadeyi aşağıdaki şekilde de yazabilirdik.

SELECT productname, unitprice
FROM products
WHERE (unitprice>=10)
AND (UnitPrice<=20)

Değer Listeleri :

Verilen bir liste içerisinde yer alan veya almayan değerleri içeren kayıtları getirir. Listede yer alanları aramak için IN, yer almayanları aramak için NOT IN ifadelerini kullanırız. Birden fazla koşulu OR ile de ayırabiliriz veya IN ile bir liste içerisinde arayabiliriz. İkisinide SQL aynı şekilde çözümler. Yani KOD IN [1,2] diyebildiğimiz gibi KOD=1 OR KOD=2 de diyebiliriz. NOT IN ifadesi daha öncede belirtildiği gibi veri akışını yavaşlatabilir.

ÖRN : SELECT companyname, country
FROM suppliers
WHERE country IN (‘Japan’,’Italy’)




Bu ifadeyi şu şekilde de yazabilirdik.

SELECT companyname, country
FROM suppliers
WHERE country=’Japan’ OR country=’Italy’

Bilinmeyen değerler :

Veri girişi sırasında tablodaki kolona veri girilmemiş olabilir ve default veri de atanmamış olabilir. Bu durumda bu kolondaki değer NULL’dur. Null değer 0 (nümerik) veya boşluk (string) ile aynı şey değildir. Bir alana değer girilmemiş kayıtları listelemek isin IS NULL ifadesini kullanabiliriz. Null ifadesini diğer koşullar ile kullanamayız. Yani >Null diye bir şey diyemeyiz. Kolonlar Null değer içerebilir tanımını tablo yaratırken yapabiliriz.

ÖRN : SELECT companyname, fax
FROM suppliers
WHERE fax IS NULL






Derste Yapılan Sorgulama Örnekleri

Create Database: Bu deyim veritabanı oluşturmak için kullanılır. Bir veritabanında 3 tür dosya saklanabilir. Bunlar:

Primary: Bu tip dosyalar veritabanı için başlangıç bilgilerini içerir, aynı zamanda veri saklamak için de kullanılırlar. her veritabanı bir primary dosyaya sahiptir. Bu dosyalar .mdf uzantılıdır.

Secondary: Secondary dosyalar primary data dosyası içinde bulunmayan bütün dosyaları içerirler.eğer primary dosya veritabanı içindeki dosyaları saklayabilecek büyüklükte ise o zaman veritabanları secondary dosyaya ihtiyaç duymazlar. Bu tür dosyaların uzantıları .ndf’dir.

Log: Log dosyalar veritabanı içindeki değişiklik bilgilerini tutarlar ve veritabanlarının kurtarılması için kullanılırlar. Log dosyaları .ldf uzantılıdır.

CREATE DATABASE Malzeme
ON (NAME= Malzeme_dat,
FILENAME=’C:\mssql7\data\malzeme.mdf,
SIZE=4,
MAXSIZE=10,
FILEGROWTH=1’)

Malzeme: Veritabanının adı
Name: Dosyanın mantıksal adı, SQL deyimlerinde dosyayı belirlemede kullanılır.
Filename: Fiziksel ad, dosyanın işletim sistemindeki adı
Size:Dosyanın büyüklüğü
Maxsize: Dosyanın artışla beraber sahip olabileceği maksimum büyüklük
Filegrowth: Dosyanın büyüme oranı

NOT: Dosya türü belirtilmezse varsayım olarak primary dosya olur. Log dosyası belirtilmediği zaman otomatik olarak 1MB’lık log dosyası oluşturulur.

Create Table: Bu deyim tablo oluşturmak için kullanılır. Tablo oluşturulurken kullanılan kısıtlamalar aşağıda verilmiştir:

NOT NULL: Alanın boş geçilemeyeceği anlamına gelir.
UNIQUE: Alana girilen bilginin tekil olacağı anlamına gelir.
PRIMARY KEY: Temel anahtar kısıtlamasıdır. Söz konusu alanın hem tekil hem de boş geçilmez olduğunu anlatır. Her tabloda en fazla bir tane olur.
FOREIGNKEY: Primary Key’in diğer tablodaki karşılığıdır.

CREATE TABLE Musteri
(no int NOT NULL,
ad char(20) NOT NULL,
soyad char(30) NOT NULL,
adres char(40),
il char(10),
bakiye Money,
primary key(no) )

Insert..Values: Tabloya veri girişi yapmak amacıyla kullanılır. Girilecek veriler tablonun kolonlarının oluşturulma sırasına göre verilmelidir.

INSERT Musteri
VALUES (1,’Tuba’,’Çetinel’,
‘Yenimahalle’,’Ankara’,
30000000)



Select..From: Tablodan sorgulama yapmak amacıyla kullanılır.

SELECT *
FROM Musteri
Tablodaki bütün alanları ve bu alandaki bütün kayıtları listeler

SELECT no,ad,soyad
FROM Musteri
Tablonun bütün kayıtların no, ad, soyad alanlarını listeler.

Group By: bu deyim toplam fonksiyonları denilen SUM, AVG, MAX, MIN, COUNT ile birlikte kullanılır.

AVG: Değerlerin ortalamasını alır.
COUNT: Değerlerin sayısını verir.
MAX: Değerler arasındaki max. olanı verir.
MIN: Değeler arasındaki min. olanı verir.
SUM: Değerlerin toplamını verir.

SELECT SUM (bakiye)
FROM Musteri
GROUP BY il
İllere göre bakiye toplamını verir.

Order By: Sorgu sonuçlarını sıralamak için kullanılır. Bu deyimle beraber desc kullanılırsa a..z’ye ya da küçükten büyüğe, asc kullanılırsa z..a’ya ya da büyükten küçüğe sıralama yapar. Hiçbir şey kullanılmazsa varsayım olarak desc alınır.

SELECT no,ad,soyad
FROM Musteri
ORDER BY ad
no, ad, soyad alanlarındaki kayıtları ada göre a..z’ye sıralar.

Where: Sorgu şartı belirtmek için kullanılır.

SELECT ad,soyad,bakiye
FROM Musteri
WHERE ad=’mehmet’
Adı Mehmet olan kayıtları listeler.

SELECT ad,soyad,bakiye
FROM Musteri
WHERE bakiye between 30000 and 40000
Bakiyes, 30000 ile 40000 arasında olan kayıtları listeler.

SELECT ad,soyad,bakiye
FROM Musteri
WHERE ad like ‘a%’
Adı a ile başlayan kayıtları listeler.








SORULAR

1. Aşağıdakilerden hangisi bir veritabanında bulunabilecek dosyalardan değildir?

a. Log
b. Primary √
c. Index
d. Secondary

2. Aşağıdakilerden hangisi temel anahtar kısıtlamasıdır?

a. Not Null
b. Primary Key √
c. Foreign Key
d. Unique

3. Adı ‘a’ ile başlayan kayıtların ad, soyad ve bakiyelerini listelemek için yazılacak olan SQL cümlesi aşağıdakilerden hangisidir?

a. SELECT ad,soyad
FROM Musteri
WHERE ad LIKE ‘%a’

b. SELECT ad,soyad
FROM Musteri
WHERE ad LIKE ‘a%’

c. SELECT ad,soyad,bakiye √
FROM Musteri
WHERE ad LIKE ‘%a’

d. SELECT ad,soyad,bakiye
FROM Musteri
WHERE ad LIKE ‘%a%’


4. ‘no,ad,soyad’ alanlarından oluşan ve no alanında primary key kısıtlaması olan ‘ogrenci’ adlı bir tabloyu oluşturmak için aşağıdaki SQL cümlelerinden hangisi yazılır?

a. CREATE TABLE ogrenci √
(no int,
ad char(20),
soyad char(20),
primary key(no))

b. CREATE TABLE ogrenci
(no int,
ad char(20),
soyad char(20))

c. CREATE DATABASE ogrenci
(no int,
ad char(20),
soyad char(20),
primary key(no))


d. CREATE TABLE ogrenci
(no int,
soyad char(20),
primary key(no))


5. Aşağıdakilerden hangisi Group By değimiyle beraber kullanılan toplam fonksiyonlarından değildir?

a. SUM
b. AVG
c. MAX
d. INT√

6. SQL Server Enterprise Manager’da bulunan “Enter a registration...” seçeneği ne için kullanılmaktadır?

a. Bir veritabanına kayıt olmak için kullanılır.
b. Bir tablo’yu kayıt etmek için kullanılır.
c. Bir uzak SQL Server’a kayıt olmak için kullanılır. √
d. Bir uzak SQL Server’ı kayıt etmek için kullanılır.

7. SQL Server’a Visual Basic programlama dilinden bağlanmak için hangi teknoloji kullanılır?

a. ADO√
b. BDE
c. My-ODBC
d. ASP

8. SQL Server’a hangi kimlik denetimi ile bağlanılamaz?

a. NT kimlik dentimi
b. SQL Server kimlik denetimi
c. NT ve SQL kimlik denetimi
d. SSL kimlik denetimi√

9. SQL Server Books Online nedir?

a. SQL Server kitapları online satış sitesi
b. SQL Server Yardımı√
c. SQL Server kitapları tanıtımı
d. Microsoft SQL Server sitesine link

10. SQL sorgularının sonucuna göre otomatik çalışan yapıya ne ad verilir.?

a. Stored Procedure
b. Tablo
c. Trigger√
d. View

Hiç yorum yok: