ניהול ג'ובים של 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
0 תגובות

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

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