בקטע הזה מופיע מידע על:
- התנהגות של Datastream לגבי נתונים שנשלפים ממסד נתונים של Oracle
- הגרסאות של מסד הנתונים Oracle שנתמכות ב-Datastream
- סקירה כללית של אופן ההגדרה של מסד נתונים של Oracle כמקור, כדי שאפשר יהיה להזרים ממנו נתונים ליעד
- מגבלות ידועות על שימוש במסד נתונים של Oracle כמקור
התנהגות
Datastream תומך בשתי שיטות לחילוץ שינויים בנתונים מקובצי יומן Redo אונליין: קורא יומן בינארי של Oracle (Preview) ו-Oracle LogMiner.
בשיטה של קריאת יומן בינארי (גרסת Preview), נצפה ההתנהגות הבאה:
אם יש השהיה בקריאה כשמחלצים את השינויים מקובצי היומן אונליין, Datastream מחלץ את השינויים מקובצי יומן בארכיון.
השינויים שמתבצעים בזרם הנתונים משוכפלים ליעד רק אחרי שהם מאושרים. עסקאות שלא בוצעו או שבוטלו לא משוכפלות.
הקורא הבינארי תומך בשכפול של עמודות Oracle
VARCHAR2שארוכות מ-4,000 תווים.
בנוסף, Datastream תומך בתכונה Oracle LogMiner לחשיפת שינויים בנתונים. השיטה מתנהגת כך:
- אפשר לבחור את כל הסכימות או סכימות ספציפיות ממסד נתונים נתון, וגם את כל הטבלאות מהסכימות או טבלאות ספציפיות.
- כל הנתונים ההיסטוריים משוכפלים.
- כל השינויים בשפת הטיפול בנתונים (DML), כמו הוספות, עדכונים ומחיקות ממסדי הנתונים והטבלאות שצוינו, משוכפלים.
- Datastream משכפל את השינויים שבוצעו, ובמקרים מסוימים גם את השינויים שלא בוצעו, אל היעד. השינויים שלא בוצעו נקראים על ידי Datastream. במקרה של ביטול שינוי, רשומות הפלט של Datastream כוללות גם את הפעולה ההפוכה. לדוגמה, אם יש פעולת
INSERTשהמערכת ביטלה, רשומות הפלט יכללו גם פעולתDELETEתואמת. במקרה כזה, האירוע יופיע כאירועDELETEעם המאפייןROWIDבלבד.
מילוי חוסרים (backfill) מבוסס ROWID
ב-Oracle, ROWID היא עמודה וירטואלית שמאחסנת מזהים ייחודיים לשורות בטבלה. הערכים של ROWID משמשים את Datastream לפעולות מילוי חוסרים (backfill). לכן, מומלץ שלא לבצע פעולות שיכולות לשנות את הערכים של ROWID במסד הנתונים של Oracle במקור עד להשלמת פעולת המילוי החוזר.
הפעולות שיכולות לשנות את הערכים של ROWID כוללות:
העברה פיזית של שורות:
- פעולות ייצוא וייבוא: כשמייצאים טבלה ואז מייבאים אותה בחזרה, יכול להיות שהמיקום הפיזי של השורות ישתנה, וכתוצאה מכך יתקבלו ערכים חדשים של
ROWID. - הפקודה
ALTER TABLE (...) MOVE: העברה של טבלה למרחב טבלאות אחר יכולה לשנות את האחסון הפיזי ולהוביל לשינויים ב-ROWID. -
ALTER TABLE (...) SHRINK SPACEcommand: הפקודה הזו מכווצת את הטבלה, ועשויה להזיז שורות ולהשפיע על ערכיROWIDשלהן. - פעולות חלוקה: פיצול, מיזוג או העברה של מחיצות יכולים לשנות את המיקום הפיזי של השורות ואת הערכים של
ROWID.
- פעולות ייצוא וייבוא: כשמייצאים טבלה ואז מייבאים אותה בחזרה, יכול להיות שהמיקום הפיזי של השורות ישתנה, וכתוצאה מכך יתקבלו ערכים חדשים של
פעולות פלאשבק:
- פקודה
FLASHBACK TABLE: שחזור טבלה למצב קודם כולל מחיקה והוספה מחדש של שורות, ולכן יצירת ערכיROWIDחדשים. -
FLASHBACK_TRANSACTION_QUERY: דומה ל-FLASHBACK TABLE. ביטול של טרנזקציה יכול לגרום לשינויים ב-ROWIDאם שורות נמחקו או עודכנו במהלך הטרנזקציה.
- פקודה
פתרון בעיות בגיבוי של טבלת מחיצות ב-Oracle 11.2.0.4
אם מילוי חוזר של נתונים נכשל בטבלה עם חלוקה למחיצות ב-Oracle 11.2.0.4 עם שגיאת אחזור לא צפויה (index out of bounds), הסיבה לכך היא באג במטא-נתונים של Oracle, שבו שאילתות אל ALL_OBJECTS לא מחזירות מחיצות משנה.
- פתרון עקיף: מבטלים באופן זמני את ההרשאה
SELECT ON DBA_EXTENTSלמשתמש Datastream (למשל,REVOKE SELECT ON sys.dba_extents FROM USER_NAME;). כך מערכת Datastream נאלצת להשתמש במילוי חוסרים מבוסס-אינדקס, ועוקפת את הבעיה במטא-נתונים.
גרסאות
Datastream תומך בגרסאות הבאות של מסד הנתונים של Oracle:
- Oracle 11g, גרסה 11.2.0.4 (נתמכת רק בשיטת Logminer CDC)
- Oracle 12c, גרסה 12.1.0.2
- Oracle 12c, גרסה 12.2.0.1
- Oracle 18c
- Oracle 19c
- Oracle 21c
Datastream תומך בסוגים הבאים של מסדי נתונים של Oracle:
- אירוח עצמי בארגון או אצל ספק שירותי ענן כלשהו
- Amazon RDS ל-Oracle
- Oracle Cloud
- Oracle Exadata
- Oracle RAC
- מסד נתונים במצב המתנה של Oracle Active Data Guard
הגדרה
כדי להגדיר מסד נתונים של Oracle כמקור כך שניתן יהיה להזרים ממנו נתונים ליעד, צריך להגדיר את מסד הנתונים כך שתהיה גישה אליו, להגדיר רישום ביומן ולהגדיר מדיניות שמירת נתונים.
במאמר הגדרת מסד נתונים של Oracle כמקור מוסבר איך להגדיר את מסד הנתונים הזה כך ש-Datastream יוכל לשלוף ממנו נתונים ליעד.
שיטות מומלצות
בקטע הזה מתוארות שיטות מומלצות להגדרת מקור Oracle לשימוש ב-Datastream.
תלות באותיות רישיות בקורא בינארי
כשמגדירים מקור Oracle באמצעות שיטת ה-CDC של קורא בינארי ומציינים שמות של ספריות ליומני redo וארכיון, חשוב לדעת שהשמות תלויי אותיות רישיות. צריך לוודא שהאותיות בשמות הספריות שציינתם בפרופיל החיבור של Datastream זהות לאותיות בשמות הספריות במסד הנתונים של Oracle.
בו-זמניות (concurrency) של CDC
כדי למזער את השהיית השכפול, צריך לוודא ש-Datastream יכול לעבד את יומני ה-redo במהירות שבה מקור Oracle יוצר אותם. כשמשתמשים בשיטת ה-CDC של קורא הבינארי, המקביליות של Datastream היא ברמת קובץ יומן הפעולות החוזרות: כל משימה שמוגדרת על ידי maxConcurrentCdcTasks מעבדת קובץ אחד בכל פעם.
מומלץ להשתמש במתודולוגיה הבאה:
- כוונון בו-זמניות ב-Datastream: מזהים את המספר הממוצע של החלפות יומן Redo בשעות הפעילות של העסק ומגדירים את הפרמטר
maxConcurrentCdcTasksבהתאם. מידע נוסף זמין במאמר בנושא מספר מקסימלי של משימות CDC. - הגדרת החלפת יומנים ב-Oracle: מגדירים את Oracle להחלפת יומנים בתדירות גבוהה, למשל כל 10-20 דקות. כך נוצר זרם קבוע של יחידות עבודה קטנות יותר, שמאפשר למשימות המקבילות של Datastream לפעול במקביל בצורה יעילה.
מומלץ לבצע אופטימיזציה של ההגדרות כך שיהיו מספיק משימות בו-זמניות ב-Datastream כדי לטפל ביצירה התכופה של יומני שינויים קטנים יותר מ-Oracle. מידע נוסף על הגדרות של צפייה בו-זמנית בסטרימינג
מגבלות ידועות
המגבלות הידועות על שימוש במסד נתונים של Oracle כמקור כוללות:
- הזרמים מוגבלים ל-10,000 טבלאות. אם הסטרימינג כולל יותר מ-10,000 טבלאות, יכול להיות שיופיעו שגיאות.
- מקור הנתונים תומך בארכיטקטורת מולטי-טננט של Oracle (CDB/PDB), אבל אפשר לשכפל רק מסד נתונים אחד שניתן להוספה בזרם.
- אין תמיכה ב-Oracle Autonomous Database.
- בטבלאות שאין להן מפתח ראשי, Datastream משתמש ב-
ROWIDשל השורה כדי לבצע פעולת מיזוג בצד הצרכן. שימו לב: יכול להיות שהערך שלROWIDלא יהיה ייחודי. אם מוחקים שורה ומכניסים אותה מחדש באמצעות כלי הייצוא/הייבוא של Oracle, למשל, יכול להיות שערךROWIDשל השורה ישתנה. אם מוחקים שורה, מערכת Oracle יכולה להקצות מחדש אתROWIDשלה לשורה חדשה שנוספת מאוחר יותר. - אין תמיכה בטבלאות מאורגנות לפי אינדקס (IOT).
- אין תמיכה בטבלאות זמניות.
- סוגי הנתונים הבאים של Oracle לא נתמכים ולא משוכפלים. העמודות מהסוגים האלה משוכפלות כערכים
NULLביעד:ANYDATA,ANYDATASET,ANYTYPE-
VARRAY(Oracle Arrays) BFILE,BFILENAMEINTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTHLONG,LONG RAWUROWIDUDT- סוגי מדיה ומרחב:
ORDAUDIO,ORDDATASOURCE,ORDDICOM,ORDDOC,ORDIMAGE,ORDVIDEO,SDO_GEOMETRY(וכל שאר הסוגיםMDSYS.SDO_*).
כדי להזרים עמודות של סוגי נתונים של אובייקטים גדולים, כמו
XMLTYPE, אובייקטים בינאריים גדולים (BLOB), אובייקטים גדולים של תווים (CLOB) ואובייקטים גדולים של תווים לאומיים (NCLOB), צריך לכלול את הדגלstreamLargeObjectsבהגדרת הזרם. אם לא כוללים את הדגל, Datastream לא מעביר בסטרימינג עמודות כאלה והן מוחלפות בערכיםNULLביעד. למידע נוסף, ראו הפעלת סטרימינג של אובייקטים גדולים למקורות Oracle. כשמבצעים סטרימינג של סוגי הנתונים האלה, Datastream צריך להריץ שאילתה במסד הנתונים של המקור כדי לאחזר ערכי LOB חסרים בנקודת זמן מסוימת (בתהליך פעיל של חיפוש שנקרא השלמה). המצב הזה קורה בתרחישים הבאים:- כשמטען ייעודי (payload) של LOB שלא השתנה מושמט מיומן Redo במהלך
UPDATE - במהלך פעולות DML שכוללות סוגים של XML בינארי
- במהלך כל DML שנותח בטבלה שמכילה LOB אם הזרם משתמש בשיטת LogMiner
מכיוון ש-Datastream מעביר את העמודות האלה באמצעות שאילתות במסד הנתונים, יכול להיות ששינויים ביניים לא יתועדו בתרחישים שכוללים עדכונים מהירים אחד אחרי השני או מחיקה מהירה אחרי הוספה. חשוב לזכור שפעולות
DELETEלא מפעילות השלמה. המגבלה הזו רלוונטית במיוחד כשמשתמשים במצב כתיבה של הוספה בלבד, שבו המערכת מצפה לתעד את כל השינויים הזמניים.- כשמטען ייעודי (payload) של LOB שלא השתנה מושמט מיומן Redo במהלך
ב-Oracle 11g, לא נתמכות טבלאות עם עמודות של סוגי הנתונים
ANYDATAאוUDT, והטבלה כולה לא תשוכפל.Oracle Label Security (OLS) לא משוכפל.
הכלי Datastream מאחזר מעת לעת את הסכימה העדכנית מהמקור בזמן העיבוד של האירועים. אם סכימה משתנה, יכול להיות שחלק מהאירועים מהסכימה החדשה ייקראו בזמן שהסכימה הישנה עדיין מוחלת. במקרה כזה, Datastream מזהה את השינוי בסכימה, מפעיל אחזור של הסכימה ומעבד מחדש את האירועים שנכשלו.
לא כל השינויים בסכימת המקור ניתנים לזיהוי אוטומטי, ובמקרה כזה עלול להתרחש שיבוש בנתונים. שינויים בסכימה הבאה עלולים לגרום לפגם בנתונים או לכשל בעיבוד האירועים בהמשך:
- הסרת עמודות
- הוספת עמודות באמצע הטבלה
- שינוי סוג הנתונים של עמודה
- שינוי הסדר של העמודות
- מחיקת טבלאות (רלוונטי אם הטבלה זהה ואז נוצרת מחדש עם נתונים חדשים)
- חיתוך טבלאות
הכלי Datastream לא תומך בשכפול תצוגות.
Datastream תומך בתצוגות מהותיות. עם זאת, צפיות חדשות שנוצרו בזמן שהסטרימינג פועל לא מתעדכנות באופן אוטומטי.
כשמשתמשים בשיטה Oracle LogMiner, לא ניתן להשתמש בהצהרות
SAVEPOINT, והן עלולות לגרום לחוסר התאמה בנתונים במקרה של ביטול שינויים.כשמשתמשים בשיטה של קריאת קובץ בינארי, אין תמיכה בטבלאות עם חלוקה דינמית למחיצות.
כשמשתמשים בשיטת Oracle LogMiner, Datastream לא תומך בשכפול של טבלאות ועמודות ששמותיהן ארוכים מ-30 תווים.
Datastream תומך בקידודים הבאים של ערכות תווים למסדי נתונים של Oracle:
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
Datastream לא תומך בשכפול של ערכי תאריך אפס. התאריכים האלה מוחלפים בערכים
NULL.Datastream לא תומך בקישוריות ישירה למסדי נתונים באמצעות התכונה Single Client Access Name (SCAN) בסביבות Oracle Real Application Clusters (RAC). מידע על פתרונות אפשריים מופיע במאמר התנהגות ומגבלות של מקור Oracle.
אם המקור הוא מסד נתונים של Oracle Active Data Guard במצב המתנה, Datastream לא תומך בשכפול של נתונים מוצפנים.
מגבלות נוספות כשמשתמשים בקורא הבינארי
השיטה של קורא בינארי עם ביצועים גבוהים נתמכת רק ב-Oracle 12c ובגרסאות מתקדמות יותר. ב-Oracle 11g ובגרסאות קודמות, צריך להשתמש ב-LogMiner.
הכלי לקריאת קבצים בינאריים לא תומך בתכונות הבאות:
- הצפנת מסד נתונים שקופה (TDE)
- Hybrid Columnar Compression
- קבצים מאובטחים
- אין תמיכה ב-ASM למקורות של Amazon RDS.
- שיטת ה-CDC של קורא הבינארי לא תומכת ב-Oracle 11g ובגרסאות קודמות.
המאמרים הבאים
- איך מגדירים מקור Oracle לשימוש עם Datastream