Veri Tabanı Yönetim Sistemleri 1 Ders 9 Microsoft SQL Server‘a Giriş Yrd. Doç. Dr. Altan MESUT Arş. Gör. Emir ÖZTÜRK Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü
MS SQL Server İlk sürüm olan SQL Server 1.0, OS/2 işletim sistemi için 1989 yılında Sybase ve Ashton-Tate ile birlikte Microsoft tarafından piyasaya sürülmüştür. Daha sonra Sybase tarafından Microsoft’a satılmıştır. Microsoft'un Jet veritabanı moturunu kullanan dosya- paylaşımı temelli Access'ten farklı olarak, SQL Server istemci/sunucu tabanlı bir ilişkisel veritabanı yönetim sistemidir. Sorgu dili olarak ANSI SQL’in yanında, prosedürel programlama mantığı içeren Transact-SQL (T-SQL) de kullanmaktadır. Önceleri sadece Microsoft işletim sistemlerinde kullanılabilirken, artık Linux işletim sistemlerine de kurulabilmektedir.
MS SQL Server Yapısı
Access vs. MS SQL Server: Özellikler Tablo İlişkisel İlişkisel ve Geçici Görüntü (View) Var * Var Hareket Günlüğü (Transaction Log) Yok Windows NT Güvenliği ile Entegrasyon Kullanıcı Yönetimi Replikasyon Bölümleme (Partitioning) Prosedür & Fonksiyon Tetikleyici (Trigger) * Access 2010 ve sonrasında TABLO ARAÇLARI / TABLO Sekmesinde "Etkinliklerden Önce" ve "Etkinliklerden Sonra" gruplarında bulunan makro türü yapılar Tetikleyici yerine kullanılabilir. Prosedür ve Fonksiyon yerine de "Adlandırılmış Makrolar" kullanılabilir. View ise Access'teki Sorgu nesnesine denk gelir.
Access vs. MS SQL Server: Sınırlar Özellik Access SQL Server Veritabanı Büyüklüğü 2 GB 524.272 TB * Tablo Büyüklüğü 524.272 TB Kayıt Büyüklüğü 16 MB - Nümerik Değer Büyüklüğü 32 bit 126 bit BLOB / CLOB Büyüklüğü 64 KB / 1 GB ** Tablo Adı Büyüklüğü 64 128 Sütun Adı Büyüklüğü Şifre Büyüklüğü 14 Bir Tablodaki Sütun Sayısı 255 30.000 Bir Sorgudaki Tablo Sayısı 32 * 32 767 dosya x 16 TB maksimum dosya büyüklüğü ** 64 KB (memo alanı), 1 GB (OLE Nesnesi alanı)
Access vs. MS SQL Server: Veri Türleri Metin Short Text, Long Text char, varchar, nchar, nvarchar, sysname, text, ntext, Sayı Number, Currency, AutoNumber smallint, int, bigint, tinyint, decimal, numeric, float, real, money, small money Tarih Saat Date/Time date, time, datetime, datetime2, smalldatetime, Bool değer Yes/No bit, binary, varbinary Diğer OLE Object, Hyperlink, Attachement geography, geometry, image, xml
Sürümler: Enterprise Standard Developer Express Veri merkezleri için uygun olan en üst sürümdür.. Veri merkezi için gereken bileşenleri ve kritik iş yüklerinin yönetilmesi için servisleri içerir. Standard Küçük organizasyonların kullanımına uygundur. Basit veri yönetimi, geliştirme araçları ve bulut desteği içerir. Developer Enterprise’ın tüm özelliklerini içerir. Sadece geliştirme ve test aşamaları için lisans verilir. Express En fazla 10 GB veri saklayan sınırlandırılmış ücretsiz sürümdür. MySQL’in yoğun kullanıldığı web ve mobil platform uygulamalarında kullanılabilir.
Servisler: Replikasyon Verilerin kopyalanması ve veritabanı nesnelerinin senkronize edilmesi için kullanılır. Yayıncı – abone sistemi ile çalışır. Değişiklikler yayıncıdan abonelere gönderilir. SQL Server üç farklı replikasyon desteği sunar. Transaction replication Her transaction’da abone veritabanları da senkronize edilir. Veritabanları neredeyse gerçek zamanlı olarak senkronize edilir. Merge replication Yayıncı ve abonedeki değişiklikler takip edilir ve periyodik olarak iki yönlü senkronizasyon gerçekleştirilir. Eğer aynı veri üzerinde her iki tarafta da değişiklik yapıldıysa çakışma oluşur. Çakışma el ile düzeltme veya önceden belirlenmiş bir kuralın uygulanması yoluyla çözülebilir. Snapshot replication Tüm veritabanının bir kopyası abonelere gönderilir. Son değişiklikler takip edilmez.
Servisler: Analiz Analiz servisleri SQL Server’a OLAP (On-Line Analytical Processing) ve veri madenciliği özellikleri sağlar. OLAP motoru MOLAP (multidimensional), ROLAP (relational), HOLAP (hybrid) desteği sunar. Küp verisine MDX (Multidimensional Expressions) veya LINQ sorguları ile erişilebilir. Analiz servisleri veri madenciliği için; Karar ağaçları, Kümeleme algoritmaları, Naive Bayes algoritması, Zaman serileri analizi, Regresyon analizi ve Yapay sinir ağları gibi çeşitli algoritmalar içermektedir.
Servisler: Raporlama Veritabanından elde edilen veri için rapor oluşturma araçlarıdır. Web arayüzünden yönetilir. Raporlar Business Intelligence Development Studio ve Visual Studio’nun birlikte kullanılması ile oluşturulabilir. Raporlar RDL dosyaları olarak oluşturulabilir. Daha sonra bu dosyalar Excel, PDF, CSV, XML, TIFF ve HTML formatına dönüştürülebilir.
Servisler: Bildirim Veriye bağlı bildirimler oluşturularak abonelere iletilir. Bir abone herhangi bir olay veya transaction olması durumunda bildirim isteyebilir. Bu olay gerçekleştirildiğinde bildirim servisleri üç farklı yöntemden birini kullanarak aboneye gerçekleşen olaydaki değişikliği bildirir. SMTP SOAP Dosya sistemi içerisinde bir dosya oluşturmak
Servisler: Bütünlük Verinin bir yerden diğerine, belirli kurallar dahilinde taşınması için kullanılır. Grafik arayüz desteği ile Farklı kaynaklardan veri alımı Veri sorgulama Veri değiştirme Veri birleştirme Tekrarlı verileri temizleme işlemleri gerçekleştirilebilir. Bu işlemlerden sonra veri istenilen yere aktarılır.
Servisler: Full Text Search (FTS) Herhangi bir yapı ile saklanmayan text verisi için özelleştirilmiş indeksleme ve sorgulama işlemlemleri sağlar. Karakter tabanlı herhangi bir sütun için index oluşturulabilir. Oluşturulan index ile text verisi içeren sütunda LIKE işleminde olduğu gibi kelime arama işlemi gerçekleştirilebilir. Fakat FTS, LIKE komutuna göre daha hızlı çalışmaktadır. Tam arama dışında yaklaşık aramayı da destekler. Bunun için bulunan kelimeler için 0-1000 arası bir Rank değeri hesaplanır. Yüksek rank daha doğru eşleşme anlamına gelir.
CLR Entegrasyonu Microsoft .NET altında kullanılan CLR (Common Language Runtime) motoru SQL Server ile kullanılabilmektedir. SQL CLR ile prosedür ve tetikleyiciler herhangi bir .NET dili ile yazılabilir. Yazılan kod CLI (Common Language Infrastructure) assembly’ye derlenir ve veritabanında kaydedilir. Derlenmiş bu kod herhangi bir prosedür gibi çalıştırılabilir.
Transact-SQL (T-SQL) T-SQL, SQL standardına ilave olarak prosedürel programlamayı, yerel değişkenleri, string, tarih ve matematik fonksiyonlarını içermektedir. T-SQL sadece SQL Server altında çalışır. Oracle’da prosedürel dil olarak PL/SQL, PostgreSQL’de ona benzeyen PL/pgSQL, IBM DB2 ile de SQL PL kullanılır. Yani her veritabanı yönetim sistemi SQL dilini ortak kullansa da, prosedürel programlamada faklılıklar vardır. Önümüzdeki derslerde yazacağımız prosedür, fonksion ve tetikleyici örnekleri T-SQL’e göre olacaktır.
Araçlar SQLCMD Visual Studio Komut satırı uygulamasıdır. Uygulama içerisinden SQL sorguları ve .sql uzantılı script dosyaları oluşturulup çalıştırılabilir. Visual Studio SQL CLR ile çalıştırılacak kodların yazılması ve debug edilmesi için kullanılabilir. Veritabanı şemaları oluşturmak, düzenlemek ve görüntülemek için grafik arayüz de sunmaktadır.
Araçlar SQL Server Management Studio MS SQL Server’ın tüm bileşenlerini yönetmek için kullanılan grafik arayüzdür. Veritabanı nesneleri ile çalışmak için script editörleri ve grafik araçlar içerir. Business Intelligence Development Studio Veri analizi geliştirmek amacıyla kullanılan tümleşik geliştirme ortamıdır. Visual Studio tabanlıdır. SQL Server’a özgü proje tipleri, araçlar, raporlar, küpler ve veri madenciliği yapıları içerir.
SQLCMD ve SQL Server Management Studio
Microsoft SQL Server Kurulumu
İstenirse bu seçenek ile instance ismi belirlenebilir
Automatic olan hizmetler, bilgisayar açılırken başlatılacaktır Automatic olan hizmetler, bilgisayar açılırken başlatılacaktır. Bu da bilgisayarın açılışını yavaşlatır. Gerek duymadıklarınızı Manual durumuna getirip, ihtiyacınız olduğunda başlatın.
Veri tabanı motoru ve analiz servisi için dil ayarları bu kısımdan yapılabilir. Türkçe ayarların kalması uygundur.
Mixed Mode seçilirse hem Windows kullanıcıları hem de SQL Server kullanıcıları veritabanına erişim için kullanılabilir. Kullanıcı adı "sa" olan SQL Server sistem yöneticisinin şifresi belirlendikten sonra, Windows kullanıcılarından hangisinin yönetici yetkisinde olacağı "Add" ile berlilenebilir. "Add Current User" ile kurulumu yapan kullanıcı yönetici olarak atanabilir. Verilerin saklanacağı dizinler belirlenebilir
Microsoft SQL Server Management Studio
SQL Server Authentication ile veritabanına bağlanma Server Type ile veritabanı dışında, analiz, raporlama ve entegrasyon servislerine de bağlanabilirsiniz. Başka bir bilgisayardaki veritabanı motoruna veya servislere bağlanmak için Server Name seçeneği kullanılır.
Veritabanı Yaratma SQL Server Management Studio, Visual Studio ile benzer bir arayüz sunmaktadır. Sol taraftaki Nesne Gezgini penceresi ile veritabanı nesnelerine erişilebilir ve değişiklik yapılabilir. "Databases" altında "System Databases" ve onun altında ise 4 tane sistem veritabanı yer alır. Bu veritabanları üzerinde de tablo yaratılabilse de genellikle bu tercih edilmez. Kendi tablolarımızı saklamak üzere yeni bir veritabanı oluşturmak için "Databases" üzerine sağ tıklanıp açılan menüden "New Database" seçilir. NOT: Bu menüdeki "Attach" daha önce yaratılmış olan bir SQL Server veritabanına bağlanmak için, "Restore Database" ise yedeği (backup) alınmış veritabanını geri getirmek için kullanılır.
Veritabanının Genel Özellikleri Veritabanı ismi girildikten sonra bu veritabanı için bir sahip belirlenmek istenirse "owner" kısmına yazılabilir. 2 tane veritabanı dosyası bu listeye varsayılan olarak eklenir: 5 MB büyüklüğünde ve "ROWS Data" türünde olan ilk dosya tabloları, 1 MB büyüklüğünde ve "LOG" türünde olan ikincisi ise günlük bilgilerini saklayacaktır. İstenirse aşağıdaki "Add" düğmesi ile yeni dosyalar eklenebilir. Dosyaların başlangıç boyutu ise liste üzerinden değiştirilebilir.
Seçenekler Seçenekler (Options) altında veritabanının dil ayarlarını, önceki sürümler ile uyumluluğunu, otomatik olarak yapılması gereken işlemleri, vs. ayarlayabileceğiniz seçenekler yer alır. Son kullanıcı da çıkınca otomatik kapansın mı? Veritabanından büyük miktarda veri silindiğinde dosya boyutu küçülsün mü? (başlangıç boyutunun altına inemez) Ayrıntılı bilgi için: http://msdn.microsoft.com/en-us/library/ms188124.aspx
Tablo Yaratma Bir tablo yaratmak için seçilen veritabanı altında "Tables" üzerine sağ tıklanarak açılan menüden "New" + "Table" seçilirse tablo tasarımı (table design) görünümüne geçilir (bak. sonraki slayt)
Tablo Tasarımı Görünümü ve Birincil Anahtar Belirleme Tablonun alan isimleri ve veri tiplerinin belirlendiği tasarım görünümünde birincil anahtar oluşturmak için, ilgili alan veya alanlar seçilip üzerlerine sağ tıklanarak, çıkan menüden (bu menü tasarım görünümüne geçildiğinde beliren Table Designer menüsünün aynısıdır) "Set Primary Key" seçilebilir. Kaydetme ikonu tıklanıp (veya Ctrl+S) açılan pencereye tablonun ismi (Öğrenciler) yazılarak kaydedilir.
Tabloyu kaydettikten sonra bir değişiklik yapmak istediğinizde aşağıdaki uyarı mesajı ile karşılaşabilirsiniz: Tools / Options menüsü, Designers altında yer alan aşağıdaki seçeneğin kaldırılması ile bu durum düzeltilebilir:
Dış anahtar belirleme Dış anahtar belirlemek için "Table Designer" altındaki "Relationships" menüsü kullanılabilir. Notlar ve Dersler tabloları da oluşturulduktan sonra, Notlar tablosunun tasarım görünümünde iken "Relationships" tıklanırsa aşağıdaki pencere gelir: Add tıklanarak dış anahtar ilişkisi oluşturulur ve bağlanacağı tabloyu belirlemek için" Tables And Columns Sepecification" kullanılır.
Dış anahtar belirleme (devam) İlişkinin PK tarafı için ilgili tablo (Dersler) ve o tablodaki ilgili sütun (DersKodu) seçimleri yapılarak, FK tarafı için de Notlar tablosundan bağlantılı olacak sütun (Ders) seçilir: Daha önce FK_Notlar_Notlar olan ilişki ismi Dersler tablosu seçilince FK_Notlar_Dersler olarak değişir (Öğrenciler seçilirse FK_Notlar_Öğrenciler olur)
Bilgi tutarlılığını sağlamak için: Access'teki Bilgi Tutarlılığına Zorla altında yer alan İlişkili Alanları Art Arda Sil/Güncelleştir seçeneklerini kullanarak yaptığımız işlemin benzeri INSERT And UPDATE Specification seçeneğinin Delete Rule ve Update Rule alanları Cascade seçilerek yapılabilir. PK tarafında silinen bir kaydın FK tarafındaki ilişkili olduğu kayıtlar silinmeyip, "Set Null" ile ilgili alan boş bırakılabilir veya "Set Default" ile varsayılan değer ile doldurulabilir.
Nesne Gezginini Kullanma Nesne gezgini üzerinde her tablonun altında Columns, Keys, Constraints, Triggers, Indexes ve Statistics adında düğümler bulunur. Bir tablonun üzerine sağ tıklayıp açılan menüden "Design" seçilirse (veya herhangi bir sütun isminin üzerine sağ tıklayıp "New Column" veya "Modify" seçilirse) tasarım görünümüne geçilir. Keys düğümüne sağ tıklayıp açılan menüden "New Foreign Key" seçilirse önce tasarım görünümü açılır, sonra önceki slaytlarda gördüğümüz "Foreign Key Realationships" penceresi gelir. Constraints sağ tıklanıp "New Constraint" seçilirse "Check Constraints" adında bir pencere gelir (bak sonraki slayt) Triggers, Indexes ve Statistics hakkında sonraki derslerde bilgi verilecektir.
Check Constraint Check constraints penceresinin Expression alanına gireceğimiz koşul ile bir alana girilecek veriye sınırlama (constraint) getirebiliriz. NOT: Aslında PK, FK ve Not Null da sınırlamadır. Haftaya değineceğiz.
Sorgu Penceresi Araç çubuğundaki "New Query" simgesi (veya bir veritabanı sağ tıklanıp menüden "New Query") ile sorgu penceresi açılabilir. Eğer DML ifadeleri yazıldı ise Execute tıklandıktan sonra her ifade için etkilenen satır sayısı "Messages" sekmesinde belirtilir. Eğer bir sorgu yazıldı ise Execute tıklandıktan sonra "Results" sekmesinde sorgunun sonucu gösterilir.
Select Top 1000 Rows Edit Top 200 Rows Bir tablonun üzerine sağ tıklayıp "Select Top 1000 Rows" seçilirse, yanda görüldüğü gibi bir sorgu otomatik olarak yazılıp çalıştırılır. Bir tablonun üzerine sağ tıklayıp "Edit Top 200 Rows" seçilirse, aşağıda görüldüğü gibi veri girişi için Access'teki Veri Sayfası Görünümü'ne benzeyen, ekleme, silme ve değiştirme yapılabilen bir tablo gelir.
Diagram Diagram nesneleri Access'teki İlişkiler görünümü gibi tablolar arası ilişkilerin gösterildiği bir çizelgedir. Dış anahtar ilişkileri Access'te olduğu gibi buradaki tablolar arasında sürükle bırak yöntemi ile yapılabilir.