2014-11-24 4 views
0

Я нашел пробел в 18 номеров в моей последовательности оракулов, появившихся во время праздников, и не обнаружил следов этого преступления в файлах журналов. Могу ли я как-нибудь увидеть время обновления последовательности или любой другой способ отслеживания исчезновения порядковых номеров?Когда последовательность была обновлена ​​oracle

+0

Возможно, эти 18 записей были удалены ?. Если бы у вас был какой-то триггер аудита на этой таблице, вы могли бы это решить. Почему это «преступление»? – toddlermenot

+1

Зазор в порядковом номере не является проблемой. Вы можете игнорировать это. Значения, генерируемые последовательностью, совершенно бессмысленны, и не имеет значения, используете ли вы значение 42,60,4546, -35345 или 632023485 –

ответ

3

Как и в других ответах/комментариях, последовательности никогда не гарантируются как свободные пробелы. Пробелы могут произойти во многих отношениях.

Одна из вещей о последовательностях заключается в том, что они по умолчанию равны CACHE 20. Это означает, что, когда NEXTVAL называется последовательность в базе данных фактически увеличилась на 20, то возвращается значение, и последующие 19 значения только что вернулись из памяти (общий бассейн.)

Если последовательность израсходованного из общего пула, или общий пул сбрасывается или база данных перезапускается, значения, «оставшиеся» в кэше памяти последовательности, теряются, так как последовательность следующего раза берет значение из базы данных, что на 20 больше, чем последний раз.

Как вы заявляли, что это произошло во время каникул, я полагаю, что это была вероятная причина того, что ваша последовательность использовала 2 значения из памяти, затем администратор базы данных выполнял техобслуживание в праздники, что привело к сбросу общего пула, а остальные 18 значений в кеше последовательности памяти пропало.

Это нормальное поведение и причина, по которой последовательности работают быстро. Вы можете получить «ближе» к свободному от нуля NOCACHE NOORDER, но это будет стоить производительности и никогда не будет достаточно разрывом в любом случае.

1

Последовательность оракулов NOORDER по умолчанию. обратитесь к документации оракула https://docs.oracle.com/cd/B13789_01/server.101/b10759/statements_6014.htm. следовательно, поведение NOORDER не может быть таким, как ожидалось. Вы можете проверить, находится ли ваша последовательность оракулов в ORDER, если нет, то это еще одна проблема.

2

Последовательность не гарантирует получение свободной последовательности цифр. Он используется для создания серии (уникальных) чисел, которые очень масштабируемы в многопользовательской среде.

Если вашему приложению требуется, чтобы какой-то числовой идентификатор в таблице был последовательным без пробелов, вам понадобится другой способ генерации этих идентификаторов.

Смежные вопросы