24 Temmuz 2014 Perşembe

Intersect ve Expect Kullanımı(T-SQL)

Intersect gönderilen sorguda dönen sonuç kümesinin kesişimini getirir.

Expect ise birinci sorgu sonucundan dönen sonuç kümesinde olup ikinci sorgu sonucunda dönen sonuç kümesinde olmayan kayıtları getirir.

23 Temmuz 2014 Çarşamba

PIVOT (Transact-SQL) Kullanımı


Pivot table satırlarda bulunan unique değerleri sütunlarda göstermemizi sağlayan bir sorgulama türüdür.
Yani bir sütunda bulunan değerleri sütunlarda çoklu olarak göstererek satırlarda bu değerlerin istediğimiz şekilde toplamlarını almamızı sağlar.

Pivot table uygulaması için databaseimizin 2005 versiyonu veya sonrası olması gerekir.  Veya veritabanımızın uyumluluk değeri 90 veya üzeri olmalıdır.
Pivot table daha çok raporlama ve analiz işlemleri için kullanılır. Aşağıdaki örnekte gruplandırma yapılarak toplam alınmış sorguyu diğerinde ise aynı sorgunun pivot table şeklinde göstermini görebilirsiniz. Örneği uygulayabilmek için AdventureWorks sample  databaseysini indirip attach etmemiz gerekmektedir.

Bu kod satır bazında gruplandırma yapmaktadır.
Bu kod ise aynı sorgunun pivot table şekline çevrilmiş durumudur.

22 Temmuz 2014 Salı

SQL Server Recovery Modelleri


Recovery Model SQL Servera ait bir veritabanı özelliği Transaction Logların nasıl tutulduğuna karar vermemizi sağlar.

SQL Serverda 3 çeşit recovery model vardır.
1.Full Recovery Model   
2.Simple Recovery Model
3.Bulk Logged Recovery Model

Full Recovery Model
Bu modelde Sql Serverda yapılan tüm işlemler transaction log dosyasına kaydedilir ve bizim tarafımızdan silinme işlemi gerçekleşmedikçe silinmezler. Her işlem transaction loglara yazıldığı için en güvenilir recovery modeldir. Ancak ilerleyen zamanlarda transaction loglar büyüyeceği için belirli periyodlarda silinmelidir. İki farklı yöntemle silebiliriz. Birinci yöntem backup almak ikinci yöntem ise transaction logların shrink edilmesidir.

SIMPLE Recovery Model
Simple Recovery modeldeki veritabanlarında tutulan transaction loglar Checkpoint işleminden sonra silinirler. Bu nedenle Simple Recovery modelde transaction logların sürekli büyümesi söz konusu değildir. Simple Recovery modelde log yönetimi kolay olmasına rağmen Simple Recovery modelin dezavantajı ise geriye dönük transaction loglar silindiği için transaction logların yedeklenmesi ve dolayısıyla restore işlemleri mümkün değildir. Bu nedenle veri kaybı olaslığı çok büyüktür.

Bulk Logged Recovery Model
Bulk Logged Recovery Modelde Full Recovery modelden farklı olarak bulk işlmeler dışında tüm işlemler loglanırken herhangibir bulk işlem yapıldığında tüm işlem için tek bir kayıt log dosyasına yazılır. Bu gibi durumlarda veritabanımızı herhangibir zamana restore etmek mümkün olmaz.  Bulk Logged Recovery Modelde bulk işlemler tek tek transaction log dosyasına yazılmadığı için Full Recovery modele göre bulk işlemler daha hızlı yapılır.

 Veritabanının Recovery Modelinin Değiştirilmesi
Veritabanımızın recovery modelini değiştirmek için Management Studio kullanabileceğimiz gibi TSQL komutları ilede değiştirebiliriz.


ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE
ALTER DATABASE AdventureWorks SET RECOVERY FULL
ALTER DATABASE AdventureWorks SET RECOVERY BULK_LOGGED

21 Temmuz 2014 Pazartesi

HAVING (Transact-SQL) Kullanımı

Bir sorguda gruplandırma yapıyorsak ve bu sorguda grup için koşul kullanmak istiyorsak where kullanamayız. Bunun için HAVING sözcüğünü kullanmamız gerekir. Ancak WHERE sözcüğünü gruplama fonsiyonundan önce kullanabiliriz. WHERE bir tablonun tek satırları üzerinde işlem yapan koşullar içinde geçerlidir. HAVING gruplanmış verilerin işlemleri için geçerlidir.
  • SELECT komutunda GROUP BY yoksa HAVING kullanmanın bir anlamı yoktur. 
  • HAVING sözcüğünden sonra mutlaka COUNT ,SUM,MIN,MAX kullanılmalıdır. 
  • WHERE sözcüğü ile birlikte kullanılabilir.

18 Temmuz 2014 Cuma

SQL Server Error Logları


Sql Serverımızda sistemin nasıl çalıştığını kontrol ettiğimiz olası hatalarda baktığımız yer Sql Server Error Loglarıdır.



Sql Server Error logları için Management Studio kullanılarak Object Explorer  altında bulunan Management'in altında Sql Server Logs içinde bulunan log dosyalarına tıklanarak  görüntülenilebilir.

Log dosyalarına ayrıca Program Files-Microsoft SQL Server-MSSQL.N-MSSQL-Logun altında bulunan ERRORLOG dosyaları text editor kullanılarakda ulaşılabilir.


SQL Server Database Engine loglarında bir adet Current ve 6 adet Archive olmak üzere 7 adet log dosyası bulunmaktadır.

Sql Server her restart olduğun sıralama bir kayarak devam eder. Yani Current olan ERRORLOG1 ERRORLOG1 olan ERRORLOG2 gibi sıralama 1 artarak yer değiştirir. ERRORLOG6 olan ise sistemden silinir.

Ancak SQL Server Servisi uzun süredir çalışıyorsa ve çok fazla hata varsa SQL Server log dosyası çok fazla şişer. Bu durumda recycle işlemini elimizle tetiklemimiz servisi yeniden başlatmanın yerine tercih edilir.

Aşağıdaki Storage Procedur kullanılarak bu işlem kolaylıkla yapılabilir.
EXEC master.sys.sp_cycle_errorlog;

Eski kayıtlardaki hatalara bakmak için Sql Server log dosyasının silinmesini istemeyebiliriz. Bunun için  SQL Server Logs  üzerinde sağ tuşla tıklayıp Configure seçerek 6 ile 99 arasında bir kayıt verebiliriz. Bu sayede log dosyamızın sayısı artmış olur.


SQL Server Agent Error Log’ları

SQL Server Agent Error Log’ları da Database Engine Error Log’ların da olduğu gibi servis restart olduğunda recycle olur. Tabi burada bahsettiğimiz servis database engine servisi değil SQL Server Agent servisidir.

Bir diğer farklılık ise Database Engine log’ları default olarak 1+6 log file’dan oluşmakta ve bu rakamda değişiklik yapılabilmekteyken SQL Agent Error Log’ları 1+9 log file’dan oluşmakta ve bu rakamlarda değişiklik yapılamamaktadır. Aktif olan SQL Agent Error Log’un dosya adı SQLAGENT.OUT, arşiv olan log file’ların adları ise SQLAGENT.x şeklindedir.

SQL Server Agent Error Log Recycle’ı Elle Tetiklemek (master.sys.sp_cycle_agent_errorlog)

17 Temmuz 2014 Perşembe

Sql Server 2012 Maintenance Plans

Sql Server Databaselerimizin stabil çalışması için periyodik olarak bakım çalışması yapılması ve yedekleme işleminin yapılması gerekir.
Bu işlemler databaselerin periyodik olarak yedeklenmesi, indexlerin rebuild ve reorganize edilmesi, shrink işlemleri ve istatistiklerin update edilmesi işlemler olabileceği gibi kendi hazırladığımız bir jobun belirli periyodlar içerisinde çalışmasını sağlayabiliriz.

Tabi bu işlemleri manuel yapmak mümkün. Her gece saat 02.00'da yedek almak için saat kurulup kalkıp yedekleme işlemi gibi. Ama bu işleri yapmak için joblar devreye giriyor. SQL Server Maintenance Plan ise bize bu işlemleri belli bir plan içinde yapma şansı tanıyor. Aynı zamanda yapılan tanımlamayı tek bir yerden kontrol edebilme, aynı şekilde işlem sonucunuda tek bir yerden raporlama hakkı veriyor.

Maintanence plan’ın çalışması için 2 adet servis’in çalışır durumda olması gerekmektedir.
Bunlar;
• SQL Server
• SQL Sunucu Agent

Maintenance Planslara Management Studio kullanarak  Maintenance Plans kullanarak ulaşabiliriz.  Kendimiz New Maintenance Plans diyerek plan tanımlayabileceğimiz gibi Maintenance Plan Wizard kullanarak Maintenance Plan tanımlayabilmekteyiz.
Tanımladığımız maintenance planlar  için schedule tanımlayabilir ve bu şekilde bu işlemleri periyodik olarak gerçekleşmesini sağlayabilirsiniz.

Kısaca hangi işlemleri yapabildiğimize değinecek olursak(İleriki yazılarda ayrıntılı olarak değinilecektir.)


Backup Database Task
Bakım planlarına yedekleme görevi eklemek için kullanılır. Veritabanı herhangi bir donanım hatası veya kullanıcı hatası nedeniyle zarar görmüş olabilir ve geri dönülmesi için veritabanının bir kopyası gerekebilir. Bu görev full, differential, files ve filegroups vetransaction log backups yedekleme işlemi için olanak sağlar.

Update Statistics Task
İstatistik verilerini update etmek için kullanılır.


Execute SQL Server Agent Job Task
Maintenance Plans içinden SQL Server Agent Joblarını kullanmak için bu tools kullanılır.
 
Execute T-SQL Statement Task
Maintenance plan için T-SQL scriptleri çağırmak için kullanılır.


History Cleanup Task
Geçmişe yönelik Bakup ve Restore , Sql Server Agent ve Maintenance Planlara ait logları silmek için kullanılır. Bu datalar MSDB databaseinde tutulur. Bu databasein büyümesi engellenmiş olur.

Maintenance Cleanup Task
Bakım planları ile ilgili eski dosyaları  ve  maintenance plans ve veritabanı yedekleme dosyaları tarafından oluşturulan logları temizlemek için bu task kullanılır.
 
Notify Operator Task
Bu task otomatik uyarılar için kullanılır. Kullanmak için Database Mail özelliği aktif olmalı, mail host olarak MSDB database düzgün yapılandırılmış olmalı ve Sql Server Agent Servisinin geçerli bir mail adresi olmaldır.

 
Rebuild Index Task
Tablolar üzerinde bulunan indexlerin yeniden oluşturulması için bu task kullanılır. Database ve object seçimini istediğimiz gibi yapabiliriz.
Bu ekranda ayrıca “Keep Index online while reindexing” seçeneği bizim için çok önemli. Bu seçenek vasıtasıyla reindex işlemi yapılırken dahi index e erişimi kesmemiş oluyoruz.Full scan yapılırken, aynı zamanda istatistiklerde güncellenir.

Reorganize Index Task
Indexleri yeniden organize etmek  için kullanılır. İstatistikleri güncellemediği için Update Istatistik Task ile birlikte kullanılır. Bu task Sql Server 2014'de  ALTER INDEX REORGANIZE scriptini kullanmaktadır.

Shrink Database Task
Seçilen database boyutunu azaltmak için bir task oluşturmak için kullanılır.DBCC SHRINKDATABASE deyimini çalıştırmak için kullanılır.


Check Database Integrity Task
DBCC CHECKDB Transact-SQL deyimini çalıştırarak veritabanında kullanıcı ve sistem tabloları ve indeksler yapısal bütünlüğünü kontrol etmek için bu Task kullanılır.



Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...