2012-06-29 15 views
12

में एक लीप सेकेंड संग्रहीत करना इस सप्ताहांत एक अतिरिक्त लंबा है क्योंकि extra second 3012 को 23:59:59 के बाद डाला जाएगा।SQL सर्वर 2008

हमारे पास एक प्रणाली है जो घड़ी के आसपास बहुत सारे डेटा लॉग करती है और व्यवसाय नियमों में से एक यह है कि एक ही समय में एक ही समय में होने पर दो रिकॉर्ड रिकॉर्ड नहीं किए जा सकते हैं।

हम यूटीसी डेटाटाइम्स का उपयोग नए datetimeoffset डेटा प्रकार के साथ कर रहे हैं, लेकिन जहां तक ​​मैं कह सकता हूं कि वे आपको एक मिनट में 60 सेकंड से अधिक नहीं होने देंगे।

निश्चित रूप से, यह एक त्रुटि फेंकता है:

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

लेकिन यूटीसी देवताओं के अनुसार यह एक वास्तविक समय होगा। घटनाक्रम 23:59:60 पर हो सकते हैं लेकिन हमारे पास इस तथ्य को रिकॉर्ड करने का कोई तरीका नहीं है।

23:59:59 प्लस वन सेकंड ऑफसेट को अभी भी 1 जुलाई को 00:00:00 माना जाएगा।

मैं सही तरीके से लॉग इन कैसे कर सकता हूं कि डेटाबेस में 23:59:60 पर कोई घटना हुई?

+4

ऐसा लगता है कि आपके व्यवसाय नियम वास्तविकता को अनदेखा करते हैं। –

+1

कैसे? लॉग इन होने वाली घटनाएं शारीरिक रूप से एक से अधिक बार नहीं हो सकती हैं। मुझे पता नहीं था कि आप एक ही परियोजना पर काम कर रहे थे। – Widor

+1

मैं जस्ट में बात कर रहा था, लेकिन वास्तविकता यह है कि सिस्टम लीप सेकेंड के लिए टाइम स्टैंप स्टोर नहीं कर सकता है, इस प्रकार लीप सेकेंड के दौरान प्रति सेकंड एक ईवेंट लॉग करना संभव नहीं है। व्यापार नियमों को ऐसी चीज की आवश्यकता होती है जिसे परंपरागत माध्यमों से आसानी से पूरा नहीं किया जा सके। नियमों पर पुनर्विचार करें, लीप सेकंड के लिए अपवाद बनाएं, या पागल वन-ऑफ कोड लिखें। –

उत्तर

9

आप नहीं कर सकते, क्योंकि एसक्यूएल विंडोज से समय प्राप्त करता है, और विंडोज या तो लीप सेकेंड का समर्थन नहीं करता है।

विंडोज अपस्ट्रीम टाइम सर्वर से नया समय ले कर और सामान्य समायोजन को लागू करते हुए जैसे कि यह clock drift सरल था, लागू होता है।

आमतौर पर इसका मतलब है कि एक विस्तारित अवधि में कुछ नैनोसेकंड द्वारा प्रत्येक सेकेंड को समायोजित करना। 24 घंटे से अधिक यह प्रति मिनट लगभग एक मिलीसेकंड पर काम करेगा।

असल में, सबसे अनुप्रयोगों बस बहाना ऐसी कोई बात नहीं है कि लीप सेकंड के रूप में।

अधिकांश उद्देश्यों के लिए इससे कोई फर्क नहीं पड़ता। यदि आपके पास कोई ऐसा एप्लिकेशन है जहां यह मायने रखता है, तो ओएस आपकी मदद नहीं करेगा। समय को ट्रैक करने के लिए आपको कुछ विशेष हार्डवेयर की भी आवश्यकता होगी, क्योंकि ओएस के आम तौर पर किसी दूसरे के भीतर समय रखने में परेशानी होती है। डिफ़ॉल्ट रूप से विंडोज समय साप्ताहिक या कम बार सिंक्रनाइज़ करता है, और सबसे सस्ते पीसी हार्डवेयर घड़ियों (या यहां तक ​​कि महंगा सर्वरों में भी) उस समय कई सेकंड आसानी से बहाल कर सकते हैं।

चूंकि आपको सही समय की परवाह है, मुझे लगता है कि आप pool.ntp.org या अपने क्षेत्रीय सबनेट पर इंगित कर रहे हैं और प्रति दिन कई बार सिंक्रनाइज़ेशन के लिए w32time सेट कर चुके हैं।

+0

ध्यान रखें कि अगली एनटीपी सिंक्रनाइज़ेशन पर समय को अनुकूलित करके, आपकी घड़ी आपके सिस्टम में भविष्य को एकीकृत करने के लिए धीमा हो जाएगी :) वैसे, जब आपकी घड़ी बहुत दूर है, तो यह सेट हो जाएगी सही समय, इस प्रकार आपके डेटाबेस में डुप्लिकेट प्रविष्टियों के साथ एक ही समस्या पैदा कर रहा है। एमएसडीएन: "[... घड़ी की दर समायोजित करता है ... इसे सही समय की ओर ले जाने की अनुमति देने के लिए। यदि समय अंतर ... बहुत बड़ा है ... समय सेवा स्थानीय घड़ी सेट करती है ...] (https : //technet.microsoft.com/en-us/library/cc773013 (v = ws.10) .aspx w2k3tr_times_how_izcr #) " – eFloh