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

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

זה נשמע לי מאוד מוזר אז ביקשתי ממנו את הסיסמה החדשה שלו. הסיסמה הייתה: [email protected] מנקודת מבטו של המשתמש זה נראה ככה:

SQL> conn jake/[email protected]
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.

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

אגריגציה של מחרוזות

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

  • פונקציית STRAGG (של Tom Kyte) – שזמינה החל מגרסה 9i ומשתמשת בטכניקה של פונקציות משתמש סיכומיות. הפוקנציה הזו לא ידעה כל כך למיין את הרשומות בתוך הרשימה (בעיה שנפתרה לאחר מכן) והיו לה ביצועים לא כל טובים, אבל היא עשתה את העבודה. במאמר מוסגר נציין שהפונקציה הזו נוספה באופן מובנה לבסיס הנתונים בגרסה 11 אבל היא עדיין לא יודעת למיין או להשתמש במפרידים בין הערכים.
  • שימוש ב-CONNECT_BY_PATH ושליפות היררכיות שזמין מגרסה 9i – פתרון מורכב יחסית שלא היה טוב לכל שליפה.
  • שימוש בפונקציית model בעלת התחביר המזעזע והביצועים העוד יותר מזעזעים שזמינה מגרסה 10g.
  • שימוש ב-collect וקוד pl/sql שזמין מגרסה 10g גם כן.
  • עריכה: ידידי לאוניד הזכיר גם את הפונקציה wmsys.wm_concat. היא זמינה החל מגרסה 9i  אבל דורשת התקנה של ה-wmsys (workspace manager) – שמותקן כברירת מחדל רק בגרסאות מאוחרות יותר .

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

החל מגרסה 11gR2 קיימת פונקציה סיכומית בשם LISTAGG. הפונקציה החדשה יודעת לשרשר ערכים משורות ולהחזיר אותן בתור ערך בעמודה. יש לה מפריד שניתן לקבוע אותו והיא יודעת למיין את הערכים.
המשך קריאה…

סיבוב טבלה על ציר

בעיה נפוצה שלא היה לה פתרון פשוט על ידי פקודה עד גרסה 11 היא סיבוב טבלה על ציר. בגרסה 11 ישנו פתרון יעיל ומהיר לבעיה על ידי צמד פקודות: Pivot ו-Unpivot שלא מצריך ניפנופי ידיים והסברים על מימוש שליפה שתבצע את זה.

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

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

טבלאות לקריאה בלבד

בגרסאות קודמות אם היינו רוצים לסמן טבלאות מסויימות לקריאה בלבד (read only) היינו מסירים את ההרשאות הכתיבה עליהן מכל המשתמשים ומקווים לטוב. למה מקווים לטוב? כי למרות הרצון הטוב, לא ניתן לבטל את ההרשאות של הבעלים (owner) של הטבלה ולכן הוא היה יכול להמשיך לשנות אותה (אפילו בטעות) למרות ההגדרה האפליקטיבית שביצענו.

החל מגרסה 11gR1 ניתן לנעול טבלה ולהגדיר אותה כ-read only ובכך למנוע גישת כתיבה אליה (כמובן שניתן להמשיך לקרוא ממנה).

המשך קריאה…

עמודות וירטואליות

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

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

המשך קריאה…

על מעבדים: socket-ים, core-ים ו-thread-ים

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

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

בשליפה מ-Oracle:

ישנה טבלה ששייכת ל-AWR ואוספת ברמה זו או אחרת את מספר המעבדים, ליבות ו-thread-ים שיש למכונה. בגרסה 10 צריך לשלוף את זה ידנית אבל בגרסה 11 זה כבר יוצא בדוח של ה-AWR.

המשך קריאה…