この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 12359|答える: 1

[出典] SQL Server 2012 自動成長カラムに値ジャンプの問題がある

[リンクをコピー]
掲載地 2018/08/23 12:03:06 | | | |
紹介

SQL Server 2012のリリース以降、SQL Serverインスタンスが再起動されると、テーブルの自動成長列の値がジャンプし、特定のジャンプ値が成長列のデータ型によって決まります。 データ型がintならジャンプ値は1000、データ型がbigintならジャンプ値は10000です。 私たちのプロジェクトでは、このようなジャンプ問題は特にクライアント側で示される場合、容認できません。 この奇妙な問題はSQL Server 2012以降にのみ発生し、SQL Server 2012以前のバージョンには存在しません。


バックグラウンド

数日前、QAチームの同僚がこう提案しました。表の自己増分列の値が不可解に1万も跳ね上がった。 つまり、表内の自己増量列の最後の値は2200でしたが、新しい記録を追加したことで自己増量列の値は12200になりました。 私たちのビジネスロジックでは、このような状況はクライアント側では許されないため、この問題を解決する必要があります。


コードの使用

最初はみんなとても不思議でした。どうしてこんなことが起きたのか? 通常、自己増量列に手動で値を挿入することはしません(自己膨張列に手動で値を挿入しても問題ありません)。自己増量列の値はデータベース自体が管理します。 私たちのコアチームのメンバーがこの質問を調べ始め、答えを見つけました。 さて、この問題と同僚が見つけた解決策について詳しく説明したいと思います。


このバグの再現方法


SQL Server 2012をインストールしてテストデータベースを作成する必要があります。 次に、自己成長する列を持つテーブルを作成します:
次に、2つのデータを挿入します。

結果を見直す:






この時点で、結果は予想通りでした。 次にSQL Serverサービスを再起動してください。 SQL Serviceを再起動する方法はいくつかあり、ここではSQL Server Managerを使って再起動します:



再起動後、今テーブルにさらに2つのデータを挿入します:



結果を見直す:




SQL Server 2012を再起動すると結果が見え、自己増分カラムの値は1002から始まります。 つまり、10000に跳ね上がったということです。 前述の通り、追加するデータ型がbigintの場合、そのジャンプ値は10,000になります。


本当にバグなのでしょうか?

Microsoftはこれをバグではなく機能であり、多くの場面で有用だと述べています。 しかし私たちの場合、そのような機能は必要ありません。なぜなら、この自己増分データは顧客に見せるためのものであり、顧客がこのようなジャンプするデータを見ると違和感を覚えるからです。 ジャンプ値はSQL Serverを再起動した回数によって決まります。 このデータが顧客に示されない場合、許容される可能性があります。 したがって、この機能は通常、内部使用にのみ適しています。



解決

もしMicrosoftが提供するこの「機能」に興味がなければ、オフにする方法は2つあります。

1. シーケンスの利用

2. SQL Server用にスタートパラメータ-t272を登録します



シーケンスの使用

まず、表の自己増分列を取り除く必要があります。 その後、キャッシュなしで数値を挿入するシーケンスを作成します。 サンプルコードは以下の通りです:


スタートアップパラメータ -t272 をレジスタします。

SQL Server Configuration Managerを開いてください。 SQL Server 2012のインスタンスを選択し、右クリックしてプロパティメニューを選択してください。 ポップアップウィンドウで起動パラメータを見つけて、-t272を登録してください。 完了後、下図のSQL Server (SQLSERVER2012)を再起動し、バグ再現操作を実行して問題が解決されたか確認します。




追加注記:

もしデータベースに自己膨らむテーブルが多く、どれも数値ジャンプの問題があるなら、後者の方法を使う方が良いです。 とてもシンプルで、範囲がサーバーレベルだからです。 2つ目のソリューションを採用すると、このサービスインスタンス上のすべてのデータベースに影響が出ます。





先の:ウェブサーバーはステータスコードの種類と意味を返します
次に:SQL Serverデータベースの自己成長ID列の操作メソッドを更新します
 地主| 掲載地 2020/07/08 15:15:52 |
SQL Serverの機能も高バージョンで提供されます。 パフォーマンスの理由から1000の識別値を事前に「キャッシュ」しています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com