1. 程式人生 > >操作系統的時區設置會影響數據庫查詢SYSDATE和SYSTIMESTAMP的值

操作系統的時區設置會影響數據庫查詢SYSDATE和SYSTIMESTAMP的值

servers scheme rgb 先來 alert depend fig 寫入 win

SYSDATE和SYSTIMESTAMP的值並不受數據庫參數DBTIMEZONE的影響,操作系統時區的環境變量(如TZ)會影響它們的輸入,由於SYSDATE和SYSTIMESTAMP實際是調用操作系統底層接口直接返回值。

DBTIMEZONE的設置僅僅會影響數據庫內兩種數據類型的值:一種是TimeStamp with Time Zone,還有一種是TimeStamp with Local Time Zone。

操作系統層面TZ環境變量的設置直接影響sysdate和systiestamp的值,同一時候也會影響數據庫日誌寫入的時間戳。

先來下面一段官方相關解釋:

SYSTIMESTAMP is the timestamp on the server machine itself and is obtained on Unix platforms by calling " GetTimeOfDay " and on Windows by calling "GetSystemTime" to get the servers local time.

This means that SYSTIMESTAMP, just like SYSDATE depends on Unix platforms on the UNIX time configuration (= Unix TZ variable) for the Unix session when the database and listener where started.

The SYSDATE and SYSTIMESTAMP function simply performs a system-call to the Operating System to get the time (a "gettimeofday" call).

下面通過簡單的實驗來證明:

SQL> select to_char(sysdate,‘DD-MON-YY HH24:MI:SS‘) from dual;

TO_CHAR(SYSDATE,‘DD-MON-YYHH24:MI:SS‘)
------------------------------------------------------
17-OCT-14

11:51:25 <<<<<這裏輸出日期為17號

SQL> connect [email protected] as sysdba
Connected.
SQL> select to_char(sysdate,‘DD-MON-YY HH24:MI:SS‘) from dual;

TO_CHAR(SYSDATE,‘DD-MON-YYHH24:MI:SS‘)
------------------------------------------------------
17-OCT-14 11:51:33

SQL> !
[[email protected] ~]$ date
Fri Oct 17 11:51:38 CST 2014 <<<<<這裏輸出日期為17號

以上輸出正常的時間,接下來改動時區環境變量之後做對照

export TZ=America/Anchorage

SQL> select to_char(sysdate,‘DD-MON-YY HH24:MI:SS‘) from dual;

TO_CHAR(SYSDATE,‘DD-MON-YYHH24:MI:SS‘)
------------------------------------------------------
16-OCT-14 19:53:50 <<<<<這裏輸出日期為16號

SQL> connect [email protected] as sysdba
Connected.
SQL> select to_char(sysdate,‘DD-MON-YY HH24:MI:SS‘) from dual;

TO_CHAR(SYSDATE,‘DD-MON-YYHH24:MI:SS‘)
------------------------------------------------------
16-OCT-14 19:53:58

SQL> !
[[email protected] ~]$ date
Thu Oct 16 19:54:06 AKDT 2014 <<<<<這裏輸出日期為16號

查看數據庫alert日誌:

Fri Oct 17 11:51:57 CST 2014 <<<停庫日期為17號
ALTER DATABASE DISMOUNT
Completed: ALTER DATABASE DISMOUNT
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Archive process shutdown avoided: 0 active
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Archive process shutdown avoided: 0 active
Thu Oct 16 19:53:32 AKDT 2014 <<<啟庫日期為16號
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 3

結合以上實驗做闡述,請一定正常設置操作系統環境變量,避免不必要的麻煩。

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

本文來自於我的技術博客 http://blog.csdn.net/robo23

轉載請標註源文鏈接,否則追究法律責任!

操作系統的時區設置會影響數據庫查詢SYSDATE和SYSTIMESTAMP的值