Oracle
自應用伺服器以來連接數據庫時的不同時間 sysdate 和 current_date
我對 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 才能使更改生效。對於其他更改,數據庫重新啟動就足夠了。