ניתוח תלות מסד נתונים של IMS

ניתוח תלות במסד הנתונים של IMS: מה צוותי המודרניזציה חייבים לדעת לפני העברת כל דבר

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

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

אף אחת מההפתעות הללו לא שורדת מגע עם ניתוח תלות קפדני לפני ההגירה. הן שורדות מגע עם הנחות.

ניתוח תלות IMS בקנה מידה של תיק עבודות

SMART TS XL מזהה תלויות IMS בין מסדי נתונים שאינן נראות במקור COBOL בלבד.

מידע נוסף

מה מייחד את ניתוח התלות של IMS

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

ניתוח תלות של IMS מורכב יותר בכל ממד.

המבנה הוא היררכי, לא יחסי. מסד נתונים של IMS מאורגן כעץ של סוגי מקטעים, כאשר לכל סוג מקטע יש קשר הורה-צאצא מוגדר. תוכנית COBOL שקוראת רשומות מטופלים ממסד נתונים של IMS אינה מבצעת SELECT * FROM PATIENTS WHERE ID = ?היא מבצעת קריאה של Get Unique (GU) כדי לנווט בהיררכיה אל מקטע השורש, לאחר מכן קריאות של Get Next Within Parent (GNP) כדי לעבור בין הילדים. התלות של התוכנית אינה בטבלה, היא נמצאת בנתיב ספציפי דרך מבנה היררכי, ושינוי מבנה זה עלול לגרום לשבירת תוכניות שמנווטות בה בדרכים שאף ניתוח ברמת SQL לא יזהה.

התלויות מפוזרות על פני שלושה מבנים נפרדים. התמונה המלאה של מה שתוכנית COBOL עושה עם IMS דורשת ניתוח:

  • מתאר מסד הנתונים (DBD): מגדיר את היררכיית המקטע הפיזי, את שדות המפתח, את שיטות הגישה (HDAM, HIDAM, HISAM, HSAM) ואת כל האינדקסים המשניים או הקשר הלוגי.
  • PSB (בלוק מפרט תוכנית): מגדיר לאילו מסדי נתונים תוכנית מורשית לגשת, דרך אילו PCBs, עם אילו מפרטי רגישות וכוונה
  • קוד המקור של COBOL: מכיל את קריאות ה-DL/I בפועל שקובעות לאילו מקטעים מתבצעת גישה, עם אילו פונקציות קריאה, באיזה רצף, עם אילו SSAs

אף מקור יחיד אינו מכיל את התמונה המלאה. ניתוח שקורא רק את מקור ה-COBOL רואה את סוגי הקריאות ושמות הסגמנטים אך לא את מבנה מסד הנתונים הפיזי. ניתוח שקורא רק את ה-DBD וה-PSB רואה מה התוכנית רשאית לעשות אך לא מה היא עושה בפועל.

ניווט תלוי מיקום. במסד נתונים יחסי, כל שורה ניתנת לטיפול עצמאי באמצעות מפתח. ב-IMS, המיקום הנוכחי של תוכנית בהיררכיה משפיע על מה שיוחזרו על ידי קריאות עוקבות. קריאה מסוג GN (Get Next) מחזירה את הקטע הבא ברצף היררכי מכל מקום בו התוכנית נמצאת כעת. התלות אינה רק בסוג הקטע אלא בנתיב המעבר שהוביל למיקום הנוכחי. לתוכניות המסתמכות על הסדר ההיררכי המרומז של IMS יש תלות שנעלמת כאשר הנתונים מועברים למסד נתונים יחסי שבו לא מובטח סדר שווה ערך.

מלאי קריאות DL/I: מה קוד המקור של COBOL מגלה

הניתוח הטרום-מיגרציה השימושי ביותר באופן ישיר הוא מלאי מלא של כל קריאה ל-DL/I בכל תוכנית COBOL שניגשת ל-IMS. מלאי זה מספר לצוות המיגרציה מה כל תוכנית עושה עם IMS, לא מה מותר לה לעשות (מה שמגדיר ה-PSB) אלא מה היא עושה בפועל.

קריאות DL/I ב-COBOL מופיעות בשתי צורות:

קובול

* Form 1: EXEC DLI interface (CICS-compatible, high-level syntax)
       EXEC DLI
           GU DB2PCB
           SEGMENT(CUSTROOT)
           WHERE(CUSTID = WS-CUST-ID)
       END-EXEC

* Form 2: xxxTDLI call interface (batch programs, assembler-compatible)
       CALL 'CBLTDLI' USING WS-FUNCTION-CODE
                            PCB-CUSTOMER
                            WS-CUSTOMER-SEGMENT
                            WS-SSA-CUSTOMER

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

טקסונומיית קוד הפונקציה והשלכותיה על הגירה

קוד הפונקציה DL/I הוא האלמנט המשמעותי ביותר מבחינת הגירה בכל קריאה. כל קוד פונקציה מרמז על דפוס גישה שונה לנתונים שיש לשכפל במסד הנתונים הרלציוני של היעד:

פונקציות לקריאה בלבד: GU, קבל ייחודיות: ניווט ישיר לפלח באמצעות SSAs מוסמכים. שווה ערך ל-SELECT עם פסוקית WHERE במונחים רלציוניים. קל להעברה אם מפתח הפלח ממופה בצורה נקייה למפתח ראשי רלציוני.

GN, קבל את הבא: מעבר למקטע הבא ברצף היררכי. זהו קוד הפונקציה שאין לו מקבילה רלציונית ישירה, הוא מסתמך על המצב המיקומי של IMS ועל הסדר המירומז שלו. תוכניות המשתמשות ב-GN באופן נרחב דורשות ניתוח מדוקדק של הסדר עליו הן תלויות.

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

פונקציות החזקה (תנאים מוקדמים לעדכון): GHU, GHN, GHNP, מקבילות של Get Hold ל-GU, GN, GNP. הדגל "hold" מציין שפעולת עדכון (REPL) או מחיקה (DLET) תתבצע לאחר מכן. תוכניות המשתמשות בקריאות hold הן תוכניות קריאה-שינוי-כתיבה; ההעברה חייבת לשמור על שלמות טרנזקציות לאורך ה-hold והעדכון שלאחר מכן.

פונקציות עדכון: ISRT, Insert: מוסיף מופע חדש של מקטע. שווה ערך ל- INSERT. DLET, מחיקה: מסיר את הקטע המוחזק הנוכחי ואת כל התלויים בו. התנהגות "כל התלויים" היא מפל ספציפי ל-IMS שחייב להיות מיושם במפורש במערכת היעד. REPL, החלפה: מעדכן את הקטע הנוכחי המוחזק בנתונים חדשים. שווה ערך לעדכון.

מדוע זה חשוב להיקף ההעברה: תוכנית עם קריאות GU ו-GNP בלבד היא צרכנית לקריאה בלבד של נתוני IMS, סיכון ההעברה נמוך יותר, וקלה יותר לאימות. תוכנית המשתמשת ב-GHU, REPL ו-DLET היא תוכנית לעיבוד טרנזקציות שמשנה מבנים היררכיים; ההעברה שלה דורשת שמירה על שלמות טרנזקציות בפעולות ש-IMS אוכף כיום באופן אטומי.

שלושת סוגי התלות שמכשילים כל הגירה

קשרים לוגיים

קשרים לוגיים של IMS מחברים מקטעים על פני שני מסדי נתונים נפרדים פיזית. מקטע בן לוגי במסד נתונים A מכיל הורה לוגי במסד נתונים B. כאשר תוכנית COBOL מנווטת דרך קשר לוגי, היא עוברת נתיב שחוצה פיזית את גבולות מסד הנתונים, חצייה ש-IMS מנהלת באופן שקוף אך נעלמת כאשר מסדי הנתונים מועברים באופן עצמאי.

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

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

מאגרי מידע משניים

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

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

  • הם מוגדרים בקבצי DBD שאינם תמיד מקובצים עם קבצי ה-DBD של מסד הנתונים הראשי.
  • תוכניות המשתמשות באינדקסים משניים מציינות את מסד הנתונים של האינדקסים בקבצי ה-PSB שלהן, אך תוכניות המנווטות למסד הנתונים הראשי דרך אינדקס משני עשויות לא להבהיר זאת בקוד המקור של COBOL.
  • התיעוד עשוי לתאר את מסד הנתונים הראשי מבלי להזכיר את האינדקסים המשניים שלו.

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

מאגרי מידע של GSAM

מסדי נתונים מסוג GSAM (Generalized Sequential Access Method) הם הממשק של IMS לעיבוד אצווה רציף, המאפשר למעשה לתוכניות אצווה של COBOL להשתמש בקריאות DL/I עבור מה שמתייחס באופן פונקציונלי ל-I/O של קבצים רציף. למסדי נתונים מסוג GSAM אין היררכיות של מקטעים; הם מבנים רציפים שטוחים אליהם ניגשים דרך IMS כדי ליהנות מיכולות השחזור וההפעלה מחדש של IMS.

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

בניית מלאי התלות טרום הגירה

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

תוצר 1: מיפוי PCB לבסיס נתונים

כל PCB בכל PSB ממופה ל-DBD ספציפי (מסד נתונים IMS ספציפי). רישום כל PCB בכל ה-PSBs ומיפוי כל אחד ל-DBD שלו מייצר רשימה מוסמכת של אילו תוכניות מורשות לגשת לאילו מסדי נתונים. זוהי נקודת המוצא להבנת ההיקף, אך היא מגזימה בתלות בפועל מכיוון שייתכן שתוכניות כוללות PSBs הכוללים יותר מסדי נתונים ממה שהן משתמשות בפועל.

תוצר 2: מלאי שיחות בפועל לכל תוכנית

ניתוח כל קריאות DL/I של תוכנית COBOL מייצר את רשימת השימושים בפועל: אילו PCBs כל תוכנית קוראת בפועל, אילו קודי פונקציה היא משתמשת, לאילו סוגי סגמנטים היא ניגשת, והאם היא משתמשת ב-SSAs מתאימים (גישה למפתח סגמנט) או בניווט לא מוסמך (מעבר מיקום). זה מצמצם את הטווח מהרשאות המוגדרות על ידי PSB להתנהגות התוכנית בפועל.

תוצר 3: מפת שימוש ביחסים לוגיים

הפניה צולבת של מלאי הקריאות מול קבצי ה-DBD מזהה אילו קריאות GNP או GN של תוכניות חוצות קשרים לוגיים. זה דורש ניתוח לא רק של מקור COBOL ו-PSB, אלא גם של מבני ה-DBD המגדירים אילו קשרי אב-צאצא הם פיזיים ואילו לוגיים.

תוצר 4: מפת שימוש באינדקס משני

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

תוצר 5: התפלגות סוגי קריאה לפי מסד נתונים

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

  • מסדי נתונים אליהם נגישים רק באמצעות פונקציות קריאה (GU, GN, GNP) פשוטים יותר להעברה
  • מסדי נתונים אליהם ניגשים פונקציות עצירה ועדכונים (GHU + REPL, GHN + DLET) דורשים שכפול שלמות טרנזקציות
  • מסדי נתונים עם שימוש גבוה ב-GN מצביעים על תלות ניווט מיקוםית הדורשות ניתוח סדר
  • מסדי נתונים עם קשרים לוגיים דורשים סמנטיקה של JOIN בין מסדי נתונים ביעד

תוצר 6: סיווג סיכוני תוכנית

באמצעות התפלגות סוגי הקריאה ומלאי סוגי התלות, כל תוכנית מסווגת לפי סיכון הגירה:

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

מה הניתוח משנה לגבי תכנון הגירה

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

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

החלטות לגבי עיצוב היעד. התפלגות סוגי הקריאה קובעת כיצד יש לבנות את סכמת היחסים של היעד. קשר היררכי של הורה-ילד, אליו ניתן לגשת באופן בלעדי דרך קריאות GU ו-GNP בעלי מפתח, מתורגם בצורה חלקה לקשר של מפתח זר ביעד. אותו קשר, אליו ניתן לגשת דרך קריאות GN עם תלויות מיקום, דורש מסכמת היעד לשמור על סדר שווה ערך, בין אם באמצעות ORDER BY מפורש, שדה רצף או דפוס גישה שונה שמשיג את אותה התוצאה.

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

סיווג סיכונים. הקשר הלוגי וממצאי האינדקס המשני הם התשומות העיקריות לסיווג סיכונים. לכל תוכנית הגירה יש רישום סיכונים. ניתוח התלות של IMS אומר לצוות אילו ערכים להכניס אליו.

איך SMART TS XL מבצע ניתוח תלות של IMS

SMART TS XL"S ניתוח קוד סטטי מנתח כל קריאות DL/I של תוכנית COBOL, הן בצורות ממשק EXEC DLI והן בצורות ממשק xxxTDLI, תוך חילוץ קוד הפונקציה, ייחוס ה-PCB, שם הסגמנט ומבנה ה-SSA מכל קריאה. פעולה זו מייצרת את מלאי הקריאות בפועל ברמת התוכנית, על פני כל תיק ה-COBOL, מבלי להזדקק למערכת IMS פעילה או לסקירת קוד ידנית.

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

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

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

עבור צוותים המנהלים מודרניזציה מורשת של מערכות מגובות IMS, הראיות המבניות שהופקו על ידי SMART TS XL הוא הקלט לכל החלטת הגירה עוקבת: אילו תוכניות עוברות דרך איזה גל, אילו מסדי נתונים ניתן להמיר באופן עצמאי ואילו דורשים המרה מתואמת, אילו דפוסי גישה דורשים ארכיטקטורה מחדש ולא תרגום ישיר. כפי שתואר בהקשר של העברת מבני IMS ו-VSAM לצד תוכניות COBOL, הקשר בין תוכניות COBOL למבני נתונים מדור קודם פירושו שהעברת נתונים וניתוח קוד חייבים להתקיים במקביל, מלאי התלויות הוא המנגנון המאפשר תכנון מקביל.

המלאי אינו ההגירה

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

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

ידע זה אינו מגיע מתיעוד. הוא מגיע מניתוח הקוד.