客戶生產數據庫服務器重啟后,本地時間和通過listener連接時間不相同的問題,比我們實際時間要慢13個小時。
背景
客戶生產數據庫服務器重啟后,本地時間和通過listener連接時間不相同的問題,比我們實際時間要慢13個小時。
操作系統版本:AIX 6.1
數據庫版本
Oracle 11.2.0.2 RAC
問題描述和診斷過程
1.使用本地直接登陸和在本地通過listener查詢時間相差13個小時,初步定位為時區問題
bash-2.05b$ sqlplus "/as sysdba"
SQL> select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2012-03-27 15:17:52
bash-2.05b$ sqlplus test/testaa@spprod
SQL> selectto_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2012-03-27 02:18:50
SQL>
2.根據上面推論,查看操作系統時區和數據庫時區,發現時區都一致,都是正8區,說明操作系統時區或者數據庫設置沒有問題,這時候推斷可能是listener有問題或者是sysdate遠程取值有問題
bash-2.05b$ echo $TZ
Asia/Shanghai
bash-2.05b$
查看數據庫時區
SQL> select dbtimezone from dual;
DBTIMEZONE
------------
+08:00
3.根據上面推斷可能是listener有問題或者sysdate取值有問題,我們先看一下sysdate的取值的原理,,根據metalink [ID 227334.1],SYSDATE和 SYSTIMESTAMP只是簡單調用操作系統去取得時間,也就是說sysdate的取值來源于操作系統,oracle不會對sysdate的值進行處理,sysdate沒有問題
4. sysdate問題排除,那就是listener的問題了,繼續往下看,發現這這篇文檔中也提到,操作系統時間和通過listener時間不一致的情況,出現這種情況可能是數據庫啟動時的時區和現在操作系統的時間不一致導致的,需要重啟數據庫和listener,在另一篇文檔中[ID 301420.1]也說是這種情況導致的,解決方案也是重啟數據庫和listener
5.由于是RAC環境,打算一個節一個節點的重啟,于是把兩個節點的實例和CRS一個一個的進行重啟
停節點2實例
bash-2.05b$ srvctl stop instance -d spprod -i spprod2
切換到root用戶下面停CRS
bash-2.05b# /sporacle/11202/grid/bin/crsctl stop crs
上面crs啟來之后再把實例啟來,接下來我們重復上面操作,重啟第一個節點
停實例1
bash-2.05b$ srvctl stop instance -d spprod -i spprod1
切換到root用戶停CRS
bash-2.05b# /sporacle/11202/grid/bin/crsctl stop crs
6.重啟之后發現和原來一樣,說明不是這個問題,是不是和grid用戶下管理ASM的實例時區也有關系呢?兩個節點grid下面實例時區都是’+00.00’,于是查詢公司另外的11G RAC環境,發現其它環境也一樣,但是其它環境沒有這個問題,基本可以排除這個問題
7.問題還沒有解決,只能繼續查了,最后找到了下面這篇文檔How To Change Timezone for 11gR2Grid Infrastructure [ID 1209444.1],文檔上面說在oracle 11.2.0.1 grid直接讀取操作系統時區,在oracle 11.2.0.2 grid的時區放在$GRID_HOME/crs/install/s_crsconfig_
8.根據文檔查看s_crsconfig_
bash-2.05b# more s_crsconfig_spdb1_env.txt
### This file can be used to modify the NLS_LANG environment variable,which determines the charset to be used for messages.
### For example, a new charset can be configured by settingNLS_LANG=JAPANESE_JAPAN.UTF8
### Do not modify this file except to change NLS_LANG, or under thedirection of Oracle Support Services
TZ=CST6CDT
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
RT_GRQ=ON
TNS_ADMIN=
ORACLE_BASE=
修改s_crsconfig_spdb1_env.txt的TZ=Asia/Shanghai (別忘記兩個節點都需要修改)
9.修改好之后重啟database和CRS,問題解決
10.總結
估計為安裝oracleCRS的時候操作系統時區為CST6CDT,安裝之后有人修改過操作系統時區和數據庫時區。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com