it-swarm.com.de

In SQL Server springt der Wert der Identitätsspalte plötzlich auf 1001

Ich benutze SQL Server 2012 (Denali). Ich frage mich, warum alle Identitätsspaltenwerte ab 1001 beginnen und so weiter. Am Anfang beginnt die Spalte Identity mit 1,2 usw. und fügt die Identität reibungslos hinzu. Plötzlich springt sie für alle Tabellen in der Datenbank, die die Identitätsspalte enthält, auf 1001.1002 und höher. Was könnte der Grund sein? Bitte helfen.

47
Rajaram Shelar

Microsoft hat den Umgang mit Identitätswerten in SQL Server 2012 geändert. Infolgedessen werden nach dem Neustart Ihrer SQL Server-Instanz oder Ihres Servercomputers Identitätslücken zwischen Ihren Datensätzen angezeigt. Es kann auch andere Gründe für diese ID-Lücken geben. Dies kann an einem automatischen Neustart des Servers nach der Installation eines Updates liegen.

Sie können unter zwei Möglichkeiten wählen

  • Trace-Flag verwenden 272 o Dadurch wird für jeden generierten Identitätswert ein Protokollsatz generiert. Die Leistung der Identitätsgenerierung kann durch Aktivieren dieses Ablaufverfolgungsflags beeinträchtigt werden.
  • Verwenden Sie einen Sequenzgenerator mit der Einstellung NO CACHE

    Festlegen des Ablaufverfolgungsflags 272 unter SQL Server 2012, das Sie hier erwarten

  • Öffnen Sie "SQL Server Configuration Manager"

  • Klicken Sie im linken Bereich auf "SQL Server-Dienste"
  • Klicken Sie mit der rechten Maustaste auf den Namen Ihrer SQL Server-Instanz im rechten Bereich -> Standard: SQL Server (MSSQLSERVER).
  • Klicken Sie auf "Eigenschaften"
  • Klicken Sie auf "Startup Parameters"
  • Geben Sie im Textfeld "Startparameter angeben" "-T272" ein.
  • Klicken Sie auf "Hinzufügen"
  • Bestätigen Sie die Änderungen
73
Kitty

Ich glaube, Sie haben die Erklärung in einem Kommentar zu diesem Verbindungselement. Failover oder Neustart führt zu erneuter Identität

Um die Leistung für High-End-Computer zu verbessern, führen wir 2012 eine Vorbelegung für den Identitätswert ein. Diese Funktion kann mithilfe von TF 272 deaktiviert werden (dann erhalten Sie das Verhalten von 2008R2).

Die Identitätseigenschaften werden separat in Metadaten gespeichert. Wenn in identity ein Wert verwendet und increment aufgerufen wird, wird der neue Startwert festgelegt. Keine Operation, einschließlich Rollback, Failover, ..... kann den Startwert ändern, mit Ausnahme der DBCC-Neueinstellung. Failover gilt für das Tabellenobjekt, jedoch nicht für das Identitätsobjekt. Bei einem Failover können Sie Checkpoint vor einem manuellen Failover aufrufen, bei ungeplanten Fällen wird jedoch möglicherweise eine Lücke angezeigt. Wenn die Lücke ein Problem darstellt, empfehle ich die Verwendung von TF 272.

Für das Herunterfahren von Control Manager haben wir einen Fix für die nächste Version (mit einem anderen TF). Mit diesem Fix können die meisten Fälle des Herunterfahrens von Control Manager behoben werden.

12
Mikael Eriksson

Ich denke, Sie könnten stattdessen Sequenz verwenden, Sequenz gibt Ihnen 100% vollständige Kontrolle und ist in vielerlei Hinsicht der Identität weit überlegen ... Identität ist einfach so verdammt einfach und bequem

http://msdn.Microsoft.com/en-us/library/ff878091.aspx

Soweit ich weiß, wenn Sie eine Einfügung mit Identität machen und fehlschlagen, wird die Identität trotzdem verwendet, Verifiziert

mit sequence können Sie Lücken mit cycle "füllen". Obwohl, wie Amy Barrett darauf hinweist, dies außerhalb des Transaktionsbereichs erstellt wird.

Es gibt eine Leistungsoptimierung, wenn Sie Cache verwenden, die ebenfalls nützlich sein kann.

1