Giriş
SQL Server 2012 sürümlerinden itibaren, SQL Server örneği yeniden başlatıldığında, tablonun otomatik büyütme sütununun değeri sıçrar ve özel sıçrama değeri büyüme sütununun veri türüne göre belirlenir. Veri tipi int ise, sıçrama değeri 1000'dir, veri türü bigint ise sıçrama değeri 10000'dir. Projemizden bu tür zıplama sorunu kabul edilemez, özellikle müşteri tarafında gösterildiğinde. Bu garip sorun sadece SQL Server 2012 ve sonrasında var ve SQL Server 2012'den önceki sürümlerde yoktur.
arka plan
Birkaç gün önce, QA ekibimizden bir meslektaşımız şöyle dedi: Tablomuzdaki kendi kendine artan sütununun değeri açıklanamaz şekilde 10.000 arttı. Başka bir deyişle, tablomuzdaki kendi kendine artan sütunun son değeri 2200 idi, ancak şimdi yeni bir kayıt eklediğimizde, kendi kendine artan sütunun değeri 12200 oldu. İş mantığımızda, böyle durumlar müşteriye izin verilmez, bu yüzden bu sorunu çözmemiz gerekiyor.
Kod kullanımı
İlk başta hepimiz çok gariptik, bu nasıl oldu? Genellikle kendi kendine artan sütunlara elle herhangi bir değer eklemeyiz (kendi kendini şişen sütunlara elle değer eklemek sorun değil) ve kendiliğinden şişen sütunların değerleri veritabanı tarafından korunur. Çekirdek ekibimizden bir üye bu soruyu araştırmaya başladı ve cevabı buldu. Şimdi, bu sorunu ve meslektaşımın bulduğu çözümü ayrıntılı olarak açıklamak istiyorum.
Bu hatayı nasıl yeniden üretebilirim
SQL Server 2012'yi kurmanız ve ardından bir test veritabanı oluşturmanız gerekecek. Sonra kendi kendine büyüyen sütunlarla bir tablo oluşturun:
Şimdi iki veri parçası ekleyin:
Sonuçları gözden geçirin:
Bu noktada sonuç beklediğimiz gibi oldu. Şimdi SQL Server Servisinizi yeniden başlatın. SQL Service'i yeniden başlatmanın birkaç yolu vardır ve burada SQL Server Manager ile yeniden başlatıyoruz:
Yeniden başlattıktan sonra, az önce tabloya 2 veri parçası daha ekliyoruz:
Sonuçları gözden geçirin:
Şimdi SQL Server 2012'yi yeniden başlattıktan sonra sonuçları görüyorsunuz ve kendi kendine artan sütun değerleri 1002'den başlıyor. Yani, 1000 atladı. Daha önce belirtildiği gibi, eklediğimiz veri türü bigint ise, sıçrama değeri 10.000 olur.
Gerçekten bir HATA mı?
Microsoft, bunun bir özellik olduğunu, hata olmadığını ve birçok durumda faydalı olduğunu belirtiyor. Ama bizim durumumuzda böyle bir fonksiyona ihtiyacımız yok, çünkü bu kendi kendine artan veri müşterilere gösterilmek üzere ve müşteriler böyle sıçrayan veri görürse garip hissedecekler. Ve sıçrama değeri, SQL Server'ı kaç kez yeniden başlattığınıza göre belirlenir. Bu veriler müşterilere gösterilmezse, kabul edilebilir olabilir. Bu nedenle, bu özellik genellikle sadece iç kullanım için uygundur.
çözüm
Microsoft'un sunduğu bu "özellik" bizi ilgilendirmiyorsa, kapatmanın iki yolu var.
1. Dizileri Kullanmak
2. SQL Server için -t272 başlangıç parametresini kaydet
Dizileri kullanın
Öncelikle, tablonun kendi kendine artan sütunlarını kaldırmamız gerekiyor. Sonra, önbellekleme olmadan bir dizis oluşturulur, bu sıradan sayısal değerler eklenir. İşte örnek kod:
Başlatma parametresi -t272'yi kaydedin
SQL Server Yapılandırma Yöneticisini aç. SQL Server 2012 örneğini seçin, sağ tıklayın ve Özellikler menüsünü seçin. Açılır pencerede başlatma parametrelerini bulun ve -t272 kaydını yapın. Tamamlandıktan sonra, aşağıdaki şekilde yer alan SQL Server (SQLSERVER2012)'yi yeniden başlatın ve sorunun çözülüp çözülmediğini doğrulamak için hata çoğaltma işlemini gerçekleştirin.
Ek Notlar:
Veritabanınızda çok sayıda kendini şişiren tablo varsa ve hepsinde sayısal sıçrama sorunları varsa, ikinci seçeneği kullanmak daha iyidir. Çünkü çok basit ve kapsamı sunucu seviyesinde. İkinci çözümün benimsenmesi, bu hizmet örneğindeki tüm veritabanlarını etkiler.
|