ניהול ג'ובים של datapump
יש לי לקוח שמריץ סקריפטים שמגבים טבלאות מרכזיות במערכת שלו באמצעות שימש ב-data pump. זה פתרון לא רע בכלל כדי לשמור טבלאות לצרכי שחזור מהיר או להעברה לסביבות הפיתוח. הבעיה היא שהטבלאות שאותן מגבה הלקוח הן גדולות מאוד וה-export לוקח המון זמן (כמה שעות טובות).
לפעמים, נוצר לנו צורך ל"הציץ" לתוך התהליך של ה-export ולראות מה קורה איתו – באיזה מצב הוא נמצא, איזה טבלה הוא מייצא בנקודה מסויימת ועוד כמה זמן נשאר לתהליך. עקרונית, הסקריפט שלנו רץ ברקע (מתוך cron) והוא באמת שומר את ה-output לתוך קובץ log אבל זה לא מספיק כדי לענות על כל השאלות שיש ללקוח.
עוד מקרה שעלול להיווצר זה export (לדוגמה full) שאנחנו מבצעים אבל החלון שעבדנו בו נסגר מאיזושהי סיבה – הסיבה הנפוצה שלי היא ssh שנסגר בגלל אובדן תקשורת אבל זו יכולה להיות כל סיבה אחרת.
השאלה היא מה עושים במקרה הזה ודווקא השימוש ב-data pump jobs הופך את העניינים לפשוטים במיוחד.
מציאת שם הג'וב שרץ
כאשר אנחנו מבצעים את הפקודה expdp (או impdp) אנחנו בעצם משתמשים במעטפת שאומרת לבסיס הנתונים ליצור ג'וב של scheduler jobs בתוך בסיס הנתונים כדי לבצע את ה-export. כאשר הגיבוי שלנו מתחיל הוא רושם בהתחלת התהליך את שם הג'וב שהוא יצר ואנחנו יכולים להשתמש בו כדי לחזור ולהתחבר לממשק הניהול של הג'וב (במקרה הזה, לג'וב קוראים SYS_EXPORT_FULL_01). אל ממשק הניהול אפשר גם לחזור אם מבצעים ctrl+c בזמן הריצה:
[oracle@lnx-oracle66-db11g ~]$ expdp full=y directory=DATA_PUMP_DIR dumpfile=zohar.dmp logfile=zohar.log Export: Release 11.2.0.4.0 - Production on Thu Feb 19 11:12:37 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Username: zohar Password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "ZOHAR"."SYS_EXPORT_FULL_01": zohar/******** full=y directory=DATA_PUMP_DIR dumpfile=zohar.dmp logfile=zohar.log
את אותו הפלט נוכל למצוא גם בקובץ הלוג שלנו (zohar.log) במידה והחלון שלנו כבר לא מציג את הפלט של הפקודה.
אם אין לנו קובץ לוג, נוכל למצוא את שם הג'וב גם בשליפה מתוך בסיס הנתונים:
SQL> SELECT owner_name, job_name, operation, job_mode, state 2 FROM dba_datapump_jobs; OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ZOHAR SYS_EXPORT_FULL_01 EXPORT FULL EXECUTING
התחברות בחזרה לג'וב שרץ
עכשיו שיש לנו את שם הג'וב שרץ, אנחנו יכולים להתחבר אליו בחזרה. כדי לבצע את זה אנחנו צריכים להפעיל מחדש את הפקודה של ה-expdp ולבצע פקודת attach:
[oracle@lnx-oracle66-db11g ~]$ expdp zohar attach=SYS_EXPORT_FULL_01
הפקודה הזו תחבר אותנו לממשק הניהול ותבצע פקודה ראשונית של סטטוס:
[oracle@lnx-oracle66-db11g ~]$ expdp zohar attach=SYS_EXPORT_FULL_01 Export: Release 11.2.0.4.0 - Production on Thu Feb 19 11:19:20 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Job: SYS_EXPORT_FULL_01 Owner: ZOHAR Operation: EXPORT Creator Privs: TRUE GUID: 0F6E661235961287E0530100007FB4DA Start Time: Thursday, 19 February, 2015 11:17:03 Mode: FULL Instance: orcldg Max Parallelism: 1 EXPORT Job Parameters: Parameter Name Parameter Value: CLIENT_COMMAND zohar/******** full=y directory=DATA_PUMP_DIR dumpfile=zohar.dmp logfile=zohar.log State: EXECUTING Bytes Processed: 0 Current Parallelism: 1 Job Error Count: 0 Dump File: /u01/app/oracle/product/11.2.0/dbhome_11204/rdbms/log/zohar.dmp bytes written: 4,096 Worker 1 Status: Process Name: DW00 State: EXECUTING Object Schema: SYSMAN Object Name: EM_TARGET Object Type: DATABASE_EXPORT/SCHEMA/PACKAGE_BODIES/PACKAGE/PACKAGE_BODY Completed Objects: 76 Worker Parallelism: 1 Export>
בשלב הזה נוכל לבצע מבחר פקודות: שינוי חלקים בפקודה המקורית כמו הוספת parallel processes או הוספת קבצי dump file, ביצוע תחקור על המצב הנוכחי, הפסקת תהליך ה-export או אפילו התחברות מחדש לממשק ה-client.
Export> help ------------------------------------------------------------------------------ The following commands are valid while in interactive mode. Note: abbreviations are allowed. ADD_FILE Add dumpfile to dumpfile set. CONTINUE_CLIENT Return to logging mode. Job will be restarted if idle. EXIT_CLIENT Quit client session and leave job running. FILESIZE Default filesize (bytes) for subsequent ADD_FILE commands. HELP Summarize interactive commands. KILL_JOB Detach and delete job. PARALLEL Change the number of active workers for current job. REUSE_DUMPFILES Overwrite destination dump file if it exists [N]. START_JOB Start or resume current job. Valid keyword values are: SKIP_CURRENT. STATUS Frequency (secs) job status is to be monitored where the default [0] will show new status when available. STOP_JOB Orderly shutdown of job execution and exits the client. Valid keyword values are: IMMEDIATE.
עצירת תהליך ה-export
במידה ואנחנו רוצים לעצור את תהליך ה-export אנחנו מבחינים בין שני סוגים של עצירה. הראשון היא עצירה מסודרת (stop_job) שממנה נוכל להמשיך את הפקודה מאוחר יותר והשניה היא עצירה מוחלטת של התהליך על ידי "הריגתו" (kill_job או stop_job=immediate). ברגע שנריץ את הפקודה, הוא יוודא שאנחנו רוצים באמת לעצור את ה-export והתהליך יעצור – בין אם מידית או אחרי כמה דקות. לדוגמה:
Export> kill Are you sure you wish to stop this job ([yes]/no): y
הפעלת תהליך ה-export מחדש
אם ביצענו עצירה מסודרת של התהליך (בעצם ביצענו סוג של suspend) אז נוכל להתחבר מחדש לתהליך ולהפעיל אותו מחדש. נאתר את שם הג'וב שעצרנו – שימו לב בפקודה הבאה ל-state שהוא NOT RUNNING:
SQL> r 1* SELECT owner_name, job_name, operation, job_mode, state FROM dba_datapump_jobs OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ZOHAR SYS_EXPORT_FULL_01 EXPORT FULL NOT RUNNING
נבצע attach מחדש לג'וב:
[oracle@lnx-oracle66-db11g ~]$ expdp attach=SYS_EXPORT_FULL_01 Export: Release 11.2.0.4.0 - Production on Thu Feb 19 11:33:06 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Username: zohar Password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Job: SYS_EXPORT_FULL_01 Owner: ZOHAR Operation: EXPORT Creator Privs: TRUE GUID: 0F6E8EA07E7A1310E0530100007F8CBB Start Time: Thursday, 19 February, 2015 11:32:17 Mode: FULL Instance: orcldg Max Parallelism: 1 EXPORT Job Parameters: Parameter Name Parameter Value: CLIENT_COMMAND zohar/******** full=y directory=DATA_PUMP_DIR dumpfile=zohar.dmp logfile=zohar.log State: IDLING Bytes Processed: 0 Current Parallelism: 1 Job Error Count: 0 Dump File: /u01/app/oracle/product/11.2.0/dbhome_11204/rdbms/log/zohar.dmp bytes written: 4,096 Worker 1 Status: Process Name: DW00 State: UNDEFINED Export>
נפעיל מחדש את הג'וב ונבדוק שהוא התחיל לעבוד (state יהיה ב-executing):
Export> start Export> status Job: SYS_EXPORT_FULL_01 Operation: EXPORT Mode: FULL State: EXECUTING Bytes Processed: 0 Current Parallelism: 1 Job Error Count: 0 Dump File: /u01/app/oracle/product/11.2.0/dbhome_11204/rdbms/log/zohar.dmp bytes written: 94,208 Worker 1 Status: Process Name: DW00 State: EXECUTING Export>
ברגע שביצענו את ההפעלה, נוכל לחדש את הגישה מחדש ל-client:
Export> cont Restarting "ZOHAR"."SYS_EXPORT_FULL_01": zohar/******** full=y directory=DATA_PUMP_DIR dumpfile=zohar.dmp logfile=zohar.log Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM Processing object type DATABASE_EXPORT/SCHEMA/SYNONYM Processing object type DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC Processing object type DATABASE_EXPORT/SCHEMA/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT
שימוש ב-impdp:
כל הדברים שהראיתי פה ניתן לבצע גם עם פקודות של impdp:
Import> help ------------------------------------------------------------------------------ The following commands are valid while in interactive mode. Note: abbreviations are allowed. CONTINUE_CLIENT Return to logging mode. Job will be restarted if idle. EXIT_CLIENT Quit client session and leave job running. HELP Summarize interactive commands. KILL_JOB Detach and delete job. PARALLEL Change the number of active workers for current job. START_JOB Start or resume current job. Valid keywords are: SKIP_CURRENT. STATUS Frequency (secs) job status is to be monitored where the default [0] will show new status when available. STOP_JOB Orderly shutdown of job execution and exits the client. Valid keywords are: IMMEDIATE.
סטטוס של import:
Import> stat Job: SYS_IMPORT_SCHEMA_01 Operation: IMPORT Mode: SCHEMA State: EXECUTING Bytes Processed: 0 Current Parallelism: 1 Job Error Count: 0 Dump File: /u01/app/oracle/product/11.2.0/dbhome_11204/rdbms/log/zohar.dmp Worker 1 Status: Process Name: DW00 State: EXECUTING Object Schema: ZOHAR2 Object Name: MGMT_METRIC_DETAILS_ARRAY Object Type: DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC Completed Objects: 312 Worker Parallelism: 1
השאירו תגובה
Want to join the discussion?Feel free to contribute!