dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/sqlserver-2627-violation-primary-key-unique-constraint
SQL Server
SQL Server 2017 - 2022Veri & Kısıtlamalar
3 dk okuma
Msg 2627, Level 14: Violation of PRIMARY KEY constraint 'PK_Users'. Cannot insert duplicate key in object 'dbo.Users'.

SQL Server Birincil Anahtar & Benzersiz Kısıtlama İhlali: IDENTITY Reseed Kayması, Eşzamanlılık ve Güvenli Çözüm

IDENTITY değerlerinin çakışması, ETL süreçlerinde duplikasyon ve MERGE yarış durumları; DBCC CHECKIDENT kontrolü ve SEQUENCE optimizasyonu.

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: SQL Server 2017 / 2019 / 2022

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerSQL Server 2019 CU27, 2022 CU14
Gerekli Yetkidb_datawriter veya ALTER on table
Risk Seviyesi
MediumDBCC CHECKIDENT NORESEED ile yanlış id belirlenmesi sonraki tüm insert işlemlerini kilitler
Beklenen ÇıktıDBCC CHECKIDENT ile IDENTITY değerinin maksimum ID üzerine çekilmesi
Geri Dönüş (Rollback) Planı:IDENTITY seed değerini mevcut MAX(id) üzerine sabitleme
Microsoft Docs: DBCC CHECKIDENT
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

Uygulama veri eklerken işlem reddedilir ve şu hata fırlatılır:

plaintext
Msg 2627, Level 14, State 1, Line 1 Violation of PRIMARY KEY constraint 'PK_Users'. Cannot insert duplicate key in object 'dbo.Users'. The duplicate key value is (1052). The statement has been terminated.

▸Sahada Ne Görürsün?

Tabloya yeni kayıt eklenemez. Otomatik artan ID (IDENTITY) kullanılmasına rağmen SQL Server var olan bir ID değerini üretip birincil anahtara çarpmaktadır.


▸Kök Neden Matrisi

OlasılıkKök NedenAçıklama
%50IDENTITY Reseed KaymasıToplu veri yükleme (SET IDENTITY_INSERT ON) veya SQL Server beklenmedik kapanması sonrası IDENTITY sayacı mevcut MAX(id) değerinin gerisinde kalmıştır.
%35ETL / Uygulama DuplikasyonuEşzamanlı iki işlem aynı benzersiz değere (ör. TC Kimlik, Email) sahip satırı eklemeye çalışır.
%15MERGE Yarış Durumu (Race Condition)MERGE komutu kilit hint'i (HOLDLOCK) olmadan çalıştırıldığında eşzamanlı istekler duplicate üretir.

▸ACİL RUNBOOK (0-5dk)

sql
-- 1. Çakışan değeri gör SELECT * FROM dbo.Users WHERE id = 1052; -- 2. Tablodaki maksimum ID ile mevcut IDENTITY sayacını karşılaştır SELECT MAX(id) AS MaxID FROM dbo.Users; DBCC CHECKIDENT ('dbo.Users', NORESEED); -- 3. IDENTITY sayacını tablodaki en yüksek değerin üzerine otomatik düzelt DBCC CHECKIDENT ('dbo.Users', RESEED); -- Veya manuel olarak güvenli bir değere çek: -- DBCC CHECKIDENT ('dbo.Users', RESEED, 2000);

▸KALICI BLUEPRINT

  1. 1MERGE Eşzamanlılık Koruması: MERGE komutlarında hedef tabloya mutlaka WITH (HOLDLOCK) hint'i verilmelidir.
  2. 2SEQUENCE Nesnesi: Yüksek eşzamanlılıklı sistemlerde IDENTITY yerine önbellekli SEQUENCE mimarisine geçilmelidir.

▸Doğrulama

sql
DBCC CHECKIDENT ('dbo.Users', NORESEED); -- Çıktıda 'Current identity value' >= 'Current column value' olmalıdır

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (82)