Oracle Sequence для изменения currval, почему бы просто не сбросить его и воссоздать? - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу увеличить CURRVAL набора последовательностей.

Один из вариантов - сбросить последовательность и воссоздать ее с начальным значением, равным значению, которое я хочу увеличить, однако я натолкнулся на ряд предложений ( здесь , здесь и здесь ), которые не отбрасывают его, а вместо этого:

  • ограничивают доступ
  • изменяют "приращение на" на любое значение, которое выс, чтобы увеличить CURRVAL на
  • тянуть значение
  • изменить «приращение на» обратно на 1
  • неограниченный доступ

Это всехорошо, но мне интересно, что такого плохого в отбрасывании последовательности?

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

Есть что-то, что я упустил из виду?

1 Ответ

0 голосов
/ 27 ноября 2018

Это становится большой проблемой, когда существует множество сложных зависимостей в последовательности или между кодом триггера и другими пакетами pl / sql.

Как правило, вы хотите минимизировать ситуации, которые могут привести кв недействительном коде pl / sql (хранимые процедуры, пакеты и код триггера).Автокомпиляция будет выполняться по требованию при следующем вызове кода.Но если у вас система транзакций большого объема или крупномасштабное приложение со сложными зависимостями, эти задержки (или последующие исключения), вызванные перекомпиляцией, могут быть неприемлемыми.

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

...