Oracle

自應用伺服器以來連接數據庫時的不同時間 sysdate 和 current_date

  • July 3, 2022

我對 Oracle 在處理應用程序時給我的時間有疑問。

我目前從應用伺服器 (apx1) 連接到包含 Oracle 19c (bdx1) 的伺服器以進行數據庫操作。

應用程序伺服器和數據庫伺服器都在加那利群島,因此它必須顯示/工作當地時間(夏季 GMT +1,冬季 GMT)。

如果我在伺服器上啟動 date 命令,則時間顯示正確。

[oracle@apx1 oracle]$ date
vie jul  1 14:25:49 BST 2022
[oracle@bdx1 ~]$ date
vie jul  1 14:25:46 BST 2022

但是,在建立從 apx1 到 bdx1 的連接後,我得到了這個時間偏移量:

SQL> select systimestamp, current_timestamp, localtimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
LOCALTIMESTAMP
---------------------------------------------------------------------------
01/07/22 15:27:39,762772 +02:00
01/07/22 14:27:39,762775 +01:00
01/07/22 14:27:39,762775

我不知道我應該配置什麼來糾正這個偏移量。

由於伺服器本身的時間似乎是正確的,因此您啟動數據庫時看起來會覆蓋此設置。這通常是由TZ環境變數引起的。

確保從使用正確TZ值的會話/腳本啟動數據庫。

如果您手動或從腳本啟動數據庫,請檢查是否TZ在任何地方設置。如果是,請將其更改為正確的值:

export TZ=Atlantic/Canary

如果數據庫是通過 Grid Infrastructure 啟動的,請檢查是否設置了環境變數:

srvctl getenv database -db DBNAME
grep ^TZ ${GRID_HOME}/crs/install/s_crsconfig_$(hostname)_env.txt

如果需要改,改成:

srvctl setenv database -db DBNAME -env "TZ=Atlantic/Canary"

或者編輯上面的文本文件。

更改 GI env 文件後,需要重新啟動 GI 才能使更改生效。對於其他更改,數據庫重新啟動就足夠了。

引用自:https://dba.stackexchange.com/questions/313995