Svaret är:Det beror på.
Totalt har din databas tre tidszoner
- Din sessions tidszon:
SESSIONTIMEZONE
Detta kan du ändra genom att ALTER SESSION SET TIME_ZONE=...
närsomhelst. Det är relevant för resultatet av
-
CURRENT_DATE
-
LOCALTIMESTAMP
-
CURRENT_TIMESTAMP
Det är också måltidszonen när du gör CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)
Standard SESSIONTIMEZONE
kan ställas in av miljövariabeln ORA_SDTZ
eller (på Windows) genom registerpost HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(för 32 bitars klient), resp. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(för 64-bitars klient).
- Databasens tidszon:
DBTIMEZONE
Egentligen är detta inte så viktigt i daglig användning, det är endast relevant för TIMESTAMP WITH LOCAL TIME ZONE
datatyp kolumner och definierar lagringsformatet.
Det här är INTE tidszonen för SYSDATE
eller SYSTIMESTAMP
!!!
Du kan inte ändra DBTIMEZONE
på din databas om databasen innehåller en tabell med en TIMESTAMP WITH LOCAL TIME ZONE
kolumnen och kolumnen innehåller data. Annars kan det ändras med ALTER DATABASE SET TIME_ZONE='...';
. Ändringen träder inte i kraft förrän databasen har stängts av och startat om.
DBTIMEZONE
ställs in när databasen skapas. Om ingen tidszon tillhandahålls när databasen skapas, används Oracle som standard till tidszonen för serverns operativsystem.
- Tidszonen för databasserverns operativsystem:
Denna tidszon är relevant för resultatet av
-
SYSDATE
-
SYSTIMESTAMP
Naturligtvis kan denna tidszon inte ändras på databasnivå. Om ditt hemland använder sommartid kan denna tidszon ändras två gånger om året. Du kan fråga den med SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;
, till exempel.
Så om ditt DB Server OS är korrekt konfigurerat bör du få sommartider från och med nästa vecka (åtminstone för Europa)