none
id sıra atlaması RRS feed

  • Soru

  • Merhabalar

    normal primary key tanımladığım id (int + identity column) olan kolonu her nedense şöyle gidiyor

    38
    39
    42
    43
    1042
    2042
    2043
    3042

    sebebi nedir? (aradaki değerler herhangi bir şekilde işleme alınmadı (eklenip silinme vs)


    Special

    24 Ağustos 2017 Perşembe 15:10

Yanıtlar

  • Merhabalar

    normal primary key tanımladığım id (int + identity column) olan kolonu her nedense şöyle gidiyor

    38
    39
    42
    43
    1042
    2042
    2043
    3042

    sebebi nedir? (aradaki değerler herhangi bir şekilde işleme alınmadı (eklenip silinme vs)


    Special

    Aslında bu Sql Server 2012 ve sonrasında gelen bir özellik,

    Sql Serverı ShutDown ile kapatmazsan veri bütünlüğü için sıra numarası atlıyor. bilgisayarı kapatman senin sql servırı düzgün kapattığın anlamına gelmiyor aslında serverın fişini çekiyor gibi oluyorsun. Sen pcyi yeniden başlattığında cachte bulunan veri bütünlüğü için sıra numarası atlanıyor.

    Ayrınıtılı bilgi ve bu özelliği devre dışı bırakmak için şu makaleye göz atabilirsin Link

     AMA unutma senin için önemli olan numaranın sıralı değil benzersiz olmasıdır. Tekrar ediyorum amaç artan bir sıra değil benzersiz bir key.

    • Yanıt Olarak Öneren Ekrem Önsoy 4 Eylül 2017 Pazartesi 10:22
    • Yanıt Olarak İşaretleyen Ekrem Önsoy 29 Aralık 2017 Cuma 09:15
    26 Ağustos 2017 Cumartesi 00:48
  • Merhaba dark-shadow,

    SQL Server 2012'den itibaren eğer Database Engine servisi temiz olmayan bir şekilde kapatılırsa (örnek: SHUTDOWN WITH NOWAIT) o zaman böyle bir sonuç ile karşılaşabilirsin. Bunun nedeni SQL Server 2012 ile birlikte gelen Identity değer üretimindeki bir davranış değişikliği. SQL Server 2012 ile birlikte Identity üretiminin verimini arttırmak için bir Cache mekanizması devreye alındı. Bu mekanizmayı kapatmak için Startup Parameter olarak -T272'yi kullanabilirsin veya SQL Server 2017 ile birlikte gelen aşağıdaki komutu (ilgili veritabanı için) kullanabilirsin.

    ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF


    http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy

    • Yanıt Olarak İşaretleyen Ekrem Önsoy 29 Aralık 2017 Cuma 09:15
    29 Aralık 2017 Cuma 09:13

Tüm Yanıtlar

  • Başka Oluşturduğun Veritabanları Kullanıyor Olabilir.. Kullandığın Ya Da Senin Üzerinde Çalıştığın Başka Programlar Varsa Onlar Kullanıyordur Büyük İhtimal.. Çünkü Aynı Sorun Bende De Mevcuttu.. Kontrol Ettiğim Zaman Senin Bilgisayarına Yüklü Diğer Veritabanlarıyla Çakışmaması İçin Sql Kendi Ayarlıyor..
    24 Ağustos 2017 Perşembe 16:35
  • peki bu sunucu da da mı böyle olabilir?

    sunucularda olan tablolarımız da bu olayı görüyoruz,

    3 4 farklı sunucularda.


    Special

    24 Ağustos 2017 Perşembe 19:07
  • Yok Olmaz.. Çünkü Bu Lokalde Varolan Bir Problem.. Ama Nedenini Bilmiyorum.. Sadece Veritabanındaki ID ler Çakışmasın Diye Sql in Otomatik Yaptığı Birşey..
    24 Ağustos 2017 Perşembe 19:23
  • Merhabalar,

    Identity kullanıyorsanız ve SET IDENTITY INSERT ile ayrıca kayıt atarsanız olabilecek bir durum bu. Ancak SET IDENTITY INSERT kapalı olmasına rağmen oluyorsa bu sunucudaki identity değerinin çakışmaması için olabilecek nadir bir durum. Microsoft bunun açıklamasını oluşabilecek bir conflict olmaması için by design olarak açıklamış. Çok sık başınıza gelmiyorsa bir problem oluşturmayacaktır.


    Please Mark This As Answer if it solved your issue
    Please Vote This As Helpful if it helps to solve your issue
    www.abdullahaltintas.com

    25 Ağustos 2017 Cuma 12:02
  • Merhabalar

    normal primary key tanımladığım id (int + identity column) olan kolonu her nedense şöyle gidiyor

    38
    39
    42
    43
    1042
    2042
    2043
    3042

    sebebi nedir? (aradaki değerler herhangi bir şekilde işleme alınmadı (eklenip silinme vs)


    Special

    Aslında bu Sql Server 2012 ve sonrasında gelen bir özellik,

    Sql Serverı ShutDown ile kapatmazsan veri bütünlüğü için sıra numarası atlıyor. bilgisayarı kapatman senin sql servırı düzgün kapattığın anlamına gelmiyor aslında serverın fişini çekiyor gibi oluyorsun. Sen pcyi yeniden başlattığında cachte bulunan veri bütünlüğü için sıra numarası atlanıyor.

    Ayrınıtılı bilgi ve bu özelliği devre dışı bırakmak için şu makaleye göz atabilirsin Link

     AMA unutma senin için önemli olan numaranın sıralı değil benzersiz olmasıdır. Tekrar ediyorum amaç artan bir sıra değil benzersiz bir key.

    • Yanıt Olarak Öneren Ekrem Önsoy 4 Eylül 2017 Pazartesi 10:22
    • Yanıt Olarak İşaretleyen Ekrem Önsoy 29 Aralık 2017 Cuma 09:15
    26 Ağustos 2017 Cumartesi 00:48
  • SElam,

    <header class="entry-header" style="box-sizing:inherit;color:#727272;font-family:Roboto, sans-serif;font-size:14px;">

    IDENTITY ALANI SIFIRLAMA VEYA FARKLI BİR DEĞERE SET ETME

    https://sqlturkiye.com/identity-alani-sifirlama-veya-farkli-bir-degere-set-etme/

    </header>

    SQL Server üzerine bir çok merak ettiğin detay, SQLTURKIYE Data Platformundan öğrenebilirsin.

    Makaleler,SQL TV, E-Book gibi bir çok içeriğe erişme şansın bulunmakta.

    www.sqlturkiye.com

    25 Aralık 2017 Pazartesi 19:56
  • Merhaba dark-shadow,

    SQL Server 2012'den itibaren eğer Database Engine servisi temiz olmayan bir şekilde kapatılırsa (örnek: SHUTDOWN WITH NOWAIT) o zaman böyle bir sonuç ile karşılaşabilirsin. Bunun nedeni SQL Server 2012 ile birlikte gelen Identity değer üretimindeki bir davranış değişikliği. SQL Server 2012 ile birlikte Identity üretiminin verimini arttırmak için bir Cache mekanizması devreye alındı. Bu mekanizmayı kapatmak için Startup Parameter olarak -T272'yi kullanabilirsin veya SQL Server 2017 ile birlikte gelen aşağıdaki komutu (ilgili veritabanı için) kullanabilirsin.

    ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF


    http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy

    • Yanıt Olarak İşaretleyen Ekrem Önsoy 29 Aralık 2017 Cuma 09:15
    29 Aralık 2017 Cuma 09:13