none
Функция GETDATE() на SQL Sever 2008 возвращает неправильное время RRS feed

  • Вопрос

  • Добрый день!

    Есть система, написанная под SQL Server. В ней есть Job, который обрабатывает события, генерируемые пользователями. Job написан на Transact-SQL и пишет в одну из таблиц базы банных. В коде одно из полей таблицы принимает значение GETDATE(). При этом по какой-то непонятной причине в утренние часы в базу пишется неправильное значение времени. При этом разница с правильным составляет примерно 20 минут, т.е. при реальном времени 8:00 в базу пишется 8:20. 

    Удалось поймать такой момент, когда в таблице записано время, которое еще не наступило! При этом системное время совпадало с реальным. 

    Для проверки написал очень простой Job, который каждые 10 минут в таблицу пишет текущее время. Утром зашел на сервер, а в таблице будущее время.

    В чем может быть проблема?


    19 июня 2013 г. 5:30

Ответы

  • Добрый день!

    Проблему решить удалось. Сервера витруальные под VMWare, находятся в кластере. Администраторы кластера утверждали, что VMWare не производит коррекцию времени витруальных серверов Windows, которые на данных хостах крутятся, но на деле это оказалось не так. На обоих хостах время "ушло", а синхронизация работала. Поправил время и настроил синхронизацию хостов с серверами времени. Теперь проблема пропала.


    Михаил

    11 июля 2013 г. 7:17

Все ответы

  • В чем может быть проблема?


    Чудес не бывает, смотрите кто переводит время, проверяйте когда идёт синхронизация

    http://www.t-sql.ru

    • Предложено в качестве ответа Naomi N 20 июня 2013 г. 23:14
    19 июня 2013 г. 5:53
    Отвечающий
  • Никто не может переводить время, т.к. случаейтся такое утром с 8 до 10. В офисе никого нет, удаленного доступа нет. Доступ только у меня, я уверен, что я сам время не перевожу. Может ли быть проблема в синхонизации времени сервера с севером времени? Или может AD как-то странно со временем работает.
    19 июня 2013 г. 6:54
  • Никто не может переводить время, т.к. случаейтся такое утром с 8 до 10. В офисе никого нет, удаленного доступа нет. Доступ только у меня, я уверен, что я сам время не перевожу. Может ли быть проблема в синхонизации времени сервера с севером времени? Или может AD как-то странно со временем работает.

    Дело в том, что getdate() не может выдумать какую-то свою дату или сделать произвольное смещение. Поэтому ответ где-то рядом...getdate() выводит системное время!

    http://www.t-sql.ru

    19 июня 2013 г. 9:29
    Отвечающий
  • Понятно, что системное. Значит системное время как-то меняется. Я бы еще понял если бы отличие было на 1 или более часов без минут. Это еще можно понять. Можно ли на отдельном сервере домена отключить синхронизацию времени?
    19 июня 2013 г. 10:33
  • Чудес не бывает. В системных логах смена времени отражается. Смотрите туда, для начала.
    • Предложено в качестве ответа Naomi N 20 июня 2013 г. 23:14
    19 июня 2013 г. 14:24
  • Да, есть кое-что:

    The time service detected a time difference of greater than 5000 milliseconds for 900 seconds. The time difference might be caused by synchronization with low-accuracy time sources or by suboptimal network conditions. The time service is no longer synchronized and cannot provide the time to other clients or update the system clock. When a valid time stamp is received from a time service provider, the time service will correct itself.

    Пока отключил сервис Windows Time. Нужно, видимо, разобраться с настройками синхронизации времени на сервере и в домене. Спасибо!

    19 июня 2013 г. 14:41
  • Есть еще одна особенность: сервер, на котором работает СУБД виртуальный по управлением VMWare. У последнего как и у DC есть настройки синхронизации времени. Вот только в настройках DC сервер синхронизации указан, а в VMWare данная функция неактивна. Поэтому по идее они не конфликтуют.

    Михаил

    21 июня 2013 г. 6:14
  • Здравствуйте Михаил,

    Вам удалось решить данную проблему?


    Уважаемые участники форума. У меня к Вам просьба: если какой-нибудь из ответов помог Вам решить Вашу проблему, пожалуйста, не забывайте отмечать его. Таким образом, Вы поможете и другим пользователям, у которых возникла схожая проблема! Спасибо!

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


    Уважаемые участники форума. У меня к Вам просьба: если какой-нибудь из ответов помог Вам решить Вашу проблему, пожалуйста, не забывайте отмечать его. Таким образом, Вы поможете и другим пользователям, у которых возникла схожая проблема! Спасибо!

    11 июля 2013 г. 5:58
    Модератор
  • Добрый день!

    Проблему решить удалось. Сервера витруальные под VMWare, находятся в кластере. Администраторы кластера утверждали, что VMWare не производит коррекцию времени витруальных серверов Windows, которые на данных хостах крутятся, но на деле это оказалось не так. На обоих хостах время "ушло", а синхронизация работала. Поправил время и настроил синхронизацию хостов с серверами времени. Теперь проблема пропала.


    Михаил

    11 июля 2013 г. 7:17
  • Михаил спасибо за то, что Вы предоставили решение!
    Оно может быть полезным и для других пользователей!

    Уважаемые участники форума. У меня к Вам просьба: если какой-нибудь из ответов помог Вам решить Вашу проблему, пожалуйста, не забывайте отмечать его. Таким образом, Вы поможете и другим пользователям, у которых возникла схожая проблема! Спасибо!

    11 июля 2013 г. 8:30
    Модератор