יצירת קובץ CSV מתוך PL/SQL

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

השיטה שתוארה בפוסט הקודם היא שיטה מעולה כל עוד לא מנסים לשרשר יותר מדי שדות ואז אורך הרשומה הופך להיות מגבלה רצינית. בשיטה הקודמת שירשור ערכים שעובר גודל מסויים (לא בדקתי מהי, נדמה לי שזה 4000 – המגבלה של פונקציות SQL באופן כללי) נכשל עם הודעת שגיאה: ORA-01489: result of string concatenation is too long.

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

המשך קריאה…

סיסמה של משתמש עם תו מיוחד

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

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

SQL> conn jake/a12@b345
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.

אהאה אמרתי, הנה הבעיה שלך – שמת תו @ באמצע הסיסמה ועכשיו ה-sqlplus חושב שאתה רוצה שהוא יתחבר לבסיס נתונים בשם b345. אז מה עושים שאל המשתמש?
המשך קריאה…

ניקוי קבצים ישנים ב-OH דרך OPatch

לפני תקופה מסויימת קיבלתי הודעה ממערכת השו"ב כי הדיסק שעליו יושב ה-Oracle Home התמלא ואם אני יכול לבדוק מה אפשר למחוק שם כדי לפנות מקום. במסגרת החיפושים "מה תופס מקום" מצאתי ספריה תחת ה-Oracle Home שלי בשם .patch_storage שתפסה כמה ג'יגות (4) של מקום.

בבדיקה ב-MOS (מה שנקרא פעם Metalink והיום נקרא My Oracle Support) – במסמך מספר 550522.1 התברר לי שזו הספרייה שמאפשרת לנו לעשות rollback ל-patchs, patchsets, CPU וכו' אבל החל מגרסת opatch 10.2.0.4.5 התווסף כלי שמאפשר לנו לקנות את כל הקבצים המיותרים בספריה מבלי לפגוע ביכולת לחזור לאחור. הקבצים המיותרים כוללים לדוגמה patch-ים מגרסאות קודמות (לדוגמה אם שידרגנו גרסאת major ועברנו לגרסה 10.2.0.4 אז ניתן למחוק את כל הפאצ'ים שהותקנו על 10.2.0.3) או שאינם רלוונטים יותר.
המשך קריאה…

איך לפתור את שגיאה ORA-04068

כל אחד שמפתח package-ים ב-PL/SQL נתקל בבעיה הזו לפחות פעם אחת במהלך הפיתוח: ORA-04068: existing state of packages has been discarded. זו בעיה נפוצה למדי בפיתוח package-ים שהפתרון המיידי שלה הוא להריץ שוב את הפרוצדורה או הפונקציה מתוך ה-package כדי שזה יסתדר. בוא נבין מה הבעיה ואיך ניתן לטפל בבעיה.

המשך קריאה…

שגיאת 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.

Oracle Database 11.2.0.2 לחלונות שוחררה

לכל מי שהמתין לגרסה 11.2.0.2 של אורקל לחלונות: אני שמח לבשר ששלושה חודשים אחרי שהיא יצאה ללינוקס, הגרסה לחלונות יצאה שלשום והיא ניתנת להורדה מ-My Oracle Support – פאץ מספר 10098816.

שימו לב שצורת ההתקנה השתנתה והיא מגיעה כהתקנה מלאה ולא צריך את הגרסה הקודמת (11.2.0.1) כדי להתקין את הגרסה החדשה. גם ברירת המחדל להתקנה השתנתה ועכשיו היא התקנה בספרייה חדשה (out-of-place) ולא על הספרייה הקודמת (in-place). היתרון הגדול הוא שהספרייה הקודמת (כולל ה-one-of-patches) נשמרים למקרה שנרצה לחזור לספרייה הקודמת וגם תהליך ההתקנה מתקצר כי לא צריך להוריד את ה-instance בזמן ההתקנה של התוכנה והפאצ'ים שנרצה להתקין על ה-home החדש. החסרונות: צורך במקום נוסף ושינוי של ה-Oracle Home (אם מסתמכים עליו בסקריפטים, לדוגמה).

למידע נוסף ניתן לקרוא ב-MOS – מסמך מספר 1189783.1.