Подтвердить что ты не робот

Сохранение второго уровня в SQL Server 2008

Этот уик-энд очень длинный, так как будет дополнительная секунда, вставленная после 23:59:59 30 июня.

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

Мы используем время UTC вместе с новым типом данных datetimeoffset, но насколько я могу судить, они не позволят у вас есть более 60 секунд в минуту.

Конечно, это вызывает ошибку:

select datediff(ss, getdate(), '30-jun-2012 23:59:60')

Но, согласно богам UTC, это будет реальное время. События могут проходить в 23:59:60, но мы не можем записать этот факт.

23:59:59 плюс односекундное смещение по-прежнему будет считаться 00:00:00 1 июля.

Как я могу правильно зарегистрировать событие, произошедшее в 23:59:60 в базе данных?

4b9b3361

Ответ 1

Вы не можете, потому что SQL получает время от Windows, а Windows также не поддерживает прыжковые секунды.

Windows применяет секунды прыжка, беря новое время с сервера времени восходящего потока и применяя обычные настройки, как если бы они были простыми дрифт часов,

Обычно это означает корректировку каждую секунду на несколько наносекунд в течение длительного периода. Более 24 часов он будет работать примерно на одну миллисекунду в минуту.

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

Для большинства целей это не имеет значения. Если у вас есть приложение, в котором это имеет значение, ОС вам не поможет. Вам также понадобятся некоторые специальные аппаратные средства для отслеживания времени, так как ОС, как правило, имеет проблемы с сохранением времени в течение секунды в любом случае. Windows по умолчанию синхронизирует время еженедельно или реже, а самые дешевые аппаратные часы ПК (или даже дорогостоящие серверы) могут сэкономить несколько секунд за это время.

Поскольку вы заботитесь о точном времени, я предполагаю, что вы указываете на pool.ntp.org или свою региональную подсеть и установили w32time для синхронизации несколько раз в день.