Compatibility Level Nedir Ve Nasıl Değiştirilir
Compatibility Level, bazı veritabanı davranışlarını SQL Server’ın belirtilen sürümü ile uyumlu çalışacak şekilde ayarlar. Örneğin SQL Server 2008 ve öncesindeki compatibility level’lerde PIVOT komutu Recursive CTE içinde destekleniyordu. Ama SQL Server 2008 ve üstü compatibility level’lerde Recursive CTE içinde desteklenmiyor.
Bir uygulama düşünün SQL Server 2008 veritabanı kullanıyor ve veritabanı içersindeki bir fonksiyonda recursive cte kullanmış. Veritabanı yöneticisi olarak veritabanını SQL Server 2008 ‘den SQL Server 2012’ye upgrade etmek istiyorsunuz. Upgrade tamamlandıktan sonra upgrade ettiğiniz yeni sürüm eski sürümün compatibility level’ini destekliyorsa compatibility level eski halde kalır. Eğer eski halde kalmasaydı PIVOT komutu RECURSIVE CTE içinde desteklenmediği için uygulama patlardı.
Not: Eğer yeni sürüm eski sürümün compatibility level’i ni desteklemiyorsa compatibility level yeni sürümün desteklediği en düşük compatibility level’e otomatik olarak set edilir. Bu yüzden veritabanını bir anda sql server’ın eski sürümlerinden en yeni sürümlerine upgrade yapmak sıkıntı yaratabilir. Compatibility Level upgrade edilmese bile geçiş döneminden sonra uygulamayı yeni sürümün compatibility level’i ile uyumlu çalışacak yapıya getirip compatibility level’i de yükseltmenizi tavsiye ederim. Compatibility Level’in nasıl değiştirileceğini makalenin devamında anlatacağım.
Hangi SQL Server versiyonunun hangi compatibility level ile çalıştığını ve hangi compatibility level’leri desteklediğini aşağıda görebilirsiniz.
SQL Server Versiyonu |
Compatibility Level |
Desteklediği Compatibility Level’ler |
SQL Server 2000 |
80 |
80 |
SQL Server 2005 |
90 |
90,80 |
SQL Server 2008 ve SQL Server 2008 R2 |
100 |
100,90,80 |
SQL Server 2012 |
110 |
110,100,90 |
SQL Server 2014 |
120 |
120,110,100 |
SQL Server 2016 |
130 |
130,120,110,100 |
Aşağıdaki sorgu yardımıyla instance üzerindeki veritabanlarının hangi compatibility level ile çalıştığını görebilirsiniz.
select name,compatibility_level from sys.databases
Veritabanına sağ tıklayarak properties diyerek options sekmesinden aşağıdaki gibi compatibility level’i değiştirebilirsiniz.