現(xiàn)象:
數(shù)據(jù)庫兩節(jié)點中:select sysdate from dual;
返回時間比OS date時間晚了13小時
select current_date from dual;
select current_timestamp from dual;
均無誤,與OS date時間一致
OS執(zhí)行date返回時間和時區(qū)均無誤
date
Mon Nov 2 14:16:41 CST 2015
查看時區(qū)配置,發(fā)現(xiàn)1節(jié)點OS配置文件的時區(qū)是錯的,2節(jié)點正常
cat /etc/sysconfig/clock
ZONE="America/New_York"
查看$GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt,發(fā)現(xiàn)grid讀取操作系統(tǒng)的時區(qū)也是錯的
# cat /u01/app/11.2.0/grid/crs/install/s_crsconfig_******1_env.txt
TZ=America/New_York
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
查看當(dāng)前l(fā)istener的時區(qū)
ps -ef|grep tns
cat oracle 31919 1 0 14:17 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
cat /proc/31919/environ
其中LZ值為
TZ=America/New_York
原因:
文檔How To Change Timezone for 11gR2Grid Infrastructure [ID 1209444.1]指出:
Once OS default timezone is changed, make sure:
- For 11.2.0.1, shell environment variable TZ is set correctly for grid user and root.
- For 11.2.0.2 and above, TZ entry in $GRID_HOME/crs/install/s_crsconfig__env.txt sets to correct time zone.
grid直接讀取操作系統(tǒng)時區(qū),grid的時區(qū)配置文件放在$GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt這個文件中,OS修改時區(qū)后需要調(diào)整該配置文件到正確的時區(qū)
可能情況:
最初在OS安裝時時區(qū)配置錯誤。
后期DBA在修改時區(qū)時,只通過cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime覆蓋,所以使用date命令查詢時區(qū)是正確的。
安裝oracleCRS的時候是在1節(jié)點,DB從操作系統(tǒng)時區(qū)配置文件/etc/sysconfig/clock 讀取到錯誤的時區(qū)配置America/New_York,導(dǎo)致grid的時區(qū)配置文件中的時區(qū)配置也是錯誤的。
解決步驟:
修改集群所有節(jié)點grid的時區(qū)配置文件
$GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt
#TZ=America/New_York
TZ=Asia/Shanghai
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
重啟所有節(jié)點集群。
查詢時間恢復(fù)正常。