В кластере Oracle sysdate всегда будет давать последовательный ответ?

StackOverflow https://stackoverflow.com/questions/182931

Вопрос

В кластере Oracle (более одного компьютера, взаимодействующего для обслуживания одной базы данных) будет " sysdate " функция всегда возвращает последовательный ответ? Даже если часы операционной системы сервера сообщают о несовместимых значениях?

Это было полезно?

Решение

Я бы сильно подозревал, что SYSDATE также связан с ОС. Будьте очень внимательны к причине, по которой вам нужно его использовать. Если есть какая-либо логика, которая реализует пошаговое отслеживание событий (например, вы выполняете пошаговый экспорт), и вы должны убедиться, что ни один элемент не пропущен, а также нет дублирования, основывайте отслеживание на последовательных идентификаторах, а не на SYSDATE.

На самом деле, это верно даже для некластерных систем, поскольку иногда SYSDATE может меняться (экономия времени, ошибки системного администратора ...).

Другие советы

SYSDATE относится к узлу ОС; если он гарантированно корректен во всем кластере, то узлы будут синхронизироваться каждый раз, когда вы вызываете SYSDATE. В кластерной среде упорядоченные последовательности дороги; лучше избегать, если это вообще возможно. Упорядоченная последовательность гарантирует вам уникальность и порядок - однако вы все равно можете получить пробелы, если обработка не удалась после выбора из последовательности и до совершения транзакции.

Мы используем несколько обходных путей:

<Ол>
  • Как правило, последовательности установлены на неупорядоченный с большими размерами кэша (25 000), чтобы уменьшить межкластерный коммуникации.
  • Используйте NTP для синхронизации времени узлы (они все еще могут быть неверно, +/- наносекунды, так что вы не могу на это рассчитывать)
  • Для аудита журналов стилей мы используем systimestamp (отметка времени (6)) как уникальный идентификатор - и жить с фактом что это возможно (хотя крайне маловероятно) что бревна может появиться не в порядке (это также возможно с нормальным обработка, в зависимости от того, когда Коммиты происходят)
  • Где заказано последовательность требуется, и там может пробелы - используйте упорядоченную последовательность (старайтесь избегать в кластере среда как "кэш" не помогает)

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

  • Используйте NTP для синхронизации времени на всех ваших серверах (Oracle и других) и убедитесь, что этого не произойдет. Несовместимые системные часы - это путь к катастрофе.

    Я бы предположил , что sysdate вернет противоречивые результаты в сценарии, который вы описываете.

    Я потратил (немного) времени на поиск ответа на этот вопрос, но не смог его найти, но, учитывая, что sysdate просто возвращает дату / время из операционной системы, я подозреваю, что dmitriy правильный.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top