Hoş Geldin, Ziyaretçi!

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

dsgn kguard
ROLLET remastered
vsupload kguardedgeakademi
cleopatra legacy
ecr-online rebels reklam

vSRO Çözüldü Sql Server Otomatik ID Atama(Identity)

Xena

.
Katılım
10 Ağu 2019
Mesajlar
571
Çözümler
9
Alınan Beğeni
1,159
Ödül Puanları
93
Konum
Muğla
Merhabalar. Konuya uygun başlık bulamadım kusuruma bakmayın.

Sorunu ilk olarak Test adlı charı oluşturduğumda farkettim 1 ay kadar önce ama umursamadım. Daha sonra 13-14-15 dg stoneleri eklerken karşılaştım ve idler en son eklenen itemin üstüne +1 ekleyerek ilerlemesine rağmen itemi yere atınca crash alıyordum ve id'leri 100 ileri atarak sorunu çözdüm.

Bugün ise bütün tabloların 1000 id atlatarak ilerlediğini farkettim. Örnek olarak Tab_RefHive tablosunun son id'si "1777" ise bir veri eklediğimde "2777" oldu.

Bu sorun tam olarak nereden ve nasıl kaynaklıdır. Yardımlarınız için şimdiden teşekkürler.

1.png
 
Çözüm
Biraz araştırma yaptım ve böyle bir sonuca vardım. Kendim denemedim ama bir kaç yerde böyle makeleler mevcut.

Makale1

Makelede ise şöyle yanıtlanmış;
Şimdi bu işin geçmişi Sql Server 2012 ye kadar gidiyor. 2012 sürümü ile beraber microsoft şöyle bir şey yaptı. int identity alanlar için 1000(bin) bigint için ise 10000(10 bin) alanı her sql server instance ı başlatılınca tahsis etti , ayırdı.

Bu durum da neyi getirdi , int alan için konuşalım , sql server başladı , yeni bir tablon var , ve ilk kayıtlar girildi , 1,2,3.Sonra ne zamanki bin bir sebebten dolayı sql server restart edildi ,işte bu sefer sql bir sonraki part olan 1000 ile 2000 arasında değerler tahsis ediyor.Bu böyle devam eder , 2000 -3000 , 3000 - 4000

Microsoft...

Mico

.
Katılım
10 Nis 2020
Mesajlar
1,411
Çözümler
25
Alınan Beğeni
2,490
Ödül Puanları
113
Konum
Mars
identity'i no yap sonra misal 0-1-2 diye gidiyor 3 yap ardından identy tekrar aç kaydet execute yap baska bişi daha kaydet 3-4 diye gidecek bunu denedinmi hiç ben genelde birşeyler ters gidince identy kapatıp o sayıdan sonrasını ekliyorum actıgımda o sayıdan devam ediyor
 
Oyla 0

sarkolata

.
Developer
Katılım
2 Tem 2019
Mesajlar
491
Çözümler
7
Alınan Beğeni
792
Ödül Puanları
93
Konum
Los Angeles, CA
Screenshot_1.png

tablodaki Identity Increment 1000 ise böyle olur. Seed kaçtan başlayacağını, increment kaç kaç artacağını belirtir.
 
Oyla 0

Xena

.
Katılım
10 Ağu 2019
Mesajlar
571
Çözümler
9
Alınan Beğeni
1,159
Ödül Puanları
93
Konum
Muğla
Ekli dosyayı görüntüle 13945

tablodaki Identity Increment 1000 ise böyle olur. Seed kaçtan başlayacağını, increment kaç kaç artacağını belirtir.
Durduk yere böyle oldu. Seed ve increment 1 ikiside
Üst üste post gönderildiği için tek mesajda birleştirildi:

identity'i no yap sonra misal 0-1-2 diye gidiyor 3 yap ardından identy tekrar aç kaydet execute yap baska bişi daha kaydet 3-4 diye gidecek bunu denedinmi hiç ben genelde birşeyler ters gidince identy kapatıp o sayıdan sonrasını ekliyorum actıgımda o sayıdan devam ediyor
Denemedim ama tüm tablolar bu şekilde ilerliyor. Bir sıkıntı olduğu ortada
 
Oyla 0

Mico

.
Katılım
10 Nis 2020
Mesajlar
1,411
Çözümler
25
Alınan Beğeni
2,490
Ödül Puanları
113
Konum
Mars
şunları bir dene bakalım bro

SQL Tablo ve id Sıfırlama​

Her proje geliştiricisinin başına gelmiş olabilir. Projelerinizin test aşamalarını bitirdiğinizde veritabanını sıfırlamak zorunda kalabilirsiniz yada kullanmakta olduğunuz veritabanını sıfırlamak gibi gereksiniminiz olabilir. Bu işler için aşağıdaki komutları yazmak yeterli olacaktır.
1. SQL de tabloyu sıfırlayarak bütün değerleri silip ve id leri sıfırdan başlatma komutu;
TRUNCATE TABLE tablo adı
2.Id istediğimiz yerden başlatma komutu;
DBCC CHECKIDENT (‘tablo adı’,RESEED, baslatılacak sayı)
burada girilecek verinin id si 1den baslaması isteniyor ise komut;
DBCC CHECKIDENT (‘tablo adı’,RESEED,0)
mesela 17’den başlatılmak isteniyorsa;
DBCC CHECKIDENT (‘tablo adı’,RESEED,16)
yazmamız yeterli olacaktır.
 
Oyla 0

Xena

.
Katılım
10 Ağu 2019
Mesajlar
571
Çözümler
9
Alınan Beğeni
1,159
Ödül Puanları
93
Konum
Muğla
Biraz araştırma yaptım ve böyle bir sonuca vardım. Kendim denemedim ama bir kaç yerde böyle makeleler mevcut.

Makale1

Makelede ise şöyle yanıtlanmış;
Şimdi bu işin geçmişi Sql Server 2012 ye kadar gidiyor. 2012 sürümü ile beraber microsoft şöyle bir şey yaptı. int identity alanlar için 1000(bin) bigint için ise 10000(10 bin) alanı her sql server instance ı başlatılınca tahsis etti , ayırdı.

Bu durum da neyi getirdi , int alan için konuşalım , sql server başladı , yeni bir tablon var , ve ilk kayıtlar girildi , 1,2,3.Sonra ne zamanki bin bir sebebten dolayı sql server restart edildi ,işte bu sefer sql bir sonraki part olan 1000 ile 2000 arasında değerler tahsis ediyor.Bu böyle devam eder , 2000 -3000 , 3000 - 4000

Microsoft bunun bir hata mı , bug mı olduğunu bildirdi mi , yoksa bunun kullanışlı ,performanslı bir yöntem olduğu için mi getirdikleri hakkında bir açıklamasını duymadım.Bunla ilgili bir şey bulabilirsem bu yazıyı güncellerim.

Bu durumdan rahatsız oluyorsan , düzenli olarak gitmesini istiyorsan , bir kaç çözüm var.

Makale2
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 Sql server Configuration Manager da Sql Server Startup Parameter olarak -T272'yi kullanabilirsin veya SQL Server 2017 ile birlikte gelen aşağıdaki komutu (ilgili veritabanı için) kullanabilirsin.

Sql Server Startup Parametresi olarak , -t272 göndermek
DCD064C0-9667-4C82-B14B-A29EED7528D0.png
 
Oyla 0
Çözüm

Mico

.
Katılım
10 Nis 2020
Mesajlar
1,411
Çözümler
25
Alınan Beğeni
2,490
Ödül Puanları
113
Konum
Mars
tabloyu truncate yapınca artık 1 den baslıyormu
 
Oyla 0

sarkolata

.
Developer
Katılım
2 Tem 2019
Mesajlar
491
Çözümler
7
Alınan Beğeni
792
Ödül Puanları
93
Konum
Los Angeles, CA
Durduk yere böyle oldu. Seed ve increment 1 ikiside
Üst üste post gönderildiği için tek mesajda birleştirildi:


Denemedim ama tüm tablolar bu şekilde ilerliyor. Bir sıkıntı olduğu ortada
O zaman bilemedim. Böyle garip şeyler başıma gelmiyor :D
 
Oyla 0
AdBlock Detected

Anlıyoruz, reklamlar can sıkıcı!

Elbette, reklam engelleme yazılımı reklamları engellemede harika bir iş çıkarır, ancak aynı zamanda web sitemizin faydalı özelliklerini de engeller. En iyi site deneyimi için lütfen AdBlocker'ınızı devre dışı bırakın.

AdBlock'u Devre Dışı Bıraktım.