В кластере Oracle sysdate всегда будет давать последовательный ответ? - PullRequest
1 голос
/ 08 октября 2008

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

Ответы [ 4 ]

2 голосов
/ 14 июля 2009

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

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

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

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

1 голос
/ 15 октября 2008

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

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

1 голос
/ 10 октября 2008

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

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

0 голосов
/ 11 октября 2008

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

...