Oracle 11g RAC 遠程登入資料庫時間和OS時間相差16小時解決方案
幫同事安裝Oracle 11.2.0.4的RAC資料庫用於項目壓力測試,作業系統為red flag server 3版本。
今天同事突然來電話說資料庫時間和os時間相差16個小時,遇到的問題是,2個節點從本地登陸,查看sysdate和os時間一致,但是遠程登陸其他節點,資料庫時間和os時間相差16個小時,馬上懷疑是資料庫時區有問題。
經查,資料庫時區確實不是東八區,然後停掉應用程式,著手修改資料庫時區。
alter database set time_zone='+8:00';
然後重新啟動執行個體,重新查詢,資料庫時區已經修改,但遠程登陸其他節點,資料庫時間和os時間依然相差16小時。
然後執行以下SQL:
select systimezone from dual;
發現顯示的時區為 “-8:00”,為西八區,到這裡,問題終於知道出在哪裡了。
應該是安裝資料庫時沒有選擇好正確的時區,導致資料庫時間和os時間相差了16個小時,回想當時安裝時選擇的是“一般事物用途”,在設定資料庫參數的時候沒過過多關注資料庫時區的問題,才出現這種錯誤。
那怎麼解決呢,多方尋找,用以下命令解決:
srvctl setenv database -d <dbname> -t TZ=EAT-8
之後重啟資料庫執行個體,再次遠程登陸其他節點,資料庫時間和os時間已經一致,到此,問題已經解決。同時希望大家不要犯這種類似的錯誤。
下面摘錄網上的一些資料庫時區相關的解釋,以備參考
Dates & Calendars - Frequently AskedQuestions [ID 227334.1]
Why is my SYSDATE time not the same as my system clock on Unix? Sysdate is just a system call to the OS to get the time (a "gettimeofday" call).
Sysdate does NOT use timezones in the database (select dbtimezone, sessiontimezone from dual . But OS (unix level) TZ settings DO alter the time that the OS will pass on to Oracle.
To debug:
telnet to the unix box and connect using sqlplus in the telnet session:
1) once trought the listener using a tnsnames alias
select to_char(sysdate,'DD-MON-YY HH24:MI:SS') from dual;
2) once trough a "local" ORACLE_SID connection
select to_char(sysdate,'DD-MON-YY HH24:MI:SS') from dual;
if the result is different then it means that the listener is started with a different TZ
then you current user env ->; stop and start listener with the TZ you want .
If you are using RAC then use 'srvctl setenv database -d <dbname>; -t TZ=<the TZ you want>;' to define the correct TZ.
Oracle 11g RAC 本地時間和通過listener連線時間不相同的問題