env:Windows Server 2016
SQL Server 2012 SP1
最近一位朋友問我一個問題,SQL Server服務重啟後identity跳號問題。
我記得以前SQL Server 2008R2有遇到,記得是利用script找到重啟服務前的號碼重設,可是這個方式在多表的時候是一個很大的負擔。
Trace flag 272也是一個解決方式。
1.建立測試DB
command:
CREATE DATABASE [TBTEST02]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'TBTEST02', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TBTEST02.mdf' , SIZE = 4096KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N'TBTEST02_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TBTEST02_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
2.建立測試資料表與資料
command:
CREATE TABLE dbo.TEST01 (id int identity, name varchar(20))
insert into dbo.TEST01(name) values('john'),('mary')
select * from dbo.TEST01
3.檢查identity資訊
command:
dbcc checkident('TEST01', NORESEED)
identity現在的值是2
4.重啟SQL Server服務,並增加新的測試資料
command:
insert into dbo.TEST01(name) values('sean'),('larry')
select * from dbo.TEST01
重啟後發生跳號狀況
5.測試Trace flag 272,加到啟動參數,併重啟SQL Server服務
6.檢查啟動後identity值
command:
dbcc checkident('TEST01', NORESEED)
identitt值1003
7.增加測試數據
command:
insert into dbo.TEST01(name) values('sean'),('larry')
select * from dbo.TEST01
配置identity值1004, 1005
若多表有identity有跳號問題,Trace flag也許是不錯的選擇,一定要放在啟動參數裡面才有效果。
或是利用script重新設定