Bu makalede Sql Server Compatibility Level’in ne olduğunu nasıl değiştirildiğini ele almış olacağız. Compatibility kavramı sql server üzerinde bulunan veritabanının sql server sürümü ile uyumluluk seviyesini göstermektedir. Veritabanı düzeyi ayarlarından biri olan veritabanı uyumluluk düzeyi, veritabanının nasıl çalıştığını etkiler. Kısacası database’in sql server’ın en son compatibility levelinde olması mevcut olan sql server’ın tüm özelliklerini kullanabileceği anlamına gelmektedir. Örnek verecek olursak elimde bulunan database’in compatibility level’i 110’sa ve ben bu database’i Sql Server 2019’a restore edersem compatibility değeri 110 kalacağı için sql server 2019’un tüm özelliklerini kullanamaz.
Özet olarak veritabanı uyumluluk düzeyi esas olarak o sürümde sunulan yeni özelliklerin kullanılıp kullanılamayacağını veya desteklenmeyen özelliklerin devre dışı bırakılıp bırakılmayacağını kontrol eden bir mekanizma olarak karşımıza çıkmaktadır.
Eğer sql server’ınızı 2017 den 2019’a upgrade yapacaksanız Tempdb, model, msdb gibi kaynak veritabanlarının uyumluluk düzeyleri, yükseltme sonrasında geçerli uyumluluk düzeyine ayarlanır. Master veritabanı, yükseltmeden önceki uyumluluk düzeyini korur. Aşağıdaki resimde de dikkat etmişseniz tempdb,model ve msdb sql server 2019 uyumluluk seviyelerine göre ayarlanmış durumda ama master veritabanı 2017 de kalmış durumda çünkü sql server’ımızı 2017 den 2019 a upgrade yapmıştık.
Aşağıdaki komut ile hangi veritabanında hangi compatibility değerin set edildiğini görebiliriz.
SELECT name, compatibility_level FROM sys.databases;

İkinci komut olarak compatibility level’i ilgili stored procedure’ü kullanarak bulabiliriz.
EXEC sp_helpdb
Aşağıdaki komut ile sunucumuza yüklü olan Sql Server Sürümünü görebiliriz. Gelen sonuç ile Sql Server’ımızın hangi compatibility değeri desteklediğini aşağıda bulunan level tablosundan görebiliriz.
SELECT SERVERPROPERTY('ProductVersion');

Benim Sql Server version’um 15 olduğunu için aşağıdaki compatibility level tablosunda hangi değerleri desteklediğini görebiliriz. Zaten sql serverı’mızın altındaki database’e sağ tıklayıp Properties kısmına girip Options bölümünde compatibility değerlerinin Microsoft sayfasında almış olduğum tablo ile aynı olduğunu görmekteyiz.

Hangi sql server sürümünün hangi Compatibility değerini desteklediğini aşağıdaki tablodan görebiliriz.
Sql Server Sürümü | Veritabanı Sürümü | Varsayılan Uyumluluk Seviyesi | Desteklenen Uyumluluk Seviyesi |
SQL Server 2022 (16.x) | 16 | 160 | 160, 150, 140, 130, 120, 110, 100 |
SQL Server 2019 (15.x) | 15 | 150 | 150, 140, 130, 120, 110, 100 |
SQL Server 2017 (14.x) | 14 | 140 | 140, 130, 120, 110, 100 |
SQL Server 2016 (13.x) | 13 | 130 | 130, 120, 110, 100 |
SQL Server 2014 (12.x) | 12 | 120 | 120, 110, 100 |
SQL Server 2012 (11.x) | 11 | 110 | 110, 100, 90 |
SQL Server 2008 R2 (10.50.x) | 10.5 | 100 | 100, 90, 80 |
SQL Server 2008 (10.0.x) | 10 | 100 | 100, 90, 80 |
SQL Server 2005 (9.x) | 9 | 90 | 90, 80 |
SQL Server 2000 (8.x) | 8 | 80 | 80 |
Bir örnek yapıp konuyu sonlandırmak istiyorum. Sql server 2022 üzerinde compatibility level’i 160 olan bir database oluşturuyorum.



Daha sonra oluşturmuş olduğum bu database’in Full backup’ını alıp Sql Server 2019 kurulu olan sunucuma kopyalayıp database restore işlemi yapıyorum.



Sql server 2019 olan sunucuma restore işlemi yaparken hata mesajıyla karşılaşıyoruz. Sebebi ise Sql Server 2022’deki 160 olan uyumluluk seviyesinin Sql Server 2019 da desteklenmemesi çünkü makalenin başında 2019’un maksimum uyumluluk seviyesi 150 di.

Gerçek hata mesajımız. Tabi bu gibi sorunlar karşılaşırsanız Export data-tier application ile bu sorunu çözebilirsiniz. Export data-tier application makalesine ulaşmak için tıklayınız.

Makalenin başında Microsoft’un sayfasından almış olduğum uyumluluk seviyesiyle karşılaştırdığımızda desteklenmediğini görmekteyiz. Bu işlem en alt sürümden en yüksek sürüme geçerken de karşılaşıla bilecek bir sorun olarak karşımıza çıkmaktadır.
İkinci bir örnekte ise SQL Server 2008 R2 sql server sürümündeki bir bak uzantısını sql server 2019’a restore ettiğimizde herhangi bir sorunla karşılaşmayız. Çünkü sql server 2019’un uyumluluk seviyesinin en alt uyumluluğu 100, SQL Server 2008 R2 ortamında oluşturulmuş veritabanının uyumluluk seviyesi 100 olduğu için Sql server 2019’a rahatlıkla restore edilebilir. Ama böyle hemen compatibility level geçişi yapılmaz kontrollü bir şekilde yapılması gerekmektedir.



Compatibility level değerimi 100 den 150 yapmak istersem bu özelliği desteklemez veritabanı. Sıralı bir şekilde level yükseltme işleminin yapılması gerekmektedir.
Aşağıdaki komut ile Compatibility level 140 dışındaki Compatibility level seviyelerini getirmektedir.
select name,compatibility_level from sys.databases where compatibility_level <> 140
order by compatibility_level asc
Son olarak şuna da değinmek gerekirse bazen bir veritabanının uyumluluk seviyesini değiştirmek iyi bir performansın yanında daha kötü sonuçlara da sebebiyet verebilir. Çünkü sorgularımız yeni uyumluluk seviyesine uyumlu olmayabilir veya kod yazı şekli değişmiş olabilir. Bunun için kontrollü bir şekilde değiştirilmesi en uygunudur. Uyumluluk seviyesinde bir sorununuz yoksa değiştirmemek en güzeli olabilir. Buda sizin tercihiniz. Bir sonraki makalede uyumluluk seviyesi nasıl kontrollü bir şekilde değiştirilir konusunu ele almış olacağım.
Bir sonraki makalede görüşmek dileğiyle.
Yaratan Rabbinin adıyla oku! O, insanı “alak” dan yarattı. Oku! Senin Rabbin en cömert olandır. O, kalemle yazmayı öğretendir, insana bilmediğini öğretendir. Hayır, insan kendini yeterli gördüğü için mutlaka azgınlık eder. Şüphesiz dönüş ancak Rabbinedir. Alak 1-7