Zeitzone für DBaaS ändern

Für ein aktuelles Projekt haben wir die nötige Infrastruktur mit Hilfe der Oracle Cloud Infrastructure (OCI) aufgebaut. Neben Applikationsservern, die als Compute Instances realisiert wurden, wurde auch eine Datenbank benötigt. Diese wurde als Bare Metal Database Service eingerichtet. Da der Kunde in Neuseeland ansässig ist, entstand die Anforderung, mit der dortigen Zeitzone zu arbeiten. In der Cloud wird jedoch die Uinversal Time (UTC) verwendet, was ja auch erst einnmal Sinn ergibt. 

[oracle@ecotes-dbt ~]$ date

Thu Nov 14 07:05:29 UTC 2019

 

SQL> select sysdate from dual;

 

SYSDATE

----------------

14.11.2019 07:06

Wir mussten die Zeitzone also ändern. Für den zugrunde liegenden Server wird dazu einfach der Link /etc/localtime entsprechend angepasst.

[root@ecotes-dbt ~]# ll /etc/localtime

lrwxrwxrwx 1 root root 23 Oct 7 06:51 /etc/localtime -> /usr/share/zoneinfo/UTC

[root@ecotes-dbt ~]# ll /usr/share/zoneinfo/NZ

-rw-r--r-- 4 root root 2434 Jan 29 2018 /usr/share/zoneinfo/NZ

[root@ecotes-dbt ~]# ll /usr/share/zoneinfo/Pacific/Auckland

-rw-r--r-- 4 root root 2434 Jan 29 2018 /usr/share/zoneinfo/Pacific/Auckland

[root@ecotes-dbt ~]# rm /etc/localtime

rm: remove symbolic link `/etc/localtime'? y

[root@ecotes-dbt ~]# ln -s /usr/share/zoneinfo/Pacific/Auckland /etc/localtime

[root@ecotes-dbt ~]# ll /etc/localtime

lrwxrwxrwx 1 root root 36 Nov 14 20:10 /etc/localtime -> /usr/share/zoneinfo/Pacific/Auckland

 

[oracle@ecotes-dbt ~]$ date

Thu Nov 14 20:11:31 NZDT 2019

Die Datenbank verwendet in der Folge nun die angepasste Zeitzone.

SQL> select sysdate from dual;

 

SYSDATE

----------------

14.11.2019 20:11

Das ist aber nur die halbe Wahrheit, denn der Scheduler der Oracle Datenbank hat eine eigene Einstellung, die die verwendete Zeitzone definiert.

SQL> SELECT *

2 FROM dba_scheduler_global_attribute

3 WHERE attribute_name = 'DEFAULT_TIMEZONE';

 

ATTRIBUTE_NAME VALUE

---------------------- -----------

DEFAULT_TIMEZONE Etc/UTC

 

SQL> select dbms_scheduler.stime from dual;

 

STIME

---------------------------------------------------------------------------

14-NOV-19 08.26.59.556872000 AM ETC/UTC

Diese muss also ebenfalls noch angepasst werden. Das geschieht mittels DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE und ist am Ende ein Einzeiler.

SQL> exec DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone', 'Pacific/Auckland');

 

PL/SQL procedure successfully completed.

 

SQL> SELECT *

2 FROM dba_scheduler_global_attribute

3 WHERE attribute_name = 'DEFAULT_TIMEZONE';

 

ATTRIBUTE_NAME VALUE

---------------------- -----------

DEFAULT_TIMEZONE Pacific/Auckland

 

SQL> select dbms_scheduler.stime from dual;

 

STIME

---------------------------------------------------------------------------

14-NOV-19 09.31.26.365519000 PM PACIFIC/AUCKLAND

Mehr ist nicht zu tun. Der Scheduler benutzt nun ebenfalls die Zeitzone für Neuseeland.


Über den Autor

Marco Mischke

Weitere Beiträge dieses Autors

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich