kikki's tech note

技術ブログです。UnityやSpine、MS、Javaなど技術色々について解説しています。

SQL Serverの再起動でindentityで割り振られる値が1000もしくは10000飛ぶ現象について

本章では、SQL Serverの再起動でindentityで割り振られる値がおかしくなる現象について共有します。

原因

SQL Server 2012から、SQL Server再起動及びフェイルオーバー時に、以下仕様が追加されました。

  • 前回割り振られたidentityの値に、1ではなく1000(intの場合)が加算される

sqlblog.com

これは、以下すべてを満たす稀なケースで、INSERTされたテーブルのIDENTITYの一意性を担保するために、用意されたようです。

しかし利用者にとっては、上記ケースを想定した仕様とは露も知らないため、運用中にSQL Serverの再起動後にデータを見て判明するという訳です。

私は、普段利用しているアプリで、大量のINSERTが同時に実行されるケースがないため、上記仕様を止めるように調整しました。

解決策

解決策は、SQL Serverに起動パラメータを追加して上げる必要があります。

  1. SQL Serverの構成マネージャーを起動
  2. SQL Serverのサービス」を選択
  3. SQL Server(MSSQLSERVER)」を選択
  4. 右クリックから「プロパティ」を選択
  5. 「起動時のパラメーター」を選択
  6. 「起動時のパラメーターの指定」で「-T272」を入力し「追加」ボタンを選択

上記手順で設定すると、以下のようになります。
f:id:kikkisnrdec:20151123175938p:plain

これでSQL Serverを再起動すると、設定が反映され、今後identityを含むカラムの値が飛び飛びになることはありません。

筆休め

SQL Serverはビルド番号が上がる度、非常に便利になっています。ただ、細かいところで仕様がわからない箇所がたまにあるので、常に情報はウォッチしていくべきですね。

以上、「SQL Serverの再起動でindentityで割り振られる値が1000もしくは10000飛ぶ現象について」でした。


※無断転載禁止 Copyright (C) kikkisnrdec All Rights Reserved.