SQL Server 2022 ve Üzeri: Kurmadan Önce Mutlaka Okuyun

Yazar: Özgür GÜLER 101 görüntülenme

Ticari Yazılımlarda SQL Server 2022 ve Üzeri

* Kurmadan Önce Mutlaka Okuyun

Kapsam: Logo, Mikro ve benzeri yerel ticari ERP/ön muhasebe yazılımları


Neden Bu Makale Var?

Bu makale, sürekli tekrarlayan ve aynı hatalara yol açan SQL Server sürüm uyumluluk sorunlarına kalıcı bir çözüm getirmek amacıyla hazırlanmıştır.

Sahada karşılaştığımız tablo nettir: SQL Server 2022 veya 2025 kurulumu yapılan yerlerde, kısa süre içinde ticari yazılımlarda hatalar alınmaya başlanmakta, veri bütünlüğü sorunları yaşanmakta ve çözüm için tekrar bize dönülmektedir.

Önemli: Bu makale “SQL Server 2022/2025 kurmayın” demiyor. “Kurmadan önce aşağıdaki koşulları sağlayın; sağlayamıyorsanız kurmayın” diyor.

Karar sizindir, ancak sorumluluk da sizdedir.


Riskli 5 Kritik Nokta

1. Collation — 1254 (Türkçe) Kod Sayfası Şarttır

Yerel ticari yazılımların veritabanı yapısı, 1254 (Türkçe) kod sayfasını kullanır ve ç, ğ, ı, İ, ö, ş, ü gibi Türkçe karakterlerin doğru sıralanmasını ve karşılaştırılmasını sağlar.

SQL Server kurulumunda varsayılan olarak gelen Latin1_General_CI_AS ise 1252 kod sayfasını kullanır.

Bu harmanlama ile varchar alanlarda Türkçe karakterler bozulur; raporlarda ve sorgularda hatalı sonuçlar alırsınız.

Doğru seçim: Kurulumda Turkish_CI_AS veya Turkish_100_CI_AS (gerekirse _SC sonekli) seçilmelidir.

Kontrol komutu:

— Sunucu harmanlaması
SELECT SERVERPROPERTY(‘Collation’) AS SunucuHarmanlamasi;
-- Logo veritabanları
SELECT name, collation_name, compatibility_level
FROM sys.databases
WHERE name LIKE '%Logo%'
ORDER BY name;

-- Mikro veritabanları
SELECT name, collation_name, compatibility_level
FROM sys.databases
WHERE name LIKE '%Mikro%'
ORDER BY name;

2. UTF-8 Beta Ayarı — SQL Server Kurulumunda Kapalı Olmalıdır

Windows’ta “Beta: Dünya çapında Unicode UTF-8 desteği için kullan” seçeneği, legacy kod sayfası (1254) bekleyen ticari yazılımlarda encoding çakışmasına yol açar.

Sistem UTF-8’e zorlandığında, uygulama ile sunucu arasında kodlama uyumsuzluğu oluşur ve karakter bozulmaları, bağlantı hataları görülür.

Bu ayar kapalı tutulmalıdır. Ayrıca SQL Server kurulumunda UTF-8 collation (örneğin Turkish_100_CI_AS_SC_UTF8) seçilmemelidir.

UTF-8 collation desteği SQL Server 2019 (15.x) ve sonraki sürümlerde gelmiştir; ancak yerel ticari yazılımlar bu yapıyı henüz kullanmamaktadır.

Kontrol: Windows Bölge Ayarları → Yönetimsel → Sistem yerel ayarını değiştir → Beta UTF-8 seçeneği işaretsiz olmalıdır.

3. Compatibility Level — Yazılımın Beyan Ettiği Seviyede Tutulmalıdır

SQL Server 2022, compatibility level 160 ile gelir ve 160, 150, 140, 130, 120, 110, 100 seviyelerini destekler.

Ancak ticari yazılım üreticisi resmi olarak onaylamadığı sürece veritabanı uyumluluk seviyesi bu değerde bırakılmamalıdır.

Uyumluluk seviyesi yükseltildiğinde cardinality estimator değişiklikleri, query plan değişiklikleri ve yeni sorgu işleme davranışları devreye girer.

Bu değişiklikler mevcut raporlarda ve prosedürlerde performans düşüşüne veya hatalı sonuçlara yol açabilir.

Öneri: Veritabanının compatibility level’ı 130 (SQL Server 2016) veya 140 (SQL Server 2017/2019) seviyesinde bırakılmalıdır.

Yazılım üreticisinin destek ekibi aksini onaylamadıkça 150 veya 160’a yükseltilmemelidir.

4. UTF-8 Beta Ayarı Sadece SQL’i Değil, Tüm Sistemi Etkiler

Windows’taki “Beta: Dünya çapında Unicode UTF-8 desteği için kullan” ayarı, yalnızca SQL Server’ı değil, işletim sisteminin temel bileşenlerini de etkiler.

Bu ayar, sistemin varsayılan ANSI Kod Sayfası’nı (ACP) 65001 (UTF-8) olarak değiştirir.

Bu değişiklik, eski API’leri kullanan birçok uygulama ve servis için beklenmedik davranışlara yol açar.

Sahada karşılaştığımız sorunlar:

Etki Alanı Görülen Sorun
Windows API “A” (ANSI) API’leri, bekledikleri kod sayfasını bulamaz; karakter bozulmaları, çökmeler
Lisans Servisleri SQL Server, Logo, Mikro lisans servisleri başlamaz; “servis başlatılamadı” hataları
Dosya Sistemi Dosya yolları ve içerikleri yanlış okunur; Türkçe karakterli dosya adları erişilemez hale gelir
Kurulum/Güncelleme Betikleri SQL Server msdb110_upgrade.sql gibi betikler başarısız olur; servis hiç başlamaz
Üçüncü Parti Yazılımlar muhasebe yazılımları çöker; karakter kodlama hataları raporlar
Sistem Kararlılığı Bazı durumlarda mavi ekran ve sistem açılmama sorunları

Neden bu kadar geniş etkili?

Modern uygulamalar Unicode (UTF-16) kullanırken, eski uygulamalar ve bazı sistem servisleri hâlâ 1254 (Türkçe) kod sayfasına bağımlıdır.

UTF-8 beta ayarı etkinleştirildiğinde, sistem genelinde bir uyumsuzluk zinciri başlar. Bu zincir, tek bir uygulamayı değil, tüm ekosistemi etkiler.

Kritik Uyarı: Bu ayar, SQL Server kurulumundan bağımsız olarak dahi sistemde sorun çıkarabilir.

Yani SQL Server hiç kurulmamış bir makinede bile bu ayar açıksa, lisans servisleri, dosya okuma işlemleri ve Windows API çağrıları bozulabilir.

Kontrol ve Düzeltme:

  1. Win + R → intl.cpl → Enter

  2. “Yönetimsel” sekmesi → “Sistem yerel ayarını değiştir”

  3. “Beta: Dünya çapında Unicode UTF-8 desteği için kullan” seçeneği işaretsiz olmalıdır.

  4. İşaretliyse kaldırın → Tamam → Sistemi yeniden başlatın.

Önemli: Bu ayar kapatıldıktan sonra dahi, daha önce oluşmuş veri bozulmaları (örneğin yanlış kaydedilmiş karakterler) kalıcı olabilir.

Bu nedenle ayarın kurulumdan önce kapalı olduğundan emin olunmalıdır.

5. BOM (Byte Order Mark) Sorunu ve Temiz Kurulum Gerekliliği

UTF-8 beta ayarı açıkken, bazı uygulamalar config/ini/xml dosyalarını BOM’lu UTF-8 olarak kaydeder.

Eski servisler bu BOM’u tanımaz ve servis başlamaz. Bu durumda yapılması gerekenler:

  1. Uygulamayı kaldırın.

  2. Data (veri) hariç tüm dosyaları silin. (Config, log, cache, temp klasörleri)

  3. Windows UTF-8 beta ayarını kapatın (intl.cpl → Yönetimsel → Sistem yerel ayarı).

  4. Sistemi yeniden başlatın.

  5. Temiz kurulum yapın.

Bu sıralama, BOM’lu dosyaların temizlenmesini ve yeni dosyaların doğru kod sayfasıyla (1254) oluşmasını sağlar.

  • Data klasörünü silmeyin; veri kaybı yaşarsınız.

Not: Her servis başlamama sorunu BOM kaynaklı değildir. Önce Olay Günlüğü’nü (Event Viewer) kontrol edin; hata mesajı “config”, “encoding” veya “invalid character” içeriyorsa BOM sorunu muhtemeldir.


Gizli Tuzak: STRING_AGG ve Dokümantasyon Çelişkisi

STRING_AGG fonksiyonu, SQL Server 2016’da değil, SQL Server 2017 (14.x) ve sonraki sürümlerde kullanıma sunulmuştur.

Microsoft’un resmi dokümantasyonu, bu fonksiyonun “SQL Server 2017 (14.x) ve sonraki sürümler” için geçerli olduğunu açıkça belirtmektedir.

Yerel ticari yazılımların bazı modülleri STRING_AGG fonksiyonunu yoğun şekilde kullanmaktadır. Bu durumda:

  • SQL Server 2016 SP1 kurulu bir sistemde ilgili modüller “STRING_AGG is not a recognized built-in function name” hatası verecektir.

  • Kullanıcı, dokümana güvenerek 2016 SP1 kurar; ancak program çalışmaz.

  • Fiili minimum gereksinim SQL Server 2017’dir; dokümanlar ise 2016 SP1 demektedir.

Sonuç: Yazılım üreticilerinin dokümantasyonu bu konuda güncellenmemiştir ve fiili gereksinim SQL Server 2017 ve üzeridir.


Karar Ağacı: Hangi Durumda Ne Yapmalısınız?

Durumunuz Yapmanız Gereken
Yeni SQL Server kurulumu yapıyorsanız Turkish_CI_AS + UTF-8 beta kapalı + compatibility level 130/140
Mevcut SQL Server 2016 SP1 kullanıyorsanız STRING_AGG hatası alıyorsanız 2017+’a yükseltme planı yapın
SQL Server 2022/2025 kurmak istiyorsanız Yukarıdaki 5 kritik noktayı sağlayabiliyorsanız kurun; sağlayamıyorsanız kurmaktan kaçının
Mevcut 2022 kurulumunuz varsa Collation, UTF-8 beta ve compatibility level’ı hemen kontrol edin; gerekirse düzeltin
Servis başlamıyor / uygulama açılmıyorsa Olay Günlüğü’nü kontrol edin; BOM/encoding hatası varsa Bölüm 5’i uygulayın

Kontrol Listesi: Kurulum Sonrası Doğrulama

Aşağıdaki sorguları çalıştırarak kurulumunuzun doğru yapılandırıldığını doğrulayın:

— 1. Sunucu harmanlaması
SELECT SERVERPROPERTY(‘Collation’) AS SunucuHarmanlamasi;
-- Beklenen: Turkish_CI_AS veya Turkish_100_CI_AS

-- 2. Veritabanı harmanlaması ve uyumluluk seviyesi
SELECT 
    name AS VeritabaniAdi,
    collation_name AS Harmanlama,
    compatibility_level AS UyumlulukSeviyesi,
    SUSER_SNAME(owner_sid) AS Sahibi
FROM sys.databases
WHERE name LIKE '%Mikro%'
   OR name LIKE '%Logo%'
ORDER BY name;
-- Beklenen: Turkish_CI_AS / 130 veya 140

-- 3. tempdb harmanlaması (sunucu harmanlamasıyla uyumlu olmalı)
SELECT name, collation_name 
FROM sys.databases 
WHERE name = 'tempdb';

-- 4. STRING_AGG fonksiyonu testi (2017+ gerektirir)
SELECT STRING_AGG(name, ', ') AS TestSonucu
FROM sys.databases;
-- Hata verirse: SQL Server sürümü 2017'den düşüktür

5. Windows UTF-8 beta kontrolü (manuel):
Windows Ayarlar → Saat ve Dil → Bölge → Yönetimsel Dil Ayarları → “Beta: Unicode UTF-8 desteği” işaretsiz olmalıdır.

6. Notepad++ ile dosya kontrolü (isteğe bağlı):
Şüpheli config/log dosyasını Notepad++ ile açın. Sağ alt köşedeki kodlamayı okuyun.

ANSI görünüyorsa → Kodlama → Karakter Kümeleri → Türkçe → Windows-1254 seçerek Türkçe karakterlerin doğru görünüp görünmediğini test edin.


Sorumluluk Notu

Bu makalede belirtilen yapılandırma koşullarını sağlamadan SQL Server 2022 veya 2025 kurulumu yapanlar, doğacak veri bütünlüğü sorunlarından, uygulama hatalarından ve performans düşüşlerinden bizzat sorumludur.


Özet

Konu Doğru Uygulama
SQL Server sürümü 2017+ (STRING_AGG nedeniyle); 2016 SP1 dokümanlarda geçse de fiilen yetersizdir
Collation Turkish_CI_AS / Turkish_100_CI_AS
UTF-8 beta (Windows) Kapalı; tüm sistemi etkiler, sadece SQL’i değil
UTF-8 beta (SQL) UTF-8 collation seçilmemeli
Compatibility level 130 (SQL 2016) veya 140 (SQL 2017/2019); üretici onayı olmadan yükseltilmemeli
BOM sorunu Config/ini/xml dosyaları BOM’lu ise servis başlamaz; temiz kurulum gerekir
Kullanıcı adları Türkçe karakter içermemeli; ASCII tercih edilmeli
2022/2025 kurulumu Koşullar sağlanıyorsa kurulabilir; sağlanamıyorsa kurulmamalı

Bu makale, yerel ticari yazılım (Logo, Mikro ve benzeri) için kalıcı bir referans kaynağı olarak hazırlanmıştır. SQL Server 2025 ile ilgili güncellemeler yayınlandıkça revize edilecektir.

 

Yorum yapın

E-posta adresiniz yayımlanmayacak. Zorunlu alanlar * ile işaretlenmiştir.

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.