Point in time export

אחד מהחסרונות המרכזיים והפחות מוכרים של DataPump Export אל מול שיטות אחרות לגיבוי / ייצוא מידע מ-Oracle הוא ש-DataPump, כברירת מחדל, לא מבצע גיבוי Point-in-time אלא עובד סדרתית. כלומר – קובץ ה-export שנוצר, המכיל ברוב המקרים מספר טבלאות, אינו “מסונכרן” לנקודת זמן מסוימת לפי בחירת המשתמש – האובייקטים בקובץ ה-export אינם בהיכרך מכילים מידע מאותה נקודה בזמן בגלל האופי הסדרתי בוא מנגנון ה-export עובד.

איך אנחנו יכולים לבצע export בו כל המידע, בכל הטבלאות, נכון לנקודת זמן ספציפית – נקודת זמן אותה אנחנו בוחרים מראש? מאוד פשוט -  באמצעות שימוש ב–SCN של ה-DB כפרמטר לפקודת ה-DataPump.

SCN  או System Change Number, הוא מונה סדרתי של Oracle המתקדם בזמן ביצוע ה-commit ומיצג את השעון הפנימי בתוך בסיס הנתונים. ניתן להשתמש ב-SCN על מנת לוודא שכל המידע בכל הטבלאות בקובץ ה-export נכון לנקודת זמן ספציפית לפי בחירתנו שלנו.

לדוגמא, במידה ואנחנו מבצעים export לשתי טבלאות – EMP ו- DEPT ונרצה לוודא שהמידע בקובץ ה-export, עבור שתי הטבלאות, יהיה נכון לנקודת זמן ספציפית אותה נבחר (ולא שהמידע בקובץ ה-export, עבור כל טבלה יהיה מנקודת זמן אחרת לא ידועה), נצטרך לציין את ה-SCN בזמן ביצוע ה-export.

כאן בא לעזרתנו פרמטר ה- FLASHBACK_SCN.

כאשר נשתמש ב-Flashback_SCN כפרמטר לפקודת ה-expdp, יצוא הנתונים יהיה consistent לאותו SCN שציינו. באמצעות שימוש בפרמטר זה מנגון ה-DataPump ישתמש ביכולת ה-FLASHBACK של ה-DB על מנת לייצא את כל הנתונים בקובץ ה-export ל-SCN ספציפי, לדוגמא:

1.      נשלוף את ערך ה-SCN הנוכחי של ה-DB:

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
777899890

2.      נשתמש בערך ה-SCN מהשליפה שלנו כפרמטר ל- DataPump, על מנת לבצע export שנכון ל- Point in time ספציפי -

expdp system/****@TESTDB userid=EMP schemas=EMP dumpfile=test.dmp content=all
FLASHBACK_SCN=777899890

מכיוון ששימוש בפרמטר הנ”ל משתמש ב- flashback query בכדי לשלוף את המידע, חשוב לוודא שקיים מספיק UNDO Retention בזמן ביצוע ה-Export .

בנוסף לשימוש ב-flashback_scn, ישנו פרמטר נוסף אך פחות מדויק בשם flashback_time. פרמטר זה מאפשר לנו לציין timestamp, במקום SCN, עבור ה-consistent export שלנו. ה-DB יתרגם את ה-timestamp שציינו אוטומטית ל-SCN הקרוב ביותר – ומכאן חוסר הדיוק היחסי אל מול שימוש ישיר בערך ה-SCN עצמו.