Кэширование последовательности Oracle

Я пытаюсь реализовать последовательность в базе данных Oracle для действия как создатель суррогатного ключа для таблицы. По причинам производительности я хочу, чтобы эта последовательность кэшировалась. Я считал, что существуют потенциальные ловушки при использовании кэшируемых последовательностей начиная с откатов, и отказы экземпляра приведут к пропущенным значениям.

Это получило меня к взглядам. Скажем, я создаю последовательность с размером кэша 100. Затем я делаю 50 рекордных вставок к своей таблице со значением последовательности как основной суррогатный ключ. После фиксации текущее значение последовательности еще не было бы записано в диск. Предположим, что у меня должен был быть отказ экземпляра в этой точке. Когда база данных возвращается, это - мое понимание, что текущее значение последовательности будет сброшено к последнему значению, записанному в диск.

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

8
задан Melvin 4 March 2010 в 18:22
поделиться

2 ответа

Нет, это не так.

Ваша последовательность будет продолжена на 101 , значения между 50 и 100 будут отсутствовать.

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

Возможно, вас заинтересует эта статья , в которой говорится, что

Обратной стороной создания последовательности с кешем является то, что в случае сбоя системы , все значения кэшированной последовательности , которые не использовались, будут "потеряны". Это приводит к "разрыву" в назначенных значениях последовательности. Когда система восстанавливается, Oracle кэширует новые числа с того места, где он оставил отключение в последовательности, игнорируя так , что это называется "потерянными" значениями последовательности. .

15
ответ дан 5 December 2019 в 07:11
поделиться

Скажем, в кэше есть значения 101-200. Значение, записанное на диск, равно 201. Ваша вставка использует 101-150. Инстанс отключается. Инстанс запускается. При следующем использовании последовательности 201-300 будут кэшированы.

4
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: