Datenbank.Guide

In Oracle Database können Zeitzonen an verschiedenen Stellen eingestellt werden. Im Folgenden finden Sie vier Möglichkeiten, die Zeitzone bei Verwendung von Oracle zu ändern.

Datenbankzeitzone festlegen

Sie können die Datenbankzeitzone beim Erstellen der Datenbank festlegen. Verwenden Sie dazu die SET TIME_ZONE -Klausel der CREATE DATABASE -Anweisung.

Beispiel:

CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

In diesem Fall habe ich einen Zeitzonenregionsnamen verwendet. Erfahren Sie, wie Sie eine Liste gültiger Zeitzonen in Oracle Database zurückgeben, um eine vollständige Liste gültiger Regionsnamen auf Ihrem System zu erhalten.

Alternativ können Sie einen tatsächlichen Zeitzonen-Offset verwenden:

CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';

Wenn Sie die Zeitzone beim Erstellen der Datenbank nicht explizit festlegen, wird standardmäßig die Zeitzone des Betriebssystems des Servers verwendet.

Sie können auch die aktuelle Zeitzoneneinstellung für die Datenbank ändern. Verwenden Sie dazu die Anweisung ALTER DATABASE.

Beispiel:

ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

Beachten Sie, dass die Datenbankzeitzone nur für TIMESTAMP WITH LOCAL TIME ZONE Spalten relevant ist. Oracle empfiehlt außerdem, die Datenbankzeitzone auf UTC (0) festzulegen:00), um Datenkonvertierungen zu vermeiden und die Leistung zu verbessern, wenn Daten zwischen Datenbanken übertragen werden.

Sitzungszeitzone einstellen

Sie können die Sitzungszeitzone unabhängig von der Datenbankzeitzone einstellen. Wenn Sie TIMESTAMP WITH LOCAL TIME ZONE -Daten zurückgeben, werden diese in der Zeitzone der aktuellen Sitzung zurückgegeben.

Die Sitzungszeitzone wird auch wirksam, wenn ein TIMESTAMP -Wert in den Datentyp TIMESTAMP WITH TIME ZONE oder TIMESTAMP WITH LOCAL TIME ZONE konvertiert wird.

Sie können einige Dinge tun, um die Zeitzone auf Sitzungsebene festzulegen.

Die Umgebungsvariable ORA_SDTZ

Sie können die Sitzungszeitzone mit der Umgebungsvariablen ORA_SDTZ festlegen. Dies kann auf folgende Werte eingestellt werden:

  • Betriebssystem lokale Zeitzone ('OS_TZ')
  • Datenbank-Zeitzone ('DB_TZ')
  • Absoluter Offset von UTC (z.'-04:00')
  • Name der Zeitzonenregion (z. 'America/St_Kitts')

Hier sind einige Beispiele für das Setzen dieser Umgebungsvariablen in einer UNIX-Umgebung:

% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'

Der Standardwert der Variablen ORA_SDTZ ist 'OD_TZ'. Dieser Wert wird verwendet, wenn die Variable nicht oder auf einen ungültigen Wert festgelegt ist.

Die ALTER SESSION-Anweisung

Sie können die Zeitzone für eine bestimmte SQL-Sitzung mit der SET TIME_ZONE -Klausel der ALTER SESSION-Anweisung ändern.

TIME_ZONE kann auf folgende Werte eingestellt werden:

  • Lokale Standardzeitzone beim Start der Sitzung (local)
  • Datenbank-Zeitzone (dbtimezone)
  • Absoluter Offset von UTC (z. '-04:00')
  • Name der Zeitzonenregion (z. 'Canada/Eastern')

Hier ist ein Beispiel für die Einstellung von TIME_ZONE auf solche Werte:

ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';

Sie können die Zeitzone Ihrer aktuellen Sitzung mit der Funktion SESSIONTIMEZONE überprüfen.

Beispiel:

SELECT SESSIONTIMEZONE FROM DUAL;

Ergebnis:

Australia/Brisbane 

In meinem Fall ist die Sitzungszeitzone auf Australien / Brisbane eingestellt.

Die AT TIME ZONE-Klausel

Ein datetime-Ausdruck kann eine AT LOCAL-Klausel oder eine AT TIME ZONE-Klausel enthalten. Wenn Sie eine AT LOCAL-Klausel einschließen, wird das Ergebnis in der aktuellen Sitzungszeitzone zurückgegeben. Wenn Sie die AT TIME ZONE-Klausel einschließen, kann die Zeitzone eine der folgenden sein:

  • Ein Zeitzonen-Offset
  • Ein Zeitzonen-Regionsname
  • DBTIMEZONE ( diese Funktion gibt die Zeitzone der Datenbank zurück)
  • SESSIONTIMEZONE ( diese Funktion gibt die Zeitzone der aktuellen Sitzung zurück)
  • Ein Ausdruck, der eine Zeichenfolge mit einem gültigen Zeitzonenformat zurückgibt.

Beispiel:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;

Ergebnis:

02/JAN/30 04:30:35.000000000 AM +12:00

In diesem Fall habe ich die Funktion FROM_TZ() verwendet, um einen Zeitstempelwert und eine Zeitzone in einen Wert TIMESTAMP WITH TIME ZONE zu konvertieren. Ich habe dann die Klausel AT TIME ZONE verwendet, um eine andere Zeitzone anzugeben.

Hier ist das gleiche Beispiel, außer diesmal spezifiziere ich AT LOCAL:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;

Ergebnis:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht.