Odpowiedź brzmi:to zależy.
W sumie Twoja baza danych ma trzy strefy czasowe
- Strefa czasowa Twojej sesji:
SESSIONTIMEZONE
Możesz to zmienić przez ALTER SESSION SET TIME_ZONE=...
kiedykolwiek. Ma to znaczenie dla wyniku
-
CURRENT_DATE
-
LOCALTIMESTAMP
-
CURRENT_TIMESTAMP
Jest to również docelowa strefa czasowa, gdy wykonujesz CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)
Domyślna SESSIONTIMEZONE
można ustawić za pomocą zmiennej środowiskowej ORA_SDTZ
lub (w systemie Windows) wpisem rejestru HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(dla klienta 32-bitowego), ewent. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ
(dla klienta 64-bitowego).
- Strefa czasowa bazy danych:
DBTIMEZONE
W rzeczywistości nie jest to tak ważne w codziennym użytkowaniu, dotyczy tylko TIMESTAMP WITH LOCAL TIME ZONE
kolumny typu danych i określa format przechowywania.
To jest NIE strefa czasowa SYSDATE
lub SYSTIMESTAMP
!!!
Nie możesz zmienić DBTIMEZONE
w Twojej bazie danych, jeśli baza danych zawiera tabelę z TIMESTAMP WITH LOCAL TIME ZONE
kolumna, a kolumna zawiera dane. W przeciwnym razie można to zmienić za pomocą ALTER DATABASE SET TIME_ZONE='...';
. Zmiana nie zacznie obowiązywać, dopóki baza danych nie zostanie zamknięta i ponownie uruchomiona.
DBTIMEZONE
jest ustawiana podczas tworzenia bazy danych. Jeśli podczas tworzenia bazy danych nie podano strefy czasowej, Oracle domyślnie wybiera strefę czasową systemu operacyjnego serwera.
- Strefa czasowa systemu operacyjnego serwera bazy danych:
Ta strefa czasowa ma znaczenie dla wyniku
-
SYSDATE
-
SYSTIMESTAMP
Oczywiście tej strefy czasowej nie można zmienić na poziomie bazy danych. Jeśli w Twoim kraju używany jest czas letni, ta strefa czasowa może zmieniać się dwa razy w roku. Możesz go przesłuchać za pomocą SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;
na przykład.
Tak więc, jeśli twój system operacyjny serwera DB jest poprawnie skonfigurowany, powinieneś uzyskać czasy letnie od przyszłego tygodnia (przynajmniej w Europie)