הפניה לבעיות בהמרות ולדפוסים

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

מסך הסקירה הכללית של סביבת העבודה להמרת מסדי נתונים, שבו מוצגות קבוצות וקטגוריות של בעיות בהמרה.
איור 1. מסך הסקירה הכללית של סביבת העבודה להמרת מסדי נתונים, עם קטגוריות וקבוצות של בעיות בהמרה.
מסך הסקירה הכללית של סביבת העבודה להמרת מסדי נתונים, שבו מוצגות קבוצות וקטגוריות של בעיות בהמרה.

בטבלה הבאה מפורטות כל קבוצות הבעיות בהמרה שאתם יכולים להיתקל בהן במהלך המרת הסכימה:

מזהה קבוצת הבעיות תיאור

קוד מקור לא תקין

סיבה אפשרית לבעיה

שגיאות בקבוצה הזו קורות בדרך כלל כש-Database Migration Service נתקל בתחביר לא מוכר, או כשקוד המקור של Oracle לא תקין (לדוגמה, חסרה מילת המפתח END; בפרוצדורה מאוחסנת).

השבתה זמנית אפשרית של אותות אכיפה

מתקנים את האובייקטים הלא תקינים במסד הנתונים של Oracle במקור. אחר כך מרעננים את תמונת המצב של סכימת המקור ב-Database Migration Service ומנסים שוב להמיר את הסכימה. לחלופין, אפשר להחריג את האובייקט מההעברה.

חסרים אובייקטים שהפנו אליהם

סיבה אפשרית לבעיה

‫Database Migration Service משתמש במטא-נתונים של אובייקטים בעץ המקור כדי לשפר את איכות המרת הקוד של אובייקטים תלויים. אם הקוד מתייחס לאובייקטים שלא נכללים בסכימת המקור, יכול להיות שיהיו בעיות בהמרה כי Database Migration Service לא יכול לקבוע את המבנה או את סוגי הנתונים של העמודות, המאפיינים או האובייקטים החסרים שאליהם מתייחסים.

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

השבתה זמנית אפשרית של אותות אכיפה

צריך לוודא שכל האובייקטים שאליהם מפנים נוספו לעץ המקור של Database Migration Service, או לשנות ידנית את קוד ה-PostgreSQL בהתאם לידע שלכם על מודל נתוני המקור של יחסי התלות החסרים.

טבלאות בלי מפתח ראשי

סיבה אפשרית לבעיה

ב-Database Migration Service, לכל הטבלאות צריך להיות מפתח ראשי. בטבלאות בלי מפתחות ראשיים, Database Migration Service מוסיף עמודה מסוג NUMERIC בשם rowid לטבלת היעד ב-PostgreSQL. העמודה הזו מאוכלסת בערכים מספריים תואמים מהעמודה המדומה ROWID של Oracle במקור. כדי לוודא שהצהרות INSERT לא ייכשלו אחרי ההעברה, Database Migration Service יוצר רצף ומשתמש בו כדי להגדיל באופן אוטומטי את העמודה rowid.

השבתה זמנית אפשרית של אותות אכיפה

אחרי ההעברה, אפשר להשאיר או להסיר את העמודה rowid.

פונקציונליות מובנית של Oracle שלא נתמכת

סיבה אפשרית לבעיה

יכול להיות שאתם משתמשים בפונקציונליות מובנית של Oracle שלא נתמכת.

השבתה זמנית אפשרית של אותות אכיפה

צריך למצוא פונקציונליות דומה ב-PostgreSQL ולשנות את הקוד שהומר בהתאם. במקרים מסוימים, יכול להיות שהפונקציונליות החסרה תסופק על ידי תוסף Orafce, שזמין גם להעברות של Cloud SQL ל-PostgreSQL וגם להעברות של AlloyDB ל-PostgreSQL.

אין תמיכה ב-SQLCODE

סיבה אפשרית לבעיה

הפונקציה SQLCODE של Oracle לא נתמכת להמרה. הפונקציה SQLCODE מחזירה INTEGER, ואילו המקבילה הקרובה ביותר ב-PostgreSQL היא הפונקציה SQLSTATE שמחזירה ערכי TEXT.

השבתה זמנית אפשרית של אותות אכיפה

אם קוד המקור לא מסתמך על כך ש-SQLCODE מחזיר מספר שלם (לדוגמה, SQLCODE נרשם רק בעמודה VARCHAR2 או עם הודעת DBMS_OUTPUT), אפשר להשתמש ב-SQLSTATE בבטחה בקוד PostgreSQL.

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

פונקציית Oracle SQL לא נתמכת

סיבה אפשרית לבעיה

חלק מהפונקציות המובנות של Oracle לא נתמכות להמרה ב-Database Migration Service.

יכול להיות שלפונקציות מסוימות יש מקבילות ב-PostgreSQL (לדוגמה, ASCII), ולפונקציות אחרות יש שם זהה אבל מפרטים שונים (לדוגמה, פונקציות REGEXP%). יכול להיות שחלק מהפונקציות לא קיימות בכלל.

השבתה זמנית אפשרית של אותות אכיפה

בודקים איזו פונקציה של Oracle גרמה לשגיאה.

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

    • יוצרים פונקציה בהגדרת המשתמש (UDF) עם אותו שם במסד הנתונים של היעד.
    • מחליפים את הקריאה לפונקציה במקור בביטוי שווה ערך.
    • להשתמש בעזרה של Gemini בהמרות משופרות. מידע נוסף זמין במאמר המרת קוד וסכימה של SQL Server בעזרת Gemini.

    • יכול להיות שחלק מהפונקציות או התכונות של מסד הנתונים של Oracle ישוכפלו באמצעות תוספים, כמו Orafce. למידע נוסף על תוספים שנתמכים במסד הנתונים של היעד, ראו תוספים נתמכים של מסדי נתונים.

אין תמיכה מלאה בחבילות המובנות של Oracle

סיבה אפשרית לבעיה

‫Database Migration Service תומך בחבילות מובנות מסוימות של Oracle, אבל להרבה חבילות אין תמיכה מלאה בהמרה, למשל DBMS_STATS,‏ DBMS_UTILITY או DBMS_SQL.

השבתה זמנית אפשרית של אותות אכיפה

אם אתם משתמשים בחבילות שלא נתמכות, יכול להיות שתצטרכו:

  • משנים את הקוד. לדוגמה, במקום להשתמש ב-DBMS_STATS.GATHER_TABLE_STATS, אפשר להשתמש בפקודה פשוטה יותר כמו ANALYZE.

    יכול להיות שחבילות כמו UTL_FILE ו-DBMS_AQ ידרשו ארגון קוד מחדש, כי אי אפשר לשכפל אותן בקלות ב-PostgreSQL.

  • יכול להיות שחלק מהפונקציות או התכונות של מסד הנתונים של Oracle ישוכפלו באמצעות תוספים, כמו Orafce. למידע נוסף על תוספים שנתמכים במסד הנתונים של היעד, ראו תוספים נתמכים של מסדי נתונים.

סוג הנתונים של Oracle לא נתמך להמרה

סיבה אפשרית לבעיה

חלק מסוגי הנתונים של Oracle לא נתמכים כרגע בהמרה או בהעברת נתונים.

השבתה זמנית אפשרית של אותות אכיפה

ברוב המקרים, ל-PostgreSQL יש סוג נתונים מקביל. אתם יכולים להשתמש בקובצי מיפוי המרות כדי להתאים אישית את לוגיקת ההמרות ולהמיר את סוג הנתונים של Oracle שלא נתמך לסוג הנתונים הנדרש של PostgreSQL.

מידע נוסף על התמיכה בסוגי נתונים מופיע במאמר סקירה כללית על סביבות עבודה להמרת מסדי נתונים ואובייקטים נתמכים.

התנגשות בשמות

סיבה אפשרית לבעיה

הקבוצה הזו כוללת בעיות שבהן כמה אובייקטים של מסד נתונים (כמו טבלאות, תצוגות מהותיות) מומרים לשימוש באותו שם במסד הנתונים של היעד. לדוגמה, הבעיה הזו יכולה לקרות כשיש אובייקטים של מקור שהשמות שלהם שונים רק באותיות רישיות. שמות האובייקטים ב-Oracle לא תלויי אותיות רישיות, אבל ב-PostgreSQL הם כן תלויי אותיות רישיות, ולכן שמות האובייקטים מומרים לשימוש באותה מחרוזת.

השבתה זמנית אפשרית של אותות אכיפה

משנים את השם של האובייקטים המתנגשים ישירות במסד הנתונים של המקור, או בסכימה שהומרה בעורך של סביבת העבודה להמרת מסדי נתונים. אפשר גם להשתמש בקובץ מיפוי המרות עם ההנחיה RENAME_*.

התכונה של המקור לא נתמכת

סיבה אפשרית לבעיה

הקבוצה הזו כוללת את כל הבעיות הכלליות שקשורות לתכונות של Oracle שלא נתמכות בהמרה. הבעיות בקבוצה הזו לא שייכות לאף קבוצת בעיות אחרת, ספציפית יותר.

הפחתת סיכונים אפשרית

אין תמיכה בסוג האובייקט של הסכימה

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך בסוגים מסוימים של אובייקטים בסכימה של Oracle להמרת קוד, כי ל-PostgreSQL אין מקבילות מתאימות. דוגמאות: טבלאות מאורגנות לפי אינדקס (IOT), אינדקסים של חיפוש טקסט או גופים של סוגים בהגדרת המשתמש (UDT).

השבתה זמנית אפשרית של אותות אכיפה

‫Database Migration Service ממיר אובייקטים לא נתמכים לאובייקטים המקבילים הכי קרובים ב-PostgreSQL. לדוגמה, טבלאות IOT הופכות לטבלאות רגילות עם אילוץ של מפתח ראשי, ואינדקסים של חיפוש טקסט הופכים לאינדקסים של עץ B. חשוב לזכור שההמרות האלה עלולות לגרום לאובדן פונקציונליות שספציפית לסוג האובייקט המקורי.

התכונה PL/SQL לא נתמכת

סיבה אפשרית לבעיה

הקבוצה הזו כוללת את כל הבעיות הכלליות שקשורות לתכונות של PL/SQL שלא נתמכות בהמרה. הבעיות בקבוצה הזו לא שייכות לאף קבוצת בעיות אחרת, ספציפית יותר.

הפחתת סיכונים אפשרית

אין תמיכה בקישור בכמות גדולה

סיבה אפשרית לבעיה

המרת הקוד של Database Migration Service לא תומכת כרגע בתכונות של קישור בכמות גדולה של Oracle, כמו BULK COLLECT,‏ FORALL או SAVE EXCEPTIONS.

השבתה זמנית אפשרית של אותות אכיפה

כדי לפתור את הבעיה, צריך לשנות את הקוד שמשתמש בתכונות של קישור בכמות גדולה. כדאי להביא בחשבון את ההבדלים בארכיטקטורה של PostgreSQL ו-Oracle, ולבדוק אם עיבוד מערכים נחוץ ב-PostgreSQL לתרחיש לדוגמה שלכם.

יש כמה אסטרטגיות לביצוע פעולות של כריכה בכמות גדולה של Oracle ב-PostgreSQL. השימוש בהם תלוי בתרחיש הספציפי שלכם, ולכן מומלץ להשתמש ב סיוע מבוסס-Gemini להמרות כדי לטפל בצרכים הספציפיים שלכם. הנה כמה דוגמאות להמלצות נוספות שיעזרו לכם להתחיל:

  • כדי לקבל BULK COLLECT מלא (בלי LIMIT), אפשר לנסות להשתמש בפונקציה ARRAY_AGG.
  • ב-BULK COLLECT עם LIMIT, אפשר לנסות להשתמש ב-CURSOR FOR LOOP כדי לטעון ולעבד קבוצות של שורות במערכים. אבל אם אפשר לבצע שינויים פונקציונליים, חלופה פשוטה יותר היא להשתמש ב-CURSOR FOR LOOP כדי לעבד שורה אחת בכל פעם (במקום לטעון אותן למערכים).
  • בפעולות FORALL, אפשר לנסות DML מבוסס-קבוצה עם UNNEST אם בוחרים להשתמש בעיבוד מערכים.
  • ב-SAVE EXCEPTIONS, יכול להיות שתצטרכו לכתוב handler של חריגות בתוך CURSOR FOR LOOP שמבוסס על שורות, כי אין סעיף מקביל ב-PostgreSQL.

אין תמיכה באוספים

סיבה אפשרית לבעיה

המרת הקוד של Database Migration Service תומכת באופן חלקי באוספים של Oracle.

השבתה זמנית אפשרית של אותות אכיפה

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

‫PostgreSQL לא תומך במערכים עם אינדקסים של מחרוזות, אז בהתאם לאופי הנתונים, יכול להיות שתוספי JSON/JSONB או hstore יתאימו.

אין תמיכה בפונקציות בצינור עיבוד נתונים

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך בפונקציות צינור עיבוד נתונים.

השבתה זמנית אפשרית של אותות אכיפה

אפשר להחליף פונקציות צינור עיבוד נתונים של Oracle בפונקציות להחזרת קבוצות של PostgreSQL. מומלץ לשנות את הקוד בהתאם לתרחיש לדוגמה שלכם. הנה כמה דוגמאות שיעזרו לך להתחיל:

  1. מפנים לסוג PostgreSQL‏ (UDT) שמומר מסוג האובייקט או הרשומה של Oracle במקור, שמגדיר את סוג השורה של הפונקציה בצינור עיבוד הנתונים. לאחר מכן, משנים את סעיף ההחזרה של הפונקציה ב-PostgreSQL ל-RETURNS SETOF <type name> או ל-RETURNS TABLE, בהתאם למקרה הספציפי.

  2. מחליפים את ערך ההחזרה בקוד PIPE ROW שהומר ב-RETURN NEXT <row or record variable>.

סוג האוסף של פונקציית הצינור (pipeline) של המקור, שמשמש בסעיף RETURN של הפונקציה של Oracle, לא נדרש ב-PostgreSQL.

אין תמיכה ב-SQL דינמי

סיבה אפשרית לבעיה

‫Database Migration Service מספק תמיכה חלקית בהמרה של SQL דינמי. מילות המפתח EXECUTE IMMEDIATE,‏ OPEN FOR ו-USING/INTO של Oracle מומרות בצורה נכונה למקבילות שלהן ב-PostgreSQL, אבל מחרוזות ה-SQL, ה-DML או ה-DDL הדינמיות בפועל לא מומרות.

השבתה זמנית אפשרית של אותות אכיפה

צריך לשנות את הקוד שהומר כדי שיתאים לדרישות שלכם. מומלץ מאוד להשתמש ב כלי עזר להמרות מבוסס-Gemini כדי לטפל ב-SQL דינמי.

אין תמיכה באפשרות CONNECT BY

סיבה אפשרית לבעיה

רוב האופרטורים, הפונקציות והעמודות המדומות של CONNECT BY נתמכים ב-Database Migration Service ומומרים לביטויי טבלה נפוצים (CTE) רקורסיביים של PostgreSQL. אבל יש כמה חריגים שצריך לשים לב אליהם. לדוגמה, הסעיף ORDER SIBLINGS BY נתמך רק בסדר עולה.

השבתה זמנית אפשרית של אותות אכיפה

אי אפשר לשכפל את הסעיף ORDER SIBLINGS BY בסדר יורד בצורה פשוטה, לכן יכול להיות שתצטרכו לשנות את מבנה הקוד כדי שיעבוד בסדר עולה.

צריך לבדוק את הבעיות שדווחו לגבי אופרטורים של CONNECT BY, ולשנות את הקוד במקומות הרלוונטיים. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

אין תמיכה ב-JSON

סיבה אפשרית לבעיה

יש מגבלות מסוימות על האופן שבו Database Migration Service תומך ב-JSON להעברת נתונים ולהמרת קוד:

  • אין תמיכה ב-JSONB להעברת נתונים.
  • המרת הקוד לא תומכת בפונקציות או באופרטורים של שאילתות JSON ב-Oracle (כמו JSON_TABLE,‏ JSON_QUERY,‏ JSON_OBJECT[AGG],‏ JSON_ARRAYAGG,‏ JSON_PATCH).
  • בגרסאות של Oracle שקודמות ל-21c, אפשר לאחסן נתוני JSON בעמודות VARCHAR2,‏ CLOB או BLOB, ולאמת אותם באמצעות התנאי IS JSON. ‫Database Migration Service לא תומך בהמרה של התנאי הזה.
הפחתת סיכונים אפשרית
  • כדי להעביר נתוני JSON שמאוחסנים בעמודות VARCHAR2,‏ CLOB או BLOB ל-PostgreSQL, יכול להיות שתצטרכו לכתוב קובץ מיפוי המרות עם ההנחיה MODIFY_TYPE.

    לדוגמה:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    מידע נוסף על קובצי מיפוי המרות זמין במאמר קובצי מיפוי המרות.

  • כדי להמיר את הפונקציות והאופרטורים של Oracle JSON ל-PostgreSQL, אפשר להשתמש בפונקציות של PostgreSQL כמו JSONB_ARRAY_ELEMENTS,‏ JSON_AGG. מידע נוסף זמין במאמר פונקציות ואופרטורים של JSON במסמכי התיעוד של PostgreSQL.

בעיות בנעילה ובעסקאות

סיבה אפשרית לבעיה

המרת הקוד של Database Migration Service לא תומכת בהצהרות LOCK או SAVEPOINT. ‫PostgreSQL לא תומך ב-SAVEPOINT.

הפחתת סיכונים אפשרית
  • מפצלים את הבלוקים של SAVEPOINT ב-Oracle לבלוקים נפרדים של טרנזקציות ב-PostgreSQL שמשתמשים בהצהרה ROLLBACK.
  • כדי להטמיע את DBMS_LOCK, צריך להשתמש בתוסף pg_dbms_lock של PostgreSQL. התוסף הזה מפשט את ההעברה של נעילות בהגדרת המשתמש של Oracle ל-PostgreSQL, על ידי הדמיה של הפונקציונליות של חבילת DBMS_LOCK של Oracle.

אין תמיכה ב-XML

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך ב-Oracle XMLTYPE או בפונקציות ובאופרטורים של XML שמשויכים אליו.

השבתה זמנית אפשרית של אותות אכיפה

למרות ש-Database Migration Service לא תומך ישירות ב-XMLTYPE, אפשר להתאים אישית עמודות של BLOB,‏ CLOB,‏ NVARCHAR2 או VARCHAR2 ל-XML לצורך העברת נתונים. ‫PostgreSQL תומך בפונקציונליות של XML.

כדי להעביר את נתוני ה-XML, פועלים לפי השלבים הבאים:

  1. יוצרים קובץ מיפוי המרות עם ההנחיה MODIFY_TYPE לנתוני XML. לדוגמה:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    מידע נוסף על קובצי מיפוי המרות זמין במאמר קובצי מיפוי המרות.

  2. מתחילים את משימת ההעברה. בתהליך הזה כל הנתונים מועברים מ-Oracle ל-PostgreSQL, חוץ מהנתונים בעמודות מסוג XMLTYPE. העמודות האלה מלאות בערכי NULL ב-PostgreSQL.
  3. יוצרים טבלה חיצונית ב-PostgreSQL ובוחרים רק את העמודה XMLTYPE מ-Oracle. כוללים את עמודת המפתח הראשי מטבלת המקור.
  4. ממזגים את נתוני ה-XML מהטבלה החיצונית לטבלה המקורית ב-PostgreSQL.

למידע נוסף על האופן שבו PostgreSQL פועל עם XMLTYPE, קראו את המאמר פונקציות XML במסמכי התיעוד של PostgreSQL.

אין תמיכה ב-PIVOT

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך באופרטורים PIVOT ו-UNPIVOT לטרנספוזיציה של המרת קוד.

השבתה זמנית אפשרית של אותות אכיפה

כדי לבצע טרנספוזיציה של PIVOT ב-PostgreSQL, אפשר להשתמש בתוסף tablefunc או לשכתב את הביטוי PIVOT המקורי לצבירות מותנות. לדוגמה:

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

יש כמה דרכים ליצור UNPIVOT טרנספוזיציות, שיוצרות צמדי מפתח/ערך מקבוצת עמודות ב-PostgreSQL:

  • שילוב של צירוף LATERAL עם קבוצה של VALUES. לדוגמה: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • שימוש ב-UNNEST עם ARRAY. לדוגמה: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

אין תמיכה באפשרות ההצהרה ALTER

סיבה אפשרית לבעיה

‫Database Migration Service לא ALTER הצהרות (שלרוב מופעלות ב-SQL דינמי) להמרה.

השבתה זמנית אפשרית של אותות אכיפה

מחליפים את ההצהרות של Oracle ALTER בפקודה SET ב-PostgreSQL. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

תכונת SQL לא נתמכת

סיבה אפשרית לבעיה

הקבוצה הזו כוללת את כל הבעיות הכלליות שקשורות לתכונות SQL שלא נתמכות בהמרה. הבעיות בקבוצה הזו לא שייכות לאף קבוצת בעיות אחרת, ספציפית יותר. לדוגמה, טריגרים של אירועים במסד נתונים, הצהרות GRANT, פעולות INSERT בכמה טבלאות, DML בתצוגות מוטבעות (INSERT INTO (SELECT ... FROM ...)), תצוגות רוחביות.

הפחתת סיכונים אפשרית

תחביר לא נתמך

סיבה אפשרית לבעיה

הקבוצה הזו כוללת את כל הבעיות הכלליות שקשורות לתחביר לא נתמך של Oracle SQL או PL/SQL. הבעיות בקבוצה הזו לא שייכות לאף קבוצת בעיות אחרת, ספציפית יותר.

השבתה זמנית אפשרית של אותות אכיפה

משנים את הקוד כך שישתמש בתחביר של PostgreSQL ששווה ערך מבחינה פונקציונלית. מומלץ לבדוק את תכונות ההמרה האוטומטית שמבוססות על Gemini כדי להתאים את הקוד. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

תחביר SQL לא נתמך

סיבה אפשרית לבעיה

קוד המקור משתמש בתחביר או ברכיבים של SQL שלא נתמכים ב-Database Migration Service. לדוגמה, הפרמטר NLS_LANG בפונקציה TO_DATE של Oracle לא נתמך.

הפחתת סיכונים אפשרית
תחביר PL/SQL לא נתמך

סיבה אפשרית לבעיה

קוד המקור משתמש בתחביר או ברכיבים של PL/SQL שלא נתמכים ב-Database Migration Service. לדוגמה, אין תמיכה בהצהרות INSERT שמבוססות על רשומות (כמו INSERT INTO table VALUES r_variable) וב-PRAGMA RESTRICT_REFERENCES.

השבתה זמנית אפשרית של אותות אכיפה

משנים את הקוד כך שישתמש בתחביר של PostgreSQL ששווה ערך מבחינה פונקציונלית. מומלץ לבדוק את תכונות ההמרה האוטומטית שמבוססות על Gemini כדי להתאים את הקוד. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

תחביר לא נתמך של תאריך וחותמת זמן

סיבה אפשרית לבעיה

יכול להיות ש-Database Migration Service יציג שגיאות או אזהרות לגבי תחביר, פעולות או ביטויים לא נתמכים של תאריך או חותמת זמן. דוגמאות לבעיות כאלה כוללות השוואות בין סוגי נתונים לא תואמים או שימוש במודל הפורמט TZH:TZM בחותמות זמן. מידע נוסף על אובייקטים וסוגי נתונים נתמכים זמין במאמר מידע על סביבות עבודה להמרת מסדי נתונים.

השבתה זמנית אפשרית של אותות אכיפה

אתם יכולים ליצור מחדש את רוב הביטויים של התאריך וחותמת הזמן באמצעות ביטויים מקבילים ב-PostgreSQL. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

רכיבים לא נתמכים בתחביר של Oracle לטיפול בחריגות

סיבה אפשרית לבעיה

המרת הקוד של Database Migration Service לא תומכת ברכיבי התחביר הבאים של חריגות PL/SQL ב-Oracle:

  • שימוש ב-RAISE_APPLICATION_ERROR עם קודי שגיאה משתנים במקום קודי -20nnn מילוליים.
  • שימוש ב-SQLERRM עם ארגומנט של קוד שגיאה, כי התחביר הזה לא נתמך ב-PostgreSQL.
השבתה זמנית אפשרית של אותות אכיפה

צריך לפתור את הבעיות האלה באופן ידני בקוד שהומר. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

בעיות שקשורות לסוגי נתונים ולהמרות

סיבה אפשרית לבעיה

‫Database Migration Service יכול לקבץ בעיות בהמרה לפי ההקשר (לדוגמה, בעיות בהמרה שמתרחשות בביטויים של השוואת סוגים). הקבוצה CW_OP0500 כוללת את כל הבעיות הכלליות בהמרת סוגי נתונים שלא נכללות בקבוצות אחרות של בעיות.

השבתה זמנית אפשרית של אותות אכיפה

ברוב המקרים, Database Migration Service פולט הודעת ERROR_UNIMPLEMENTED או ERROR_TYPE בקוד PostgreSQL שהומר. כדי לפתור את השגיאה, צריך להבין מהם סוגי הנתונים הרלוונטיים.

בעיות במודל של פורמט התאריך

סיבה אפשרית לבעיה

יכול להיות שתיתקלו באזהרות או בבעיות כשאתם ממירים ביטויים של תאריך או חותמת זמן למחרוזות או ממחרוזות, על סמך מודל פורמט. ‫Database Migration Service משתמש במודל ברירת מחדל (כרגע DD-MON-RR) כשההמרות בקוד המקור של Oracle לא כוללות מודל מפורש של פורמט תאריך או חותמת זמן.

לפעמים זה יכול לגרום לבעיות בקוד שהומר, אם מודל הפורמט שנוצר להמרה המשתמעת מתנגש עם מודל פורמט מפורש באותו ביטוי. יכול להיות שהבעיה הזו תופיע גם אם הנתונים שלכם עשויים להיות מושפעים מההבדלים בין הפורמט של Oracle RR לבין הפורמט של PostgreSQL YY.

השבתה זמנית אפשרית של אותות אכיפה

בודקים ומאמתים את הביטויים שהומרו ל-PostgreSQL בסביבת העבודה להמרת מסדי נתונים.

בעיות במודל של פורמט מספרי

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך בכל המודלים של פורמט Oracle. לדוגמה, אין תמיכה ב-'L' או ב-'X'. יכול להיות שתיתקלו בבעיות או באזהרות בקוד שממיר מחרוזות למספרים על סמך מודלים של פורמטים של Oracle.

השבתה זמנית אפשרית של אותות אכיפה

במודלים של פורמטים ב-Oracle שאין להם מקבילה ב-PostgreSQL, יכול להיות שתצטרכו לארגן את הקוד מחדש את הביטויים או את המודלים של הפורמטים. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

בעיות בהמרת סוגי נתונים

סיבה אפשרית לבעיה

יכול להיות שתיתקלו בשגיאות בגלל המרה לא מדויקת או לא נתמכת של סוגי נתונים. בדרך כלל, Database Migration Service פולט את ERROR_UNIMPLEMENTED. בדרך כלל זה קורה בגלל מטא-נתונים חסרים או חלקיים. יכול להיות של-Database Migration Service לא יהיה מספיק מידע כדי להמיר סוג, למשל בארגומנטים של פונקציות או בפרמטרים של פרוצדורות.

השבתה זמנית אפשרית של אותות אכיפה

משנים את קוד ה-PostgreSQL כדי לוודא שהמרות סוגי הנתונים נכונות. כדי לבצע את התיקונים האלה, אתם צריכים להכיר את המאפיינים, המשתנים והעמודות שאתם מפנים אליהם.

בעיות בהשוואה

סיבה אפשרית לבעיה

יכול להיות של-Database Migration Service לא יהיו מספיק מטא-נתונים או מידע על סוגי נתונים בזמן המרה של ביטויים להשוואת נתונים. לדוגמה, זה יכול לקרות כשמשווים בין סוג שמוגדר על ידי המשתמש (UDT) לבין NULL.

השבתה זמנית אפשרית של אותות אכיפה

בודקים את הביטויים שהומרו ל-PostgreSQL ופותרים את הבעיות. כדי לזרז את התיקונים האלה, מומלץ להשתמש בתכונות ההמרה האוטומטית שמבוססות על Gemini. מידע נוסף זמין במאמר המרת קוד וסכימה של Oracle בעזרת Gemini.

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

במבט ראשון, יכול להיות שהקטגוריה הזו חופפת לבעיות בקטגוריה סוגי נתונים והמרות (CW_05), אבל שימו לב שהן מייצגות בעיות שונות. ‫CW_05 מכיל בעיות מוכרות שבהן Database Migration Service לא יכול להמיר קוד של Oracle לקוד המקביל ב-PostgreSQL.

מודל בדיקת הפורמט של התאריך

סיבה אפשרית לבעיה

לרוב המודלים של פורמט התאריך והחותמת זמן של Oracle יש מקבילות מתאימות ב-PostgreSQL, כך שאין הבדלים סמנטיים או פונקציונליים בקוד שהומר. לחלק מהמודלים אין התאמה מדויקת, וההתנהגות שלהם משתנה. דוגמה אחת היא הפורמט RR של Oracle שמומר לפורמט YY של PostgreSQL.

השבתה זמנית אפשרית של אותות אכיפה

חשוב לבדוק ולאמת ביטויים עם המרות של מודלים של פורמטים כדי לוודא שהקוד שהומר פועל כצפוי.

מודל בדיקת הפורמט המספרי

סיבה אפשרית לבעיה

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

השבתה זמנית אפשרית של אותות אכיפה

חשוב לבדוק ולאמת ביטויים עם המרות לפי מודל של פורמטים כדי לוודא שהקוד שהומר פועל כצפוי.

בדיקת קוד החריגה

סיבה אפשרית לבעיה

כשמשתמשים ב- RAISE_APPLICATION_ERROR עם קוד שגיאה בטווח שבין -20000 ל--20999, ‏Database Migration Service ממיר אותו ל-RAISE EXCEPTION של PostgreSQL עם SQLSTATE בטווח שבין CW0000 ל-CW999. ההמרה שומרת את 3 הספרות האחרונות של קוד השגיאה המקורי ומוסיפה את הקידומת CW.

השבתה זמנית אפשרית של אותות אכיפה

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

הודעה על חריג בבדיקה

סיבה אפשרית לבעיה

הפונקציה SQLERRM קיימת גם ב-Oracle PL/SQL וגם ב-PostgreSQL, אבל יכול להיות שהיא תחזיר טקסט שגיאה שונה בכל מנוע. לדוגמה, חלוקה באפס ב-Oracle מחזירה את טקסט השגיאה ORA-01476: divisor is equal to zero, אבל ב-PostgreSQL היא מחזירה את טקסט השגיאה ERROR: division by zero.

השבתה זמנית אפשרית של אותות אכיפה

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

בדיקת האמולציה של הפונקציות המובנות של Oracle

סיבה אפשרית לבעיה

המרת הקוד והסכימה ב-Database Migration Service נועדה לספק התנהגות של פונקציית Oracle עם מקבילות ב-PostgreSQL, אבל יכול להיות שהתוצאות לא תמיד יתאימו לתרחיש שלכם. לכן, סביבות העבודה להמרת מסדי נתונים תמיד מספקות אזהרה לגבי המרות של פונקציות שאולי צריך לבדוק.

השבתה זמנית אפשרית של אותות אכיפה

מומלץ לבדוק אובייקטים שבהם סביבות העבודה להמרת מסדי נתונים מציגות אזהרות בקבוצת הבעיות CW_OP0605.

בדיקת סוג הנתונים בעמודה של המפתח הזר

סיבה אפשרית לבעיה

‫Database Migration Service זיהה חוסר התאמה במפרטים של סוגי הנתונים בין אובייקטים הורה וצאצא (לדוגמה, כשעמודת ההורה היא NUMBER(4) ועמודת הצאצא היא NUMBER(10)).

השבתה זמנית אפשרית של אותות אכיפה

ברוב המקרים, חוסר התאמה קל בסוגי הנתונים לא גורם לבעיות בפונקציונליות של מסד הנתונים. עם זאת, מומלץ לבדוק אם יש חוסר עקביות במודל הנתונים שהומר.

מומלץ לבצע בדיקה פונקציונלית
סיבה אפשרית לבעיה

הקבוצה הזו כוללת את כל הבעיות הכלליות שקשורות להבדלים פונקציונליים פוטנציאליים בקוד של Oracle ו-PostgreSQL. הבעיות בקבוצה הזו לא שייכות לאף קבוצת בעיות אחרת, ספציפית יותר.

הפחתת סיכונים אפשרית

בדיקת האמולציה של הפונקציות המובנות של Oracle

סיבה אפשרית לבעיה

להרבה פונקציות מובנות של Oracle אין פונקציה מקבילה ישירה ב-PostgreSQL. כדי לצמצם את הבעיה הזו בהעברות, Database Migration Service ממיר את הקוד באמצעות ביטויי SQL שונים כדי ליצור התנהגות פונקציונלית מקבילה ב-PostgreSQL.

במקרים מסוימים, הביטויים שהומרו עשויים להיות מורכבים. ‫Database Migration Service מציג אזהרות בקבוצה CW_OP0702 כדי להדגיש בעיות אפשריות ולהודיע שפונקציה מסוימת הומרה לביטוי.

השבתה זמנית אפשרית של אותות אכיפה

בודקים את הקוד שהומר כדי לוודא שהפונקציות שהומרו פועלות כמו שצריך בסביבת PostgreSQL.

נדרש שינוי מבני של טרנזקציות אוטונומיות

סיבה אפשרית לבעיה

‫PostgreSQL לא תומך ב טרנזקציות אוטונומיות.

השבתה זמנית אפשרית של אותות אכיפה

כדי לבצע טרנזקציות אוטונומיות ב-PostgreSQL, אפשר להשתמש בתוסף dblink,‏ pg_background או PL/Proxy. קריאות למסד נתונים שמתבצעות באמצעות אחד מהתוספים האלה מופעלות בסשן אחר, ולכן יוצרות טרנזקציה אוטונומית.

נדרש שכתוב של הקישורים למסד הנתונים

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך ב קישורים למסדי נתונים של Oracle. אובייקטים שמשתמשים בקישורים דורשים refactoring.

השבתה זמנית אפשרית של אותות אכיפה

בהתאם ליעד של הקישור למסד הנתונים, אתם יכולים להטמיע פונקציונליות מקבילה ב-PostgreSQL באמצעות תוספים למסד הנתונים, כמו dblink,‏ postgres_fdw,‏ oracle_fdw או PL/Proxy.

נדרש שכתוב מתקדם של הקוד של התור

סיבה אפשרית לבעיה

לחבילות Oracle Advanced Queuing‏ (DBMS_AQ, DBMS_AQADM) אין מקבילות ב-PostgreSQL, וצריך לבצע בהן refactoring.

השבתה זמנית אפשרית של אותות אכיפה

עומדות לרשותך כמה אפשרויות:

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

צריך לשנות את מבנה מסד הנתונים של כתובות האימייל

סיבה אפשרית לבעיה

ב-AlloyDB ל-PostgreSQL אי אפשר לשלוח אימיילים ישירות ממסד הנתונים. גם תוספים שמאפשרים את הפונקציונליות הזו לא נתמכים. לכן, Database Migration Service לא ממיר את השימושים ב חבילה UTL_SMTP.

השבתה זמנית אפשרית של אותות אכיפה

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

דוגמה להטמעה: כתיבת פרטי אימייל בטבלה ייעודית. הטבלה הזו יכולה גם לשמש כתור אימיילים שאתם דוגמים באמצעות פונקציית Cloud Run, ומטפלים בעיבוד ה-SMTP בפועל.

נדרש שכתוב של המשימות והתזמון

סיבה אפשרית לבעיה

‫Database Migration Service לא ממיר את החבילות DBMS_JOB ו- DBMS_SCHEDULER של Oracle. צריך לארגן את הקוד מחדש שמפנה לחבילות האלה.

השבתה זמנית אפשרית של אותות אכיפה

למשימות פשוטות בלי תלויות, אתם יכולים ליצור באופן ידני משימות מתוזמנות במסד הנתונים של PostgreSQL באמצעות התוסף pg_cron.

אם אתם צריכים לוחות זמנים מורכבים יותר שלא נתמכים ב-pg_cron, יכול להיות שתצטרכו להשתמש בכלי לתזמון ברמת האפליקציה או בכלי של צד שלישי.

נדרש שינוי מבנה של קובץ I/O

סיבה אפשרית לבעיה

‫Database Migration Service לא תומך ב חבילת UTL_FILE של Oracle. צריך לארגן את הקוד מחדש שמפנה לחבילות האלה.

התוסף Orafce כולל אמולציה של UTL_FILE, אבל יכול להיות שהוא לא יעבוד בסביבת PostgreSQL שמנוהלת על ידי Google בגלל יכולות קלט/פלט מוגבלות של קבצים.

הפחתת סיכונים אפשרית
  • יש לארגן את הקוד מחדש כדי להסיר את התלות ב-UTL_FILE.
  • ב-AlloyDB ל-PostgreSQL יש מגבלות מסוימות על יכולות הקלט/פלט של קבצים, ולכן אי אפשר להטמיע את ההתנהגות הזו ישירות במסד הנתונים של היעד.

    אפשרות אחרת היא להתקין את PostgreSQL עם התוסף orafce במכונה וירטואלית של Compute Engine ב-VPC. אחר כך אתם יכולים להשתמש ב תוסף PL/Proxy במסד הנתונים של היעד כדי להפעיל את הגרסה של UTL_FILE שתואמת ל-PostgreSQL שפועלת במסד הנתונים במכונה הווירטואלית של Compute Engine.

מילים נרדפות

סיבה אפשרית לבעיה

‫PostgreSQL לא תומך במילים נרדפות. באובייקטים של קוד, Database Migration Service מחליף באופן אוטומטי את ההפניות למילים נרדפות בסכימת המקור ובשם האובייקט שלהן. אם אתם משתמשים במילים נרדפות מחוץ לאובייקטים של קוד, לדוגמה בסכימות לקריאה בלבד למשתמשים באפליקציות של מסדי נתונים, אתם צריכים להמיר אותן באופן ידני.

השבתה זמנית אפשרית של אותות אכיפה

כדי להשתמש במילים נרדפות מחוץ לאובייקטים של קוד, אתם יכולים להשתמש בפרמטר SEARCH_PATH של PostgreSQL, או לארגן את הקוד מחדש כך שישתמש בתצוגות לאובייקטים של שאילתות.

נדרש שינוי מבנה של טבלאות זמניות גלובליות

סיבה אפשרית לבעיה

קבוצת הבעיות הזו היא אזהרה ש-Database Migration Service זיהה טבלה זמנית גלובלית בקוד המקור של Oracle. כדי להעביר טבלאות זמניות גלובליות, צריך להתקין וליצור את התוסף pgtt PostgreSQL במסד הנתונים של היעד.

השבתה זמנית אפשרית של אותות אכיפה

מומלץ לוודא שהתוסף pgtt PostgreSQL מותקן ונוצר במסד הנתונים של היעד.

בדיקת ההצעות של Gemini

סיבה אפשרית לבעיה:

קבוצת הבעיות הזו כוללת את כל השגיאות והאזהרות הכלליות שקשורות להמרת קוד משופרת באמצעות Gemini.

השבתה זמנית אפשרית של אותות אכיפה: יכול להיות שהבעיות שמופיעות כאן לא תמיד מצביעות על בעיות אמיתיות, אבל מומלץ מאוד לבדוק את כל ההמרות המשופרות ב-Gemini כדי לוודא שהן תואמות לציפיות שלכם.

בדיקת קוד שנוצר בעזרת AI

הסיבה האפשרית: קוד ה-DDL הזה הומר באמצעות תכונות משופרות של Gemini, ויכול להיות שצריך לבדוק את הדיוק שלו.

השבתה זמנית של אותות אכיפה מומלץ לבדוק בקפידה את הקוד שהומר באמצעות הרחבת יכולות בעזרת AI כדי לוודא שהתוצאה הסופית תואמת לפונקציונליות של סכימת המקור.

ציטוטים

סיבה אפשרית לבעיה: ההצעות שמשופרות באמצעות Gemini יכולות לכלול תוכן שמצוטט מכמה מקורות. יכול להיות שציטוטים מסוימים כפופים להגבלות רישיון. מומלץ לבדוק את הקוד שהומר כדי לראות אם יש בו ציטוטים.

בעיות בהמרת מטא-נתונים

סיבה אפשרית לבעיה:

הקבוצה הזו כוללת את כל הבעיות בהמרות שלא נכללות בקבוצות אחרות, ספציפיות יותר.

השבתה זמנית אפשרית של אותות אכיפה

מומלץ לבדוק את הקוד שהומר על סמך הידע שלכם במודל נתוני המקור, ולשנות את הקוד לפי הצורך.

בעיות בהמרת מטא-נתונים

סיבה אפשרית לבעיה:

הקבוצה הזו כוללת את כל הבעיות במעקב אחרי מטא-נתונים שלא נכללות בקבוצות אחרות, ספציפיות יותר, של בעיות.

פתרון אפשרי:

דוגמאות לבעיות בקבוצה הזו קשורות בדרך כלל לשגיאות או לאזהרות בקומפילציה, שיכולות להוביל לבעיות בסוגי הנתונים ב-PostgreSQL שהומר. מומלץ לבדוק את ה-code base שהומר על סמך הידע שלכם במודל נתוני המקור, ולשנות את ההפניות השגויות.

פנייה לצוות התמיכה

סיבה אפשרית לבעיה

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

בעיות כלליות שקשורות להמרות

סיבה אפשרית לבעיה

הקבוצה הזו מכילה את כל הבעיות שלא שייכות לאף קטגוריה או קבוצה אחרת, ספציפית יותר, של בעיות.

השבתה זמנית אפשרית של אותות אכיפה

מומלץ לבדוק את הקוד שהומר על סמך הידע שלכם לגבי מודל הנתונים והקוד של המקור, ולבצע שינויים לפי הצורך.