Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
в БОЛ имеется:
If an identifier column exists for a table that has frequent deletions, gaps can occur between identity values. Deleted identity values are not reused. To avoid such gaps, do not use the IDENTITY property. Instead, you can create a trigger that determines a new identifier value, based on existing values in the identifier column, as rows are inserted.

но нету утверждения обратного, что если строки не удалять, то не будет "дыр".
начальница желает завести лог, в котором главным показателем того, что никто из него не удалял, будет колонка identity.
что можно удалить и сделать DBCC CHECKIDENT (RESEED), ее не убеждает.
не знаю еще что привести как аргумент.
идеально было бы найти что-то официальное от MS,
где было бы сказано, что вообще не гарантирует заполнение числами подряд,
это бы проканало.
не подскажете, где бы такое найти?
27 мар 12, 15:39    [12321386]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
beg_inner,

SET IDENTITY_INSERT ... ON
с последующим заполнением дыр не предлагать?
27 мар 12, 15:43    [12321418]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
beg_inner
но нету утверждения обратного, что если строки не удалять, то не будет "дыр".

будут...сами эксперимент проведите
create table #t ( id int identity )
insert into #t
default values
begin tran
insert into #t
default values
rollback
insert into #t
default values

select * from #t
27 мар 12, 15:43    [12321420]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
iap,
предлагать конечно. сейчас все в копилку насобираю и вывалю :)
27 мар 12, 15:55    [12321538]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
Knyazev Alexey,

практически с этого и началось.
сегодня сработал мой роллбэк из процедуры,
а последующий запуск под ее учеткой заполнил лог, но с дырами от моего запуска.
отсюда и вылезло все.
роллбэк она разрешила оставить, но чтоб дыр не было.
предложила DBCC CHECKIDENT (RESEED), она отказывается,
сейчас задушит еще и роллбэк по этой причине.
зная типаж, проще найти доводы против identity вообще
27 мар 12, 16:01    [12321605]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
beg_inner
предложила DBCC CHECKIDENT (RESEED), она отказывается,
сейчас задушит еще и роллбэк по этой причине.

Феерично что первое, что второе
27 мар 12, 16:03    [12321638]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
identity не предназначен для нумерации, а только идентификации, от которой всего лишь требуется уникальность.
identity работает вне транзакции.

1 - нормальное окончание
2 - откатываемся
3 - нормальное окончание
результат
1, 3
27 мар 12, 16:11    [12321713]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
beg_inner
отсюда и вылезло все.
Разве это было непонятно с самого начала???

Сервер же не может исполнять транзакции последовательно.
beg_inner
зная типаж, проще найти доводы против identity вообще
Естественно, для бизнес-нумерации идентити не подходит, его обычно используют для суррогатных ПК.

Делайте свою нумерацию, с учётом всех тонкостей бизнес-логики.
27 мар 12, 16:11    [12321722]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Anatoly Podgoretsky
identity не предназначен для нумерации, а только идентификации, от которой всего лишь требуется уникальность.

identity не гарантирует уникальность. Хотя, как правило, от него (неё?) этого почему-то ожидают
27 мар 12, 16:12    [12321723]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Anatoly Podgoretsky
identity не предназначен для нумерации, а только идентификации, от которой всего лишь требуется уникальность.
identity уникальность не обеспечивает, однако
27 мар 12, 16:12    [12321728]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Имеешь ввиду, назначить identity самостоятельно?
Я не думаю, что это пройдет, но эксперимент ставить не хочу.
Или что то другое?
27 мар 12, 16:15    [12321753]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Anatoly Podgoretsky
Имеешь ввиду, назначить identity самостоятельно?
Я не думаю, что это пройдет, но эксперимент ставить не хочу.

reseed/identity_insert - и чудесным образом получаем повторящиеся нумера.
27 мар 12, 16:16    [12321759]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Anatoly Podgoretsky
Имеешь ввиду, назначить identity самостоятельно?
Я не думаю, что это пройдет, но эксперимент ставить не хочу.
Или что то другое?
12321418
27 мар 12, 16:17    [12321768]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
триггер на делете
27 мар 12, 16:18    [12321771]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
beg_inner
желает завести лог, в котором главным показателем того, что никто из него не удалял, будет колонка identity


Главным показателем "не удаления" является факт отбирания пермишена-удалялки у потенциальных удаляльщиков.
Все прочие показатели будет носить строго второстепенный характер.
27 мар 12, 16:27    [12321826]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
iap
Anatoly Podgoretsky
Имеешь ввиду, назначить identity самостоятельно?
Я не думаю, что это пройдет, но эксперимент ставить не хочу.
Или что то другое?
12321418

Ну это и имел ввиду, под самостоятельным заполнением.
27 мар 12, 16:29    [12321839]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
SamMan
beg_inner
желает завести лог, в котором главным показателем того, что никто из него не удалял, будет колонка identity


Главным показателем "не удаления" является факт отбирания пермишена-удалялки у потенциальных удаляльщиков.
Все прочие показатели будет носить строго второстепенный характер.

То есть ее особо дырки не волнует, а только факт удаления записи, ну так как сказали отнять право удаления, может кроме одного ответственного.
27 мар 12, 16:31    [12321853]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
Anatoly Podgoretsky,

ее волнуют дырки т.к. это у их аудита является показателем того, что кто-то подтасовывает лог,
куда вручную никто не пишет(по идее), только процедуры.
процедуры до сего момента не использовали роллбэк вообще,
а тут вот использовала и мне сразу указали на дыры в логе
(у меня откатывалось и то что писалось в лог)
теперь log просто пишу в переменную типа table,
а потом в лог скидываю, даже после роллбэка,
потому что им хочется чтоб даже то, что отменилось,
было в логе, но чтоб без дырок.
это-то переделала, не жалко, хотела просто убедить,
что такой аудит со всех сторон обходится
27 мар 12, 17:13    [12322170]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
beg_inner
хотела просто убедить, что такой аудит со всех сторон обходится
Бесполезно.
27 мар 12, 17:22    [12322252]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
invm
beg_inner
хотела просто убедить, что такой аудит со всех сторон обходится
Бесполезно.

уже убедилась...
а такой вопрос:
мне самой надо использовать
SET IDENTITY_INSERT ... ON

при перезаписи из табличной переменной в лог, правильно?
и переменную заполнять с максимальным + 1 значением id из лога,
а то в лог из табличной переменной может записаться без дыр, но в произвольном порядке, да?
27 мар 12, 17:33    [12322353]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вы уверены, что вы понимаете, что вы хотите сделать?
27 мар 12, 17:35    [12322373]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
Гавриленко Сергей Алексеевич,

если я где-то ошиблась, подскажите.

имеется лог, в который пишут все процедуры(могут запускаться одновременно),
первый столбец там identity.
моя процедура тоже пишет, но она вся целиком в 1 транзакции.
каждый шаг отписывает в лог.
если делается роллбэк, то все записи в лог тоже откатываются.
а начальство желает видеть все эти строки в логе все равно + строка с "rollback".

хочу сделать так: завела переменную типа table той же структуры что и лог.
пишу все шаги туда.
в самом конце хочу из переменной переписать в лог,
это будет дважды в коде, в блоке try и в блоке catch после роллбэка.
на момент перезаписи в лог хочу заблокировать таблицу лога,
достать макс. значение id из лога,
вставить в лог из переменной, пересчитав id с учетом макс. значения из лога,
с SET IDENTITY_INSERT ... ON


что у меня неправильно?
27 мар 12, 17:54    [12322563]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
beg_inner
на момент перезаписи в лог хочу заблокировать таблицу лога,
достать макс. значение id из лога,
вставить в лог из переменной, пересчитав id с учетом макс. значения из лога,
с SET IDENTITY_INSERT ... ON


не надо так делать. протой insert делайте и всё
27 мар 12, 17:56    [12322588]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
*простой
27 мар 12, 17:56    [12322596]     Ответить | Цитировать Сообщить модератору
 Re: identity: гарантировано ли отсутствие "дырок" при отсутствии delet-ов  [new]
beg_inner
Guest
Konst_One,
так он же может мне поменять порядок id при вставке.
товарищам же важен хронологический, в смысле что шаги 1, 2 должны иметь в логе id по возрастанию , пусть id 1001 и 1002,
но не id 1002 шаг 1, id 1001 шаг 2
27 мар 12, 18:00    [12322637]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить