2019年1月27日 星期日

SQL Server 2012 check identity jump number after restarting service

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重新設定



沒有留言:

張貼留言