איך להבין מה expdp או impdp עושה כרגע
בגרסה 10g התחילו באורקל להחליף את מנגנון ה-export/import בכלי מתוחכם בהרבה בשם expdp/impdp (כלומר export data pump או import data pump). הכלי החדש תומך בין השאר ביצוא ויבוא של נתונים בצורה מהירה בהרבה ואפילו בפעולות מקביליות.
הבעיה היא שלמרות הכלי המתוחכם, לפעמים המנגנון הזה עובד קצת לאט ואז נוצרת בעיה: איך לזהות מה קורה עם ה-export או ה-import שלי? כדי לענות על השאלה הזו צריך להפריד בין כמה רמות של שאלה.
רמה הראשונה: איך מזהים במערכת ההפעלה את התהליכים שקשורים ל-expdp?
תשובה:
/app01/oracle 17:54> expdp zelkayam2 directory=HISTORY_DIR dumpfile=zelkayam%u.dmp full=y parallel=2 /app01/oracle 17:54> ps -ef | grep expdp oracle 27854 27567 0 17:54 pts/0 00:00:00 expdp directory=HISTORY_DIR dumpfile=zelkayam%u.dmp full=y parallel=2
רמה שנייה: איך מזהים את ה-session-ים בתוך ה-database?
תשובה:
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') "DATE", s.program, s.sid, s.status, s.username, d.job_name, p.spid, s.serial#, p.pid from v$session s, v$process p, dba_datapump_sessions d where p.addr=s.paddr and s.saddr=d.saddr; DATE PROGRAM SID STATUS USERNAME JOB_NAME SPID SERIAL# PID ------------------- -------------------------------------- ------- -------- ---------- ------------------------------ ------- ------- ------- 2010-11-11 17:54:45 ude@tali (TNS V1-V3) 40 ACTIVE ZELKAYAM2 SYS_EXPORT_FULL_01 28906 38890 26 2010-11-11 17:54:45 oracle@tali (DM00) 37 ACTIVE ZELKAYAM2 SYS_EXPORT_FULL_01 28908 1939 30 2010-11-11 17:54:45 oracle@tali (DW01) 80 ACTIVE ZELKAYAM2 SYS_EXPORT_FULL_01 28911 19847 31 2010-11-11 17:54:45 oracle@tali (DW02) 126 ACTIVE ZELKAYAM2 SYS_EXPORT_FULL_01 28915 3684 12
רמה שלישית: איך מפעילים trace על ה-session-ים של ה-expdp?
התשובה פה היא קצת מפתיעה – קיים פרמטר (שלמרבה ההפתעה לא מופיע כשמריצים expdp help=y) בשם trace.
השימוש בו הוא קצת טריקי מכוון שרמת ה-trace נקבעת על ידי מספר הקסדצימלי בן 7 ספרות (אין צורך להוסיף 0x בהתחלה) ולא ניתן לתת אותו בצורה דצימלית ורק ב-lower case. כמו כן, צריך הרשאות בפועל להריץ trace על session אם רוצים לבצע את זה ומצד שני הרשאות לעשות export על ידי שימוש ברולים:EXP_FULL_DATABASE/ IMP_FULL_DATABASE.
דוגמה לשימוש ב-expdp עם trace:
/app01/oracle 18:19> expdp zelkayam2 directory=HISTORY_DIR dumpfile=zelkayam2%u.dmp full=y parallel=2 trace=480300
במקרה של ה-trace שהפעלתי פה יווצרו שני סוגי קבצים ב-BACKGROUND_DUMP_DEST:
- סוג אחד ל-master process בשם SID>_dm
_ .trc> - סוג שני ל-worker processes (אחד או יותר) בשם SID>_dw
_ .trc>.
סוגי ה-trace-ים הקיימים מרוכזים בטבלה המצורפת ומכוון שאלו ערכים הקסהדצמיליים ניתן לחבר אותם כדי לקבל כמה trace-ים במקביל:
-- Summary of Data Pump trace levels: -- ================================== Trace DM DW ORA Lines level trc trc trc in (hex) file file file trace Purpose ------- ---- ---- ---- ------ ----------------------------------------------- 10300 x x x SHDW: To trace the Shadow process (API) (expdp/impdp) 20300 x x x KUPV: To trace Fixed table 40300 x x x 'div' To trace Process services 80300 x KUPM: To trace Master Control Process (MCP) (DM) 100300 x x KUPF: To trace File Manager 200300 x x x KUPC: To trace Queue services 400300 x KUPW: To trace Worker process(es) (DW) 800300 x KUPD: To trace Data Package 1000300 x META: To trace Metadata Package --- + 1FF0300 x x x 'all' To trace all components (full tracing)
ערך trace נפוץ הוא 480300 שמנטר גם את ה-MCP (המאסטר) וגם את ה-workers.
בעתיד אני מקווה לכתוב פוסט המשך עם הסברים איך קוראים את הקבצים האלה ומבינים מה קורה בפועל ובנתיים ניתן לקרוא עוד ב-note 286496.1 ב-oracle support.
השאירו תגובה
Want to join the discussion?Feel free to contribute!