Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
сразу в нескольких базах(одинаковых по структуре), в течении нескольких дней
поле ID int IDENTITY(1,1) в разных таблицах прыгнуло ровно на 1000
т.е. шли номера заказов ..., 11644, 11645
затем резко пошло 12645, 12646,...
а в некоторых чуть меньше чем на тысячу 173, 174, 1169, 1170

закономерности не вижу вообще
Identity( да и вообще те таблицы), никто не трогал,
за последние N лет такого никогда не случалось
месяц назад перешли на новый сервер Win 2012 + SQL Server 2012
причем сейчас уже все продолжается как положено
но клиенты возмущаются что у них прыгнули номера инвойсов, для них это важно
я тоже в шоке

в чем может быть проблема?
вероятность того что сразу несколько фирм создали 1000 заказов и тут же из удалили исключена :) проверял лог
25 мар 13, 21:53    [14094359]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
kalimba
Member

Откуда:
Сообщений: 297
DNV,

http://msdn.microsoft.com/ru-ru/library/ms186775.aspx читайте замечания.
Если у вас SQL Server 2012, Вам для таких целей надо использовать sequence - http://msdn.microsoft.com/ru-ru/library/ff878058.aspx .
25 мар 13, 22:05    [14094392]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Glory
Member

Откуда:
Сообщений: 104764
DNV
в чем может быть проблема?

Нет никакой проблемы.
Вы почему то решили, что IDENTITY гарантирует непрерывность значений.
25 мар 13, 22:07    [14094397]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30800
kalimba
Если у вас SQL Server 2012, Вам для таких целей надо использовать sequence - http://msdn.microsoft.com/ru-ru/library/ff878058.aspx .
sequence тоже не гарантирует непрерывности.

Если есть такие требования у пользователей, то их нужно просто реализовывать, программировать, встроенные средства этого обеспечить не могут, и это не ошибка программистов, а осознанное решение.
DNV
вероятность того что сразу несколько фирм создали 1000 заказов и тут же из удалили исключена :) проверял лог
Может быть, лог фиксирует не все вставки, как реализовано логирование?
25 мар 13, 23:11    [14094574]     Ответить | Цитировать Сообщить модератору
 Re: Данные о логине в HttpContext.Current.User.Identity.Name. Безопасно ли?  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
перелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнить
26 мар 13, 01:15    [14094869]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
DNV
перелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнить
Это у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".
26 мар 13, 01:18    [14094874]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
и еще, на локальной машине у меня такое тоже случалось с SQL 2012 но я как то не реагировал
а на сервере это уже серьезно, компании - клиенты негодуют.
Переделывать систему с ручной нумерацией почти не реально
довольно большой проект сотни процедур... надо как-то вернуть старое поведение. За всю историю проекта в SQL 2000 - 2008 R2 никогда такого не было.
26 мар 13, 01:20    [14094876]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
DNV
и еще, на локальной машине у меня такое тоже случалось с SQL 2012 но я как то не реагировал
а на сервере это уже серьезно, компании - клиенты негодуют.
Переделывать систему с ручной нумерацией почти не реально
довольно большой проект сотни процедур... надо как-то вернуть старое поведение. За всю историю проекта в SQL 2000 - 2008 R2 никогда такого не было.
Ну, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.
26 мар 13, 01:24    [14094878]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
Гавриленко Сергей Алексеевич
DNV
перелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнить
Это у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".

да нет не только у меня
если интересно, не ляпнуть а разобраться, почитайте ссылки
http://www.rsdn.ru/forum/db/5059467.all
https://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover-results-in-reseed-of-identity#details

это именно поведение SQL 2012
и я не могу просто это проигнорировать, т.к. это касается не меня а клиентов
26 мар 13, 01:26    [14094879]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
Гавриленко Сергей Алексеевич
Ну, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.

вы когда нибудь делали downgrade базы? только реально, а не теоретически?
26 мар 13, 01:28    [14094881]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
DNV
Гавриленко Сергей Алексеевич
пропущено...
Это у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".

да нет не только у меня
если интересно, не ляпнуть а разобраться, почитайте ссылки
Мне реально не интересно разбираться, почему некоторый механизм не ведет себя так, как никогда и не гарантировалось, что он должен себя вести.
26 мар 13, 01:28    [14094883]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
DNV
Гавриленко Сергей Алексеевич
Ну, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.

вы когда нибудь делали downgrade базы? только реально, а не теоретически?
Ну ради клиентов бы сделал, если посчитал, что сделать нормальную нумерацию сложнее, чем даунгрейднуть базу.
26 мар 13, 01:32    [14094887]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
тогда избавьте меня от своих словоиспражнений, и дайте ответить тем кто может мне помочь.
провалы при удалении или при rollback не интересуют
но вот еще один скачок в 1000 единиц может привести к серьезному конфлитку с заказчиками
26 мар 13, 01:33    [14094892]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
к переносу сервера мы готовились почти полгода, т.к. простои недопустимы
и если я просто скажу начальству а двайте-ка еще раз переустановим сервер, меня не поймут
единственное решение в сложившейся ситуации - возврат к старому поведению.
разберусь, отпишу что сделал
26 мар 13, 01:36    [14094897]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62035
DNV
Гавриленко Сергей Алексеевич
Ну, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.

вы когда нибудь делали downgrade базы? только реально, а не теоретически?

Делали. Относительно несложно

Нумерацию переделать с identity на сиквенс/иной счетчик - тоже довольно несложно, даже при наличии не слишком правильно написанного приложения.
26 мар 13, 01:38    [14094899]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
попробую этот вариант
http://i.ll.do/2013/01/how-to-solve-sql-server-2012-identity.html
26 мар 13, 01:42    [14094903]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
DNV
к переносу сервера мы готовились почти полгода, т.к. простои недопустимы
Хреново вы готовились, раз такой (в ваших понятиях) косяк проморгали.
DNV
тогда избавьте меня от своих словоиспражнений, и дайте ответить тем кто может мне помочь.
Посты одного мембера данного ресурса никак не могут помешать писать ответы другому. Плохо, что такие очевидные вещи для вас не очевидны.
26 мар 13, 01:42    [14094905]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
DNV
Member

Откуда: Ильичевск (Одесса)
Сообщений: 277
на локальном компе помог вариант с
http://i.ll.do/2013/01/how-to-solve-sql-server-2012-identity.html
What I did: Setting Trace Flag 272 on SQL Server 2012

Open "SQL Server Configuration Manager"
Click "SQL Server Services" on the left pane
Right-click on your SQL Server instance name on the right pane ->Default: SQL Server(MSSQLSERVER)
Click "Properties"
Click "Startup Parameters"
On the "specify a startup parameter" textbox type "-T272"
Click "Add"
Confirm the changes


буду завтра запускать на сервере
26 мар 13, 01:57    [14094918]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34592
DNV,

Тебе-то что за горе?
Ну, прыгнули...
Сервер надо аккуратно гасить, и все будет ок с идентити. Но если и прыгнет — ничего страшного.
26 мар 13, 09:18    [14095178]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34592
DNV,

У тебя номера инвойсов через identity генерируются? Ну-ну...
26 мар 13, 09:20    [14095180]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34592
DNV, запомни раз и навсегда

Identity гарантирует уникальность, а не генерацию в восходящем порядке, без дырок. Он так устроен by design. Он именно поэтому быстр. А генерация в строго восходящем порядке вообще требует сериализации всех транзакций к данной таблице, чего ты явно не хотел бы.
26 мар 13, 09:26    [14095196]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
MasterZiv
Identity гарантирует уникальность
Не гарантирует.
26 мар 13, 09:31    [14095211]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34592
DNV
попробую этот вариант
http://i.ll.do/2013/01/how-to-solve-sql-server-2012-identity.html


Тебе не identity надо фиксить, а логику своего приложения, тебе надо переделать генерацию номеров инвойсов с identity на свой собственный генератор.

PK таблицы оставляешь в покое, как он есть, добавляешь туда ещё одно поле, номер инвойса, посде добавления UPDATE-ишь его из старого поля (PK). Заменяешь в приложении все случаи использования старого PK как номера инвойса на новое поле.
при очень большом количестве таких мест или сложном изменении можно сделать наоборот -- добавить новое поле для первичного ключа, и про UPDATE-ить его из старого поля. По идее, PK должен использоваться реже и более детерминировано, чем номер инвойса.

Ну и о генерации нового номера инвойса --
делаешь таблицу

NEXT_DOCUMENT_NUMBER
(
document_type varchar(50) primary key,
next_doc_number int
...
);


Ну и внутри транзакции создания документа делаешь

begin tran

...

update NEXT_DOCUMENT_NUMBER
set next_doc_number = next_doc_number + 1
where document_type = 'INVOICE'

select @new_invoice_no =  next_doc_number - 1
from NEXT_DOCUMENT_NUMBER
where document_type = 'INVOICE'


insert into INVOICE (invoice_no,...) values ( @new_invoice_no, ...)
...


commit / rollback
26 мар 13, 09:42    [14095263]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34592
invm
MasterZiv
Identity гарантирует уникальность
Не гарантирует.


Оно гарантирует, что при правильном использовании оно будет тебе генерировать уникальное значение при каждом обращении.
И это в многопользовательской среде.
Естественно, в БД констрейнтом identity не является, если ты это имел в виду.
26 мар 13, 09:45    [14095275]     Ответить | Цитировать Сообщить модератору
 Re: Identity прыгнуло на 1000  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
MasterZiv
Естественно, в БД констрейнтом identity не является, если ты это имел в виду.
Вот именно. Поэтому, имхо, нельзя говорить, что Identity гарантирует уникальность, дабы не вводить в заблуждение новичков.
26 мар 13, 09:53    [14095306]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить