Otomatik artan identity kolonlarını hepimiz sıklıkla veritabanı tablolarında kullanmaktayız. Fakat herhangi bir silme veya rollback işlemi yapmadığım halde id nin 1000 arttığını gördüm. Nedenini biraz araştırdıktan sonra faydalı bir makaleye rastladım ve problemin benden kaynaklanmadığını anladım. Bu durum eğer veri tipi bigint ise 10000 artış göstermekte.
Durum Nasıl Gerçekleşiyor?
Tabloya bir kaç kayıt girip, sql'i restart ettikten sonra gerçekleşmekte.Bu Gerçekten Bir Bug'mı?
Microsoft'un açıklamasına göre bu bir bug'dan ziyade bir ÖZELLİK. Bunu yapmalarının bir çok sebebi var. 2012 öncesinde böyle bir durum yok. Zaten int veya bigint yeterince büyük. Identity kolonu unique yani tekil olmayı garanti eder. Sıralı artışı değil! Fakat bu yine de bazıları için kabul edilebilir bir durum değil!Ne Yapmalı ?
Eğer bu ÖZELLİKLE ilgilenmiyorsak...- Sequence kullanmalı. veya
- Başlangıç parametresi olarak Sql'e -t272 verilmeli
Tüm tablolarınızdan otomatik artan identity alanlarını kaldırın.
CREATE SEQUENCE Id_Sequence
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 0
NO MAXVALUE
NO CACHE
insert into MyTestTable values(NEXT VALUE FOR Id_Sequence, 'Mr.Tom');
insert into MyTestTable values(NEXT VALUE FOR Id_Sequence, 'Mr.Jackson');
SQLServer configuration manager açın, instance 'ı bulun ve sağ tıklayıp özelliklere girin. Startup Parameters (Başlangıç Parametreleri) sekmesine gelin ve buraya -t272 değerini yazın. Sql'i tekrar başlatın. Farkı göreceksiniz.
Eğer mevcut bir veritabanınız ve idleriniz var ise bunlardan vazgeçmek zor olacağı için Başlangıç parametresi verme yöntemi tercih edilebilir. Yeni bir db oluşturuyorsanız kendi sequence tablonuzu oluşturmanız tercih edilebilir. İnternette Identity kullanmanın avantaj ve dezavantajları hakkında detaylı makaleler bulabilirsiniz.
Kaynak : http://www.codeproject.com/Tips/668042/SQL-Server-Auto-Identity-Column-Value-Jump-Is
Hocam çok faydalı bir bilgi olmuş. Benim de uzun süredir aklımı kurcalayan bir soruydu. Çeviriniz için teşekkür ederim.
YanıtlaSil