Antworten auf die mysteriösen Fragen zum Sybase ASE-Zeitstempel-Datentyp

Eric Johnson stellte im August 2010 die folgenden Fragen. "Was ist der mysteriöse 'Zeitstempel'-Datentyp in Sybase?

Was zum Teufel ist ein Zeitstempel?Hat es überhaupt einen Bezug zu Zeit oder Datum?Kann ich es in ein Datum und eine Uhrzeit konvertieren?Wenn es keine Uhrzeit oder kein Datum ist, wofür verwenden Sie es? "

Ich habe versucht, den obigen Beitrag zu beantworten, aber diese Website akzeptiert aufgrund des Alters des ursprünglichen Beitrags keine neue Antwort. Da das Thema weiterhin eine FAQ unter SAP / Sybase ASE Professional ist, habe ich mich entschlossen, die ursprünglichen Fragen oben erneut zu posten und im Folgenden hoffentlich einige klare Antworten zu geben.

Antwort auf Frage 1: "Was zum Teufel ist ein Zeitstempel?"

• Der Zeitstempel einer Sybase ASE-Datenbank wird zentral in einer internen Speichertabelle 'dbtable' dieser Datenbank gespeichert. Diese Tabelle wird erstellt, wenn eine Datenbank online geschaltet wird. Sie können den aktuellen DB-Zeitstempel abfragen, indem Sie @@ dbts auswählen. Beachten Sie, dass dieser varbinäre (8) 'Database'-Zeitstempelwert plattformabhängig ist, d. H. Einer großen oder kleinen Endianität unterliegt.

• Jede Benutzertabelle kann eine Zeitstempelspalte für die 'Database'-Zeitstempelwerte von INSERT / UPDATE einer bestimmten Zeile enthalten. Alle 'Table'-Zeitstempelspaltenwerte werden automatisch von ASE verwaltet (genau wie die Identitätsspalte), wenn ein TSQL-DML-Befehl erfolgreich ausgeführt wurde. Im Gegensatz zum Zeitstempel 'Database' sind die Zeitstempelwerte 'Table' jedoch plattformunabhängig, da sie unabhängig von der Endianness der O / S-Plattform immer in der Big-Endian-Byte-Reihenfolge beibehalten werden (weitere Informationen finden Sie weiter unten).

Antwort auf Frage 2: Hat es überhaupt einen Bezug zu Uhrzeit oder Datum?

Nein, die Werte in den Zeitstempeln 'Database' und 'Local' geben nicht das aktuelle Datum / die aktuelle Uhrzeit wieder.

Antwort auf Q # 3: 'Kann ich es in eine Datums- / Uhrzeitangabe konvertieren?'

Nein, Sie können den Zeitstempel "Datenbank" oder den Zeitstempel "Lokal" seiner Seiten nicht in einen Datums- / Zeitwert konvertieren.

Antwort auf Frage 4: "Wenn es keine Uhrzeit oder kein Datum ist, wofür verwenden Sie es?"

• Der 'Database'-Zeitstempel wird um eins erhöht, wenn eine Seite in einer Datenbank geändert oder erstellt wird, während der' Local'-Zeitstempel der betroffenen Seite (in ihrem Seitenkopf) mit dem 'Database'-Zeitstempel dieses Zeitpunkts synchronisiert wird.

• Im Vergleich zum aktuellen Zeitstempel 'Datenbank' spiegelt der Zeitstempel 'Lokal' einer Datenbankseite das relative Alter der letzten Aktualisierung oder der ersten Erstellung dieser Seite wider. Daher kann ASE die chronologische Reihenfolge der Aktualisierungen / Erstellungen für alle Seiten in einer Datenbank angeben.

• Die Anwendung kann die Zeitstempelspalte "Tabelle" auf ähnliche Weise wie die Identitätsspalte verwenden, um die zuletzt oder am wenigsten zuletzt eingefügten / aktualisierten Zeilen zu suchen, unabhängig von den Schlüsselwerten der Zeilen.

Weitere Informationen, Warnungen und Vorbehalte: -

(1) Die Zeitstempel 'Database' und 'Local' werden in 3 Teilen gespeichert und sind abhängig von der Endianess der Betriebssystemplattform. z.B. 0xHHHH 0000 LLLLLLLL

2 Byte hoher Ordnung - 0xHHHH2-Byte-Füllzeichen - 0x00004-Byte-Low-Order - 0xLLLLLLL

(2) Der Benutzer-Zeitstempel "Tabelle" ist ebenfalls in drei Teilen gespeichert, befindet sich jedoch immer in Big-Endian-Ausrichtung. z.B. 0x0000 HHHH LLLLLLLL

2-Byte-Füllzeichen - 0x00002 Byte hoher Ordnung - 0xHHHH4-Byte-Low-Order - 0xLLLLLLL

(3) Der Datenbank-Zeitstempel wird in einer speicherinternen Systemtabelle dbtable einer bestimmten Datenbank gespeichert (die erstellt wird, wenn eine Datenbank online geschaltet wird).

Anmerkung 1: Die Werte der Spalte "Tabelle" für den Zeitstempel werden genau wie die anderen Spaltenwerte in den Daten- und / oder Indexseiten der Datenbanktabelle gespeichert, in der die Zeitstempelspalte definiert ist.Hinweis 2 - Beachten Sie, dass das Abfragen des 'Database'-Zeitstempels der aktuellen Datenbank durch SELECT @@ dbts die hexadezimale Darstellung zurückgibt, die der Endianness der Betriebssystemplattform unterliegt.Hinweis 3: Im Gegensatz dazu gibt das Abfragen des Zeitstempels 'Database' durch DBCC dbtable (nicht empfohlen) seine Big-Endian-Hex-Darstellung zurück. Daher ist es plattformunabhängig.WARNUNG - Wenn der 'Datenbank'-Zeitstempel einer bestimmten Datenbank das maximale Limit (0xFFFF, 0xFFFFFFFF) erreicht und es je nach Häufigkeit der Einfüge- / Aktualisierungsvorgänge in der Datenbank ein Jahrzehnt oder länger dauert, bis dieser Punkt erreicht ist, wird ASE dies tun Wenn Sie eine Warnung auslösen, ist kein weiteres Einfügen / Aktualisieren möglich. Die einzige Möglichkeit besteht darin, die Daten aus allen Objekten mit BCP zu exportieren (plus gespeicherte Prozeduren über sp_showtext), die Datenbank zu löschen und erneut zu erstellen (mit der neuen Near-Zer-Datenbank). Zeitstempel) und importieren Sie die Daten (und gespeicherten Prozeduren).

Zu Ihrer Information - Die obigen Antworten, Tipps und Tricks sind authentisch und genau, da ich für Sybase gearbeitet habe und jetzt für SAP arbeite, dem das Produkt ASE gehört.