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

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

מסך סקירה כללית של סביבת העבודה 'המרות' שבו מוצגות קבוצות וקטגוריות של בעיות בהמרות.
איור 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

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

הפונקציה Oracle SQLCODE לא נתמכת בהמרה. ‫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 שלא נתמכות בהמרה. בעיות בקבוצה הזו לא נכללות בקבוצות אחרות של בעיות ספציפיות יותר.

פתרונות אפשריים

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

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

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

פתרונות אפשריים

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

התכונה 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 לעולם לא דלילים. אם מקצים רכיבים בצורה דלילה, יכול להיות שמערכי PostgreSQL יחזירו תוצאות שונות וספירות קרדינליות שונות ממערכי Oracle.

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

פונקציות פייפליין לא אפשרי

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

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

פתרונות אפשריים

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

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

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

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

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

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

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

פתרונות אפשריים

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

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

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

רוב האופרטורים, הפונקציות והעמודות הווירטואליות של CONNECT BY נתמכים על ידי Database Migration Service ומומרים לביטויים נפוצים של טבלאות (CTEs) רקורסיביות של 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, משתמשים בתוסף PostgreSQL pg_dbms_lock. התוסף הזה מפשט את ההעברה של נעילות בהגדרת המשתמש מ-Oracle ל-PostgreSQL על ידי הדמיה של הפונקציונליות של חבילת Oracle DBMS_LOCK.

אין תמיכה ב-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.t
  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>

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

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

שירות העברת מסדי נתונים לא מבצע המרות של הצהרות 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 לא תומכת ברכיבי התחביר הבאים של חריגים ב-Oracle PL/SQL:

  • השימוש ב-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, ולכן אין הבדלים סמנטיים או פונקציונליים בקוד שהומר. חלק מהמודלים לא תואמים בדיוק, וההתנהגות שלהם משתנה. דוגמה אחת היא פורמט Oracle RR שמומר ל פורמט PostgreSQL YY.

פתרונות אפשריים

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

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

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

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

פתרונות אפשריים

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

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

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

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

פתרונות אפשריים

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

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

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

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

פתרונות אפשריים

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

בדיקת האמולציה של פונקציות מובנות של 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.

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

פתרונות אפשריים

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

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

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

‫PostgreSQL לא תומך ב.

פתרונות אפשריים

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

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

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

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

פתרונות אפשריים

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

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

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

לחבילות Oracle Advanced Queuing‏ (DBMS_AQ,‏ DBMS_AQADM) אין מקבילות ב-PostgreSQL, והן דורשות שינוי מבנה.

פתרונות אפשריים

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

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

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

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

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

פתרונות אפשריים

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

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

נדרש רפקטורינג של משימות ותזמון

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

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

פתרונות אפשריים

לגבי משימות פשוטות ללא תלות, אפשר ליצור באופן ידני משימות מתוזמנות במסד הנתונים של 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 מחליף באופן אוטומטי הפניות למילים נרדפות בסכימה ובשם האובייקט המקוריים שלהן. אם משתמשים במילים נרדפות מחוץ לאובייקטים של קוד, למשל בסכימות לקריאה בלבד למשתמשי אפליקציות של מסדי נתונים, צריך להמיר אותן באופן ידני.

פתרונות אפשריים

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

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

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

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

פתרונות אפשריים

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

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

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

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

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

בדיקת קוד ששופר בעזרת AI

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

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

ציטוטים

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

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

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

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

פתרונות אפשריים

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

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

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

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

פתרון אפשרי:

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

יצירת קשר עם צוות התמיכה

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

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

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

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

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

פתרונות אפשריים

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