בעיה מוזרה של תזמוני AWR (וגם איך מבצעים שינוי Timezone ב-RAC)

לאחרונה נתקלתי אצל לקוח בתופעה מוזרה – למרות ששרתי הלקוח היו בארצות הברית, הזמנים שנרשמו על דגימות ה-AWR הופיעו עם שעות של ישראל. באופן עקרוני לא אמורה להיות בעיה עם כזה דבר (לפעמים זה אפילו דיי נוח) אבל כשמתחילים להשתמש ב-ASH אז "לפני שעתיים" מוגדר אצלו לפי אזור הזמן המקומי (שהוא לוס אנג'לס) ולא לפי זה שמתחשב בדגימה (שהוא ישראל).
כשעשינו דגימה ידנית, אז הדגימה נכנסה עם השעה של המשתמש המקומי (לוס אנג'לס) ואחר כך חזרה לדגימות לפי שעון ישראל:

instance 1:
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ ----
8346 17 Mar 2014 17:00 1
8347 17 Mar 2014 08:07 1
8348 17 Mar 2014 17:30 1

instance 2:
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ ----
8346 17 Mar 2014 17:00 1
8347 17 Mar 2014 17:07 1
8348 17 Mar 2014 17:30 1

מה שיותר בלבל את העניינים היה שמדובר היה ב-RAC כך שהזמן של הדגימה בשני השרתים לא היה אותו הדבר!

התחלנו לחפש מה הבעיה – דבר ראשון בדקנו את ה-TZ בשרת ה-DB:

SQL> select systimestamp, sessiontimezone from dual;

SYSTIMESTAMP                          SESSIONTIMEZONE
------------------------------------- -------------------------------------
17-MAR-14 07.27.07.367558 AM -07:00   -07:00

ואז את הזמן בשרת הלינוקס:

[root@rac-node-1]# hwclock
Tue 17 Mar 2014 07:29:47 AM PDT  -0.342614 seconds
[root@rac-node-1]# date
Tue Mar 17 07:29:55 PDT 2014
[root@rac-node-1]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 39 Jul 29  2013 /etc/localtime -> /usr/share/zoneinfo/America/Los_Angeles

אבל הכל נראה תקין.
חשבנו אולי זה מגיע מהגדרות לא נכונות של ה-dbms_scheduler – אבל גם שם זה היה תקין:

SQL> select DBMS_SCHEDULER.STIME from dual;

STIME
---------------------------------------------------------------------------
17-MAR-14 07.36.44.971988000 AM PST8PDT

בסוף נמצאה האבדה: מסתבר שה-AWR עובד לפי ההגדרות של ה-Timezone של המשתמש שהפעיל את ה-DB. במקרה שלנו מדובר הגדרה של TZ=Asia/Jerusalem (שורה 8):

[oracle@rac-node-1]$ ps efx|grep pmon
22026 ?        Ss     0:13 ora_pmon_ORCL1 __CLSAGFW_TYPE_NAME=ora.listener.type CONSOLE=/dev/console SELINUX_INIT=YES ORA_CRS_HOME=/oracle/app/11.2.0/grid TERM=linux __CRSD_CONNECT_STR=(ADDRESS=
(PROTOCOL=IPC)(KEY=CRSD_IPC_SOCKET_11)) NLS_LANG=AMERICAN_AMERICA.AL32UTF8 CRF_HOME=/oracle/app/11.2.0/grid GIPCD_PASSTHROUGH=false 
ORA_DAEMON_TRACING_LEVELS=AGENT=0,AGFW=0,CLSFRAME=0,CLSVER=0,CLUCLS=0,COMMCRS=0,COMMNS=0,CRSAPP=0,CRSCCL=0,CRSCEVT=0,CRSCOMM=0,CRSD=0,CRSEVT=0,CRSMAIN=0,CRSOCR=0,CRSPE=0,CRSPLACE=0,CRSRES=0,CRSRP
T=0,CRSRTI=0,CRSSE=0,CRSSEC=0,CRSTIMER=0,CRSUI=0,CSSCLNT=0,SuiteTes=0,UiServer=0,OCRAPI=1,OCRCLI=1,OCRSRV=1,OCRMAS=1,OCRMSG=1,OCRCAC=1,OCRRAW=1,OCRUTL=1,OCROSD=1,OCRASM=1 
__CRSD_AGENT_NAME=/oracle/app/11.2.0/grid/bin/oraagent_oracle _ORA_AGENT_ACTION=TRUE __CRSD_MSG_FRAME_VERSION=2 LD_LIBRARY_PATH= INIT_VERSION=sysvinit-2.86 __CLSAGENT_INCARNATION=2 
CRS_LIMIT_MEMLOCK=unlimited ORASYM=/oracle/app/11.2.0/grid/bin/oraagent.bin PATH= runlevel=3 RUNLEVEL=3 PWD=/ ENV_FILE=/oracle/app/11.2.0/grid/crs/install/s_crsconfig_rac-node-1_env.txt 
CRS_LIMIT_OPENFILE=65536 LANG=en_US.UTF-8 TZ=Asia/Jerusalem __IS_HASD_AGENT= previous=N PREVLEVEL=N __CLSAGENT_LOG_NAME=ora.listener.type_oracle 
ORA_DAEMON_LOGGING_LEVELS=AGENT=1,AGFW=0,CLSFRAME=0,CLSVER=0,CLUCLS=0,COMMCRS=0,COMMNS=0,CRSAPP=0,CRSCCL=0,CRSCEVT=0,CRSCOMM=0,CRSD=0,CRSEVT=0,CRSMAIN=0,CRSOCR=0,CRSPE=0,CRSPLACE=0,CRSRES=0,CRSRP
T=0,CRSRTI=0,CRSSE=0,CRSSEC=0,CRSTIMER=0,CRSUI=0,CSSCLNT=0,SuiteTes=1,UiServer=0,OCRAPI=1,OCRCLI=1,OCRSRV=1,OCRMAS=1,OCRMSG=1,OCRCAC=1,OCRRAW=1,OCRUTL=1,OCROSD=1,OCRASM=1 SHLVL=2 HOME=/ 
__CLSAGENT_LOGDIR_NAME=crsd LD_ASSUME_KERNEL= CRS_LIMIT_CORE=unlimited __CLSAGENT_USER_NAME=oracle ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1 CRS_LIMIT_STACK=2048 ORACLE_SID=ORCL1 
ORA_NET2_DESC=60,63 ORACLE_SPAWNED_PROCESS=1 SKGP_SPAWN_DIAG_PRE_FORK_TS=1395533425 SKGP_SPAWN_DIAG_POST_FORK_TS=1395533425 SKGP_HIDDEN_ARGS=
<FATAL/S/PMON/x0/x1/x0/x9CC6FCFA/21632/21632/x0/x2/x1/x9CC6FD4A/1395533425/1395533425> 0 SKGP_SPAWN_DIAG_PRE_EXEC_TS=1395533425

אבל מאיפה מגיעה ההגדרה הזו? הרי המשתמש שמפעיל את ה-DB הוא oracle וההגדרות שלו תקינות…
התשובה מתחבאת בתוך השאלה – מכוון שבמקרה שלנו מדובר ב-cluster, ל-CRS יש קובץ הגדרות שבו ניתן להגדיר אזור זמן, TNS_ADMIN והגדרות אחרות של NLS. הקובץ הוא ""/oracle/app/11.2.0/grid/crs/install/s_crsconfig_rac-node-1_env.txt (או במיקום היותר גנרי שלו:
מי שיציץ בקוד למעלה יגלה שזה רשום בשורה 7.

$GRID_HOME/crs/install/s_crsconfig_`hostname -s`_env.txt

בתוך הקובץ שינינו את ההגדרה של ה-TZ ואיתחלנו את ה-RAC. הבעיה נפתרה.

0 תגובות

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

אתר זו עושה שימוש ב-Akismet כדי לסנן תגובות זבל. פרטים נוספים אודות איך המידע מהתגובה שלך יעובד.