פוסטים

שגיאת ORA-7445 כאשר מרפרשים MV דרך DBLINK

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

Materialized view (מה שהיה קרוי פעם snapshot) שעבד כבר שנים הפסיק פתאום לעבוד והתחיל להוציא הודעות ORA-07445 ולהוציא core dumps. הודעת השגיאה המדוייקת הייתה:

ORA-07445: exception encountered: core dump [qcdlaucn()+232] [SIGSEGV] [Address not mapped to object] [0x000000008] [] []

מבדיקה של האובייקט התברר שיש בו שליפה של טבלה מסביבה מרוחקת דרך dblink. חיפוש ב-MOS הראה שכדאי ליצור את ה-MV מחדש ויתכן שזה יפתור את הבעיה. שמרתי את המבנה של הטבלה וזרקתי אותה. בניסיון ליצור אותה מחדש המשכתי לקבל ORA-7445.

כדי לשמור על האפליקציה מליפול, יצרתי את הטבלה באמצעות Create table as select שעבד בצורה מושלמת והוספתי את האינדקסים שהיו קיימים לטבלה המקורית. ניסיתי ליצור את ה-MV כ-prebuilt table אך ללא הועיל.
פתחתי קריאה לאורקל והם הפנו אותי לבאג מספר 7833549 ולפתרון העוקף שלו: במקום לשלוף *, יש לפרט את רשימת השדות שאני רוצה לשלוף. זה אכן עקף את הבעיה ופתר אותה.
יש פה יופי של לקח לעתיד וגם best practice ליצירת MV-ים: תמיד לפרט את רשימת השדות מהמקור ולא לבצע שליפות של כל העמודות על ידי *.

באג 7833549 עלול לקרות בגרסאות 10.2.0.4 ועד 11.1.0.7 על סביבות של לינוקס (32, 64) וסולריס. לא בדקתי בגרסאות או בפלטפורמות אחרות. הבאג נפתר לחלוטין בגרסה 11.2.