פיצ'ר חדש: עמודת Identity

עוד אחד מהפיצ'רים האלה שאנחנו מיישמים בצורה ידנית עד שבאים אורקל ופותרים לנו את הבעיה בהינף פקודה אחת…

עד גרסה 12, אם היינו רוצים עמודה שתקבל ערכים בצורה עצמאית (לדוגמה מספר רץ למספר הזמנה או משהו דומה) היינו צריכים לבוא וליישם את זה בעצמנו. היינו צריכים להגדיר sequence, היינו צריכים להגדיר trigger שידאג לטפל בטבלה או שהיינו מגדירים קוד חיצוני שיטפל בהכנסת ערכים לעמודה (פונקצית הכנסה לטבלה וכו').

החלק מגרסה 12 נוסף פיצ'ר נחמד שמטפל בכל הדברים האלה בעצמו.

המשך קריאה…

כמה מילים על אינדקסים ועל Reverse Key Index

בפוסט הקודם שלי כתבתי על יצירה במקביל של אינדקסים על אותן עמודות וציינתי בין היתר שניתן ליצור את האינדקסים רק אם משנים חלק ממאפייני הרקע שלהם. כדוגמה נתתי את Reverse Key Index ונשאלתי במה מדובר.

מכוון שהאינדקס הזה נמצא איתנו כבר לא מעט זמן (אורקל 8 אם אני זוכר נכון) הוא עדיין לא מאוד נפוץ והרגשתי שזה יהיה מעניין לכתוב קצת על אינדקסים באופן כללי ועל האינדקס הזה בפרט.
המשך קריאה…

פיצ'ר חדש: המרה של אינדקסים באורקל 12c

לאחרונה התעורר אצל לקוח צורך לעשות הסבה של אינדקס על טבלה עם פרטישנים מפורמט של אינדקס אחד גלובלי (כזה שיש אחד לטבלה והוא מצביע למידע בכל הפרטישנים) לפורמט של אינדקס מקומי (מבנה אינדקס לכל אחד מהפרטישנים בנפרד).

הבעיה עם הפעילות הייתה שהאינדקס החדש שרצינו ליצור הכיל את אותן עמודות של האינדקס הקודם. זה אמר שאם רצינו ליצור אינדקס נוסף, לא יכולנו – אורקל מניח (ובצדק) שאין משמעות לשני אינדקסים על אותן עמודות ובאותו סדר ולא מאפשר את זה (ORA-1408).

מה שהיינו צריכים לעשות בפועל זה לזרוק את האינדקס הישן וליצור את האינדקס החדש במקומו. הדבר הזה אמר לחיות כמה שעות בלי אינדקס על העמודות המרכזיות של הטבלה עד שהאינדקס יבנה מחדש ובעצם לפגוע משמעותית בצורה שבה האפליקציה עבדה. מה שיותר מסוכן בסיפור הזה הוא שלמרות הצורך שהתעורר, לא היינו בטוחים שהשינוי הזה בכלל יעזור לאפליקציה…

אז מה עושים?
המשך קריאה…

בעיה מוזרה של תזמוני 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 כך שהזמן של הדגימה בשני השרתים לא היה אותו הדבר!
המשך קריאה…

שינוי קבצי redo log בסביבה של data guard

לא מזמן הייתי אצל לקוח שהיה צריך לשנות את גודל קבצי ה-Redo Logs שלו בסביבה שבה היו מספר בסיסי נתונים של data guard.
שינוי גודל קבצי ה-redo log לא אמורה להיות בעיה קשה או מסובכת במיוחד אבל כאשר מוסיפים את האלמנט של Data Guard אחד (או יותר) זה הופך להיות קצת יותר מאתגר.
אז איך מבצעים את הפעילות?

המשך קריאה…

הזזת קבצי datafile ב-online בגרסה Oracle 12c

לא מעט תכונות חדשות באורקל 12 גרמו לי להשמיע גרגורי עונג אבל הפיצ'ר הזה פשוט גרם לי להתפלא מה לקח להם כל כך הרבה זמן.
עד אורקל 12, כשרצינו להזיז קובץ של datafile ממקום למקום היינו צריכים לבצע את הפעולות הבאות (שהכריחו אותנו, בן היתר, להשבית בצורה חלקית את ה-tablespace):

  1. להעביר את ה-tablespace ל-offline.
  2. להעתיק או להעביר את הקובץ למיקום החדש באמצעות מערכת ההפעלה.
  3. לשנות את ההגדרה של ה-data file ב-control file:
  4. Alter database datafile '/old/datafile.dbf' rename to '/new/datafile.dbf';
    
  5. להחזיר את ה-tablespace למצב של online.

החל מגרסה 12, הפעולה של הזזת קובץ datafile יכולה להתבצע ב-online ללא השבתה של ה-tablespace.
המשך קריאה…