From Oracle into SQL Server

By | 11 בדצמבר 2011

בימים האחרונים נתבקשתי לבדוק במה כרוך מעבר מאורקל ל- SQL Server. בסיס הנתונים המדובר כלל פרוצדורות רבות (אלפי שורות קוד) ולכן היה לי ברור שרק בצורה ממוכנת ניתן לבצע את ההסבה מבלי לעבוד שעות רבות.

קיבלתי קובץ עם בסיס נתונים של אורקל. ובעזרת חבר שהינו DBA של אורקל התקנתי אורקל על המחשב שלי ובתוכו את בסיס הנתונים שקיבלתי. מסתבר שהפעולה שב- SQL Server הייתה דורשת ממני לבצע Deattach/Attach או Back/Restore באורקל נדרשו מספר שעות של התמודדות עם סקריפטים ידניים במסך דמוי DOS כדי לטעון את בסיס הנתונים שקיבלתי אל השרת החדש.

לאחר מכן התקנתי את SQL Server 2008 Migration Assistant for Oracle. כלי זה נוצר על ידי מיקרוסופט כדי לסייע בהמרת בסיס נתונים של אורקל אל SQL Server. לאחר הפעלת SSMA יוצרים פרוייקט חדש אשר הינו למעשה חיבור במקביל אל אורקל ו- SQL Server.

בחלקו העליון של החלון רואים את האובייקטים של אורקל ובחלקו התחתון רואים אובייקטים שבמערכת המירה ל- SQL Server.

image

ניתן לראות למשל את השדה Log_ID אשר באורקל יש לו טיפוס נתונים מסוג Number אשר תורגם ל- Float 53 ב- SQL Server. השדה Log_DateTime הינו מסוג date באורקל והומר ל- datetime2 ב- SQL Server.

כאשר מדובר על Stored Procedure העניין מעניין יותר. SSMA משכתבת את הסקריפט של אורקל לסקריפט של SQL Server.

image

 בחלק העליון של החלון רואים את הסקריפט של אורקל ובחלק התחתון רואים את תרגומו ל- SQL Server.

עם סיום המרת כל הרכיבים ל- SQL Server ישנו עניין מבלבל מעט. בצד השמאלי של החלון רואים בחלק העליון את רכיבי אורקל ובחלק התחתון את רכיבי SQL Server. ברם, אם נסתכל בשרת ה- SQL Server עצמו לא נראה עדיין כל רכיב חדש (בסיס נתונים, טבלה וכו'). למעשה המערכת מייצרת סוג של "הצהרת כוונות" לגבי מה שהיא מתכוונת לבצע. קליק ימני על החלק עם רכיבי SQL Server ובחירה ב- Synchronize with database תייצר את כל הרכיבים בפועל בתוך בסיס הנתונים של SQL Server.

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

שתי הערות:

  • SQL Server בנוי כ- Instance—>Database –>Schema –> DB Objects אורקל בנוי עם Database אחד בלבד. דהיינו השרת הוא: Instance –> Schema –> DB Objects . המערכת מאפשרת לנו להמיר כל סכמה של אורקל לבסיס נתונים נפרד ב- SQL Server (לסכמה DBO) או להמיר את כל האובייקטים לסכמות נפרדות בתוך בסיס נתונים אחד. במבנה זה בסיס הנתונים הנבחר ב- SQL Server מכיל למעשה את כל הרכיבים של שרת האורקל.
  • באורקל קיים רכיב Sequence (רצף) אשר הינו מונה מספרי. רכיב זה אינו קיים ב- SQL Server 2008 והוא מומר באופן אוטומטי לשדה מסוג Identity. ב- SQL Server 2012  קיים רכיב Sequence ואז ההמרה תשתנה בהתאם. במאמר בנושא הרצפים תואר בהרחבה ההבדל בין Identity ל- Sequence.
Share

2 thoughts on “From Oracle into SQL Server

  1. גרי רשף

    איך המערכת עבדה לאחר ההסבה?
    כל הקטע של המרת הקוד נשמע מעט חשוד: לא יכול להיות שזה עובר בלי תקלות..

  2. רימון חייט

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

    כ- 20% מהאובייקטים לא עברו אך רובם דוקא לא אובייקטים של קוד אלא אובייקטים "קשים" – אינדקסים ומפתחות מסוגים שאינם קיימים ב- SQL. דרך אגב המערכת אינה פועלת מול SQL 2012. אני כאשר תצא גרסה עדכנית יהיה מעניין לבדוק שוב.

כתיבת תגובה

האימייל לא יוצג באתר.