Vi phạm PRIMARY KEY đột ngột trên cột IDENTITY


7

Tôi có một logbảng với một IDcột danh tính. Mọi thứ hoạt động tốt trong nhiều năm; Sau đó, ngày hôm qua, tôi thấy lỗi sau trong nhật ký:

Các tuyên bố này đã bị chấm dứt.
Vi phạm các ràng buộc CHÍNH CHÍNH 'PK__log__ID__3B40CD36'. Không thể chèn khóa trùng lặp vào đối tượng 'dbo.log'. Giá trị khóa trùng lặp là (295992).

Nhật ký INSERT INTO (datum, zeit, benutzer, modul, proenedur, code, zeile, bez1, bez2, tech_info) VALUES ('20151126 00: 00: 00.000', '19000101 18: 26: 45.121', ' , '', 'WShop-Trans', 0, '1 Datensätze für Tabelle adresse gesendet.', '', '')

Tôi đã kiểm tra hạt giống IDENTITY và có vẻ ổn:

Truy vấn: DBCC CHECKIDENT (nhật ký)

Kết quả: Kiểm tra thông tin nhận dạng: giá trị nhận dạng hiện tại '296021', giá trị cột hiện tại '296021'.
Thực hiện DBCC hoàn thành. Nếu DBCC in thông báo lỗi, liên hệ với quản trị viên hệ thống của bạn.

Truy vấn: CHỌN MAX (ID) TỪ nhật ký

Kết quả: 296021

Không có trình kích hoạt nào trên bàn và không ai gặp rắc rối với các giá trị hạt giống (Tôi là người quản trị máy chủ cơ sở dữ liệu, vì vậy tôi khá chắc chắn về điều đó).

Cho đến nay, đây là một sự kiện một lần và tôi không thể tái tạo nó.

Tôi trông giống như một trục trặc của SQL Server, nhưng tôi tò mò: Đây có phải là một lỗi đã biết hay có bất kỳ lời giải thích hợp lý nào khác cho việc này không? Phiên bản SQL Server là Microsoft SQL Server 2012 - 11.0.2100.60 (X64).

Để hoàn thiện, đây là tập lệnh bảng hoàn chỉnh:

CREATE TABLE [log](
    [datum] [datetime] NULL,
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [zeit] [datetime] NULL,
    [benutzer] [varchar](255) NULL,
    [modul] [varchar](255) NULL,
    [prozedur] [varchar](255) NULL,
    [code] [varchar](255) NULL,
    [zeile] [int] NULL,
    [bez1] [text] NULL,
    [bez2] [text] NULL,
    [tech_info] [text] NULL,
    [pc_name] [varchar](255) NULL,
    [app_name] [varchar](255) NULL,
    [s_insert_user] [nvarchar](255) NULL,
    [s_insert_dat] [datetime] NULL,
    [s_update_user] [nvarchar](255) NULL,
    [s_update_dat] [datetime] NULL,
    [fs_mandant] [uniqueidentifier] NULL,
 CONSTRAINT [PK__log__ID__3B40CD36] PRIMARY KEY CLUSTERED ([ID] ASC)
)

CREATE NONCLUSTERED INDEX [code] ON [log] ([code] ASC)
CREATE NONCLUSTERED INDEX [datum_zeit] ON [log] ([datum] ASC, [zeit] ASC)
CREATE NONCLUSTERED INDEX [fs_mandant] ON [log] ([fs_mandant] ASC)
CREATE NONCLUSTERED INDEX [modul] ON [log] ([modul] ASC)

Câu trả lời:


6

Do câu hỏi SQL Server 2012 RTM (bản dựng 2100) đang được sử dụng, nên có khả năng lỗi này:

Khắc phục: Đối tượng trình tự tạo các giá trị chuỗi trùng lặp khi SQL Server 2012 hoặc SQL Server 2014 chịu áp lực bộ nhớ

mà nói:

Giả sử rằng bạn tạo một đối tượng chuỗi có CACHEtùy chọn được bật trong Microsoft SQL Server 2012 hoặc SQL Server 2014. Khi phiên bản chịu áp lực bộ nhớ và nhiều kết nối đồng thời yêu cầu các giá trị chuỗi từ cùng một đối tượng trình tự, các giá trị chuỗi trùng lặp có thể được tạo. Ngoài ra, lỗi vi phạm khóa duy nhất hoặc khóa chính (PK) xảy ra khi giá trị chuỗi trùng lặp được chèn vào bảng.

Lưu ý rằng IDENTITYsử dụng cơ chế đối tượng chuỗi trong SQL Server 2012 trở lên.

Vấn đề lần đầu tiên được khắc phục trong:

  • Cập nhật tích lũy 6 cho SQL Server 2014
  • Cập nhật tích lũy 4 cho SQL Server 2012 SP2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.