Oracle Timezone Updates für ältere Datenbankversionen
Änderungen/Erweiterungen an Zeitzonendaten werden bei Oracle immer mit der aktuelle Datenbankversion mitgeliefert. Die Frage ist aber, was macht man, wenn man für eine ältere Datenbank ein Update der Zeitzoneninformationen benötigt? Dieser Artikel behandelt das warum und das wie.
Wo nutzt Oracle Zeitzonen Informationen?
Zum einen reagiert Oracle auf die Sommer/Winterzeit, sofern die Datenbank (bzw. die Instanz) in einer Zeitzone läuft, die Sommer und Winterzeit kennt. Selektiert man beispielsweise SYSDATE, und die Uhr wird eine Stunden zurück gestellt, dann bekommt man ebenfalls die korrekte Uhrzeit. Das setzt aber zusätzlich voraus, dass das Betriebsystem ebenfalls die Sommer und Winterzeit kennt.
Zusätzlich gibt es den Datentype TIMESTAMP WITH (LOCAL) TIMEZONE sowie Funktionen wie LOCALTIMESTAMP, CURRENT_TIMESTAMP,... die alle die Zeitzonen Information enthalten und damit auch korrekt umgehen / rechnen können. Diese sind übrigens der Grund warum das Update der Zeitzonenfiles potentiell lange dauern kann (dazu später mehr).
Warum ändern sich die Zeitzonen Informationen überhaupt?
Weil es immer wieder Länder gibt, die beispielsweise die Sommer/Winterzeitumstellung auf ein anderes Datum verschieben, einführen und abschaffen. Hin und wieder "verlegt" sich ein Land auch in eine andere Zeitzone (anderes Delta zu GMT). Damit die TIMESTAMP Daten in der Datenbank korrekt sind, müssen diese entsprechend korrigiert werden.
Warum dauert das Zeitzonen Update bei einigen Datenbanken nur eine Minute und bei anderen Datenbanken vielleicht sogar Stunden?
Das hängt davon ab, in wie vielen Tabellen/Spalten TIMESTAMPS gespeichert sind und wie viele Einträge in den Tabellen sind. Oracle muss beim Aktualisieren der Zeitzonenfiles die entsprechenden Spalten scannen und bei Bedarf updaten. Je mehr Spalten mit TIMESTAMP WITH LOCAL TIMEZONE man einsetzt und je mehr Records in den Tabellen liegen, um so länger dauert der Vorgang.
Natürlich hat auch die Rechenleistung und die Storage Performance etwas damit zu tun.
Wie kann man jetzt beispielsweise für eine Oracle 11g Datenbank die aktuellen Zeitzonen Files einspielen?
Oracle hat genau für diesen Zweck eine eigene mySupport Note verfasst, in der sie einerseits die verschiedenen Wege beschreiben Zeitzoneninformationen abhängig von der Datenbankversion zu aktualisieren als auch Links für die versionsspezifischen Downloads bereit stellen.
Der Artikel Updated DST Transitions and New Time Zones in Oracle RDBMS and OJVM Time Zone File Patches (Doc ID 412160.1) umfasst die Versionen ab Oracle 9i.
In weiteren Artikel - hier das Beispiel für DSTv26 - findet man dann die exakte Download- und Installationsanleitung: Applying the DSTv26 update for the Oracle Database (Doc ID 2143254.1).