בעיה מוזרה של תזמוני 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. הבעיה נפתרה.
השאירו תגובה
Want to join the discussion?Feel free to contribute!