Dieses Wochenende ist ein extra langes, da am 30. Juni ein extra second nach 23:59:59
eingefügt wird.Speichern einer Schaltsekunde in SQL Server 2008
Wir haben ein System, das viele Daten rund um die Uhr protokolliert und eine der Geschäftsregeln ist, dass keine zwei Datensätze protokolliert werden können, die zur selben Zeit innerhalb einer Sekunde aufgetreten sind.
Wir verwenden UTC-Datumsangaben zusammen mit dem neuen datetimeoffset
-Datentyp, aber soweit ich sagen kann, werden sie nicht mehr als 60 Sekunden pro Minute haben.
Sicherlich führt dies auf einen Fehler:
select datediff(ss, getdate(), '30-jun-2012 23:59:60')
Aber nach den UTC Götter wird dies eine Echtzeit sein. Veranstaltungen können unter 23:59:60
stattfinden, aber wir haben keine Möglichkeit, diese Tatsache zu erfassen.
23:59:59
plus 1 Sekunde Offset wird am 01. Juli noch als 00:00:00
betrachtet.
Wie kann ich korrekt protokollieren, dass ein Ereignis bei 23:59:60
in der Datenbank aufgetreten ist?
Es scheint, dass Ihre Geschäftsregeln die Realität ignorieren. –
Wie? Die protokollierten Ereignisse können physisch nicht mehr als einmal pro Sekunde auftreten. Mir war nicht bewusst, dass du auch an dem gleichen Projekt arbeitest. – Widor
Ich habe im Scherz gesprochen, aber die Realität ist, dass das System keinen Zeitstempel für die Schaltsekunde speichern kann, daher ist es nicht möglich, ein Ereignis pro Sekunde während einer Schaltsekunde zu protokollieren. Geschäftsregeln erfordern etwas, was mit herkömmlichen Mitteln nicht einfach zu erreichen ist. Regeln neu überdenken, Ausnahmen für Schaltsekunden machen oder verrückten Einmalcode schreiben. –