Tietokanta.Opas
Oraclen tietokannassa aikavyöhykkeet voidaan asettaa eri paikkoihin. Alla on neljä tapaa muuttaa aikavyöhykettä Oraclen käytössä.
Aseta tietokannan Aikavyöhyke
voit asettaa tietokannan aikavyöhykkeen luotaessa tietokantaa. Tätä varten käytetään CREATE DATABASE
lausekkeen SET TIME_ZONE
lauseketta.
esimerkki:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
tässä tapauksessa käytin aikavyöhykkeen alueen nimeä. Katso kuinka palauttaa luettelo kelvollisista aikavyöhykkeistä Oraclen tietokannassa saadaksesi täydellisen luettelon kelvollisista aluenimistä järjestelmässäsi.
Vaihtoehtoisesti voit käyttää todellista aikavyöhykkeen siirtymää:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
jos et nimenomaisesti aseta aikavyöhykettä luodessasi tietokantaa, se oletusarvoisesti siirtyy palvelimen käyttöjärjestelmän aikavyöhykkeelle.
voit myös muuttaa tietokannan nykyistä aikavyöhykeasetusta. Voit tehdä tämän käyttämällä ALTER DATABASE
lausetta.
esimerkki:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
huomaa, että tietokannan aikavyöhyke on merkityksellinen vain TIMESTAMP WITH LOCAL TIME ZONE
sarakkeiden osalta. Myös Oracle suosittelee, että asetat tietokannan aikavyöhykkeen UTC (0:00) tietojen muuntamisen välttämiseksi ja suorituskyvyn parantamiseksi, kun tietoja siirretään tietokantojen välillä.
Aseta istunnon Aikavyöhyke
voit asettaa istunnon aikavyöhykkeen itsenäisesti tietokannan aikavyöhykkeelle. Kun palautat TIMESTAMP WITH LOCAL TIME ZONE
tiedot, ne palautetaan nykyisen istunnon aikavyöhykkeellä.
istunnon aikavyöhyke tulee voimaan myös silloin, kun TIMESTAMP
arvo muunnetaan TIMESTAMP WITH TIME ZONE
tai TIMESTAMP WITH LOCAL TIME ZONE
tietotyypiksi.
voit tehdä pari asiaa aikavyöhykkeen asettamiseksi sessiotasolle.
ORA_SDTZ-ympäristömuuttujan
voit asettaa istunnon aikavyöhykkeen ORA_SDTZ
ympäristömuuttujan avulla. Tämä voidaan asettaa seuraaville arvoille:
- käyttöjärjestelmä paikallinen aikavyöhyke (
'OS_TZ'
) - tietokannan aikavyöhyke (
'DB_TZ'
) - absoluuttinen poikkeama UTC: stä (esim.
'-04:00'
) - aikavyöhykkeen Alueen nimi (esim.
'America/St_Kitts'
)
Tässä muutamia esimerkkejä tämän ympäristömuuttujan asettamisesta UNIX-ympäristöön:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
muuttujan ORA_SDTZ
oletusarvo on 'OD_TZ'
. Tätä arvoa käytetään, kun muuttujaa ei ole asetettu tai se on asetettu virheelliseksi arvoksi.
ALTER SESSION Statement
voit muuttaa tietyn SQL-istunnon aikavyöhykettä SET TIME_ZONE
lausekkeella ALTER SESSION
lausekkeessa.
TIME_ZONE
voidaan asettaa seuraavia arvoja:
- paikallinen Aikavyöhyke, kun istunto aloitettiin (
local
) - tietokannan aikavyöhyke (
dbtimezone
) - absoluuttinen poikkeama UTC: stä (esim.
'-04:00'
) - aikavyöhykkeen Alueen nimi (esim.
'Canada/Eastern'
)
tässä esimerkki TIME_ZONE
asettamisesta tällaisille arvoille:
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';
voit tarkistaa nykyisen istuntosi aikavyöhykkeen funktiolla SESSIONTIMEZONE
.
esimerkki:
SELECT SESSIONTIMEZONE FROM DUAL;
tulos:
Australia/Brisbane
minun tapauksessani istunnon aikavyöhyke on asetettu Australia / Brisbane.
aikavyöhykkeen lauseke
aikavyöhykkeen lauseke voi sisältää AT LOCAL
lausekkeen tai AT TIME ZONE
lausekkeen. Jos sisällytät AT LOCAL
– lausekkeen, tulos palautetaan nykyisen istunnon aikavyöhykkeellä. Jos mukaan lasketaan AT TIME ZONE
lauseke, aikavyöhyke voi olla jokin seuraavista:
- aikavyöhykkeen Siirtymä
- aikavyöhykkeen Alueen nimi
-
DBTIMEZONE
(tämä funktio palauttaa tietokannan aikavyöhykkeen) -
SESSIONTIMEZONE
(tämä funktio palauttaa nykyisen istunnon aikavyöhykkeen) - lauseke, joka palauttaa merkkijonon, jolla on voimassa oleva aikavyöhykemuoto.
esimerkki:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
tulos:
02/JAN/30 04:30:35.000000000 AM +12:00
tässä tapauksessa käytin FROM_TZ()
funktiota muuttaakseni aikaleiman arvon ja aikavyöhykkeen arvoksi TIMESTAMP WITH TIME ZONE
. Tämän jälkeen käytin AT TIME ZONE
– lauseketta määrittääkseni eri aikavyöhykkeen.
tässä on sama esimerkki, paitsi tällä kertaa täsmennän AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
tulos:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE