ده مثال کاربردی برای Data Pump

مثال 1: اجرای همروند دستور expdp و ذخیره دامپ فایل در دیسکهای مختلف:

SQL> create directory dir1 as ‘/disk1/dmp1′;
Directory created.
SQL> create directory dir2 as ‘/disk2/dmp2′;
Directory created.
SQL> create directory dir3 as ‘/disk3/dmp3′;
Directory created.

[oracle@DB ~]$ expdp usef/a dumpfile=dir1:dump1.dmp,dir2:dump2.dmp,dir3:dump3.dmp logfile=dir1:logdmp.txt full=y parallel=3

مثال 2: تهیه دامپ از اشیای کاربر usef به جز جداولی که نام آنها با عبارت TBL شروع می شود:

[oracle@DB ~]$expdp directory=drm dumpfile=usef.dmp schemas=usef EXCLUDE=TABLE:”LIKE ’TBL%’”
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported “USEF”.”MYTBL3″ 6.25 KB 15 rows
. . exported “USEF”.”OTHTBL3″ 6.257 KB 15 rows
Job “USEF”.”SYS_EXPORT_SCHEMA_01″ successfully completed

نکته: علاوه بر عبارت like، می توان از not like هم در این دستور استفاده کرد.
توجه: اسامی اشیای کاربر usef به صورت زیر می باشند:

SQL> select object_name,object_type from dba_objects where owner=’USEF’;
OBJECT_NAME OBJECT_TYPE
——————– ———————–
TBL1 TABLE
TBL2 TABLE
TBL3 TABLE
MYTBL3 TABLE
OTHTBL3 TABLE
MYPROC2 PROCEDURE
MYPROC1 PROCEDURE

مثال 3: تهیه دامپ از پروسیجر myproc1 و جدول tbl1، tbl2 و mytbl3 از کاربر usef:

[oracle@DB ~]$expdp directory=drm dumpfile=usef.dmp schemas=usef include=procedure:”in(‘MYPROC1’)” include=table:”in(‘TBL1’,’TBL2’,’MYTBL3’)”
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
. . exported “USEF”.”MYTBL3″ 6.25 KB 15 rows
. . exported “USEF”.”TBL1″ 6.25 KB 15 rows
. . exported “USEF”.”TBL2″ 6.25 KB 15 rows
Job “USEF”.”SYS_EXPORT_SCHEMA_01″ successfully completed

مثال 4: تهیه دامپ با مجوز sysdba:

[oracle@DB ~]$expdp ’sys/sys AS SYSDBA’ parfile=par.dmp

مثال 5:ایجاد دامپ از جدول tbl بر اساس سال:

SQL> select to_char(time,’YYYY’),count(*) from usef.tbl group by to_char(time,’YYYY’);
TO_C COUNT(*)
—- ———-
2013 2
2018 1
2011 3

[oracle@DB ~]$expdp directory=drm dumpfile=Y2011.dmp tables=usef.tbl QUERY=usef.tbl:”WHERE to_char(time,’YYYY’)=2011”
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported “USEF”.”TBL” 5.507 KB 3 rows
Job “USEF”.”SYS_EXPORT_TABLE_01″ successfully completed

مثال 6: فیلتر رکوردهای یک جدول بر اساس رکوردهای جدول دیگر(پیوند بین دو جدول) با کمک عبارت ku$:
تنظیمات مربوط به parfile:

[oracle@DB ~]$ vi param.par
userid=usef/abc@PDB
directory=dir
dumpfile= wh_qu_pump.dmp
logfile= wh_qu_pump.txt
tables= mytbl
query= mytbl:”where exists (select 1 from mytbl2 t where ku$.file#=t.file#)”

اجرای دستور expdp با استفاده از پارفایل param.par:

[oracle@DB ~]$ expdp parfile=param.par
Export: Release 18.0.0.0.0 – Production on Wed Apr 4 09:40:45 2018 Version 18.1.0.0.0
. . exported “USEF”.”MYTBL” 19.67 KB 2 rows
Master table “USEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded
Job “USEF”.”SYS_EXPORT_TABLE_01″ successfully completed at Wed Apr 4 09:41:00 2018 elapsed 0 00:00:14

مثال 7:استخراج دستورات ddlای مربوط به ایندکسهای جداول موجود در دامپ:

[oracle@DB ~]$impdp usef/a dumpfile=dir1:dump1.dmp,dir2:dump2.dmp,dir3:dump3.dmp sqlfile=dir1:ind.txt include=index

نمونه ای از محتویات فایل ind.txt:

CREATE INDEX “USEF”.”IND” ON “USEF”.”TBL1″ (“NAME”)
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE “USERS” PARALLEL 1 ;

ALTER INDEX “USEF”.”IND” NOPARALLEL;

مثال 8: تهیه دامپ از اشیای دیتاگارد با کمک dblink

برای این کار، ابتدا در بانک سوم، dblinkای را ایجاد می کنیم:

SQL> create public database link us_dg connect to usef identified by abc using ‘tns_dg’;
Database link created.

اجرای دستور expdp در بانک ثالث و برقراری ارتباط با دیتاگارد:

[oracle@DB ~]$expdp usef/abc@pdb1 directory=dr network_link=us_dg dumpfile=test_dg.dmp tables=test_us
Export: Release 12.2.0.1.0 – Production on Wed Feb 21 10:26:00 2018
. . exported “USEF”.”TEST_US” 31.43 KB 14 rows
Master table “USEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded
Job “USEF”.”SYS_EXPORT_TABLE_01″ successfully completed at Wed Feb 21 10:26:28 2018 elapsed 0 00:00:27

نکته: استفاده از این روش معایبی چون عدم پشتیبانی از large objectها و نیز زمانبر بودن را در پی خواهد داشت.
مثال 9: دستور expdp برای مدت زمان طولانی در حال اجرا می باشد برای توقف(shutdown) موقت بانک، چه باید کرد تا بعد از استارت مجدد آن، expdp به کارش ادامه دهد؟ در مثال زیر، به این سوال، پاسخ داده شده است:

تعیین نام job :

SQL>select job_name from dba_datapump_jobs l where state=’EXECUTING’;
SYS_EXPORT_FULL_01

دستور expdp به صورت زیر در جریان می باشد:

Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported “USEF”.”TBL222″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL33″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL44″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL55″ 303.2 MB 3452628 rows

قبل از shutdown بانک، به این job متصل شده و ان را متوقف می کنیم:

 

[oracle@DB ~]$expdp usef/a attach=SYS_EXPORT_TABLE_01
Export> stop_job
Are you sure you wish to stop this job ([yes]/no): yes

با این کار، پیام زیر در logfile مربوطه قابل مشاهده می باشد:

Job “USEF”.”SYS_EXPORT_TABLE_01″ stopped by user request at Mon Jun 11 15:09:44 2018 elapsed 0 00:00:31

بعد از توقف job، بانک را restart می کنیم:

SQL> startup force;
ORACLE instance started.
Total System Global Area 4982831184 bytes
Fixed Size 8906832 bytes
Variable Size 1174405120 bytes
Database Buffers 3791650816 bytes
Redo Buffers 7868416 bytes
Database mounted.
Database opened.

برای ادامه دادن به اجرای دستور expdp، به job مورد نظر متصل می شویم:

[oracle@DB ~]$expdp usef/a attach=SYS_EXPORT_TABLE_01

این job را استارت می کنیم:

Export> start_job

با این کار، عملیات تهیه دامپ، به کارش ادامه خواهد:

Job “USEF”.”SYS_EXPORT_TABLE_01″ stopped by user request at Mon Jun 11 15:09:44 2018 elapsed 0 00:00:31
Job SYS_EXPORT_TABLE_01 has been reopened at Mon Jun 11 15:10:43 2018
Restarting “USEF”.”SYS_EXPORT_TABLE_01″: usef/******** dumpfile=dir1:dump1.dmp logfile=dir1:logdmp.txt tables=tbl11,tbl222,tbl33,tbl44,tbl55,tbl66,tbl77,tbl88 REUSE_DUMPFILES=y
. . exported “USEF”.”TBL66″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL77″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL88″ 303.2 MB 3452628 rows
. . exported “USEF”.”TBL11″ 303.2 MB 3452628 rows
Master table “USEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded

مثال 10: چگونه می توان expdp در حال اجرا را متوقف کرد؟
نکته: معمولا بستن ترمینالی که دستور expdp در ان اجرا شده است، سبب متوقف شدن اجرای دستور expdp نخواهد شد این حالت برای سیگنال ctrl+c هم صادق است.
روش اول:

SQL>select ‘alter system kill session ‘’’||sid || ‘,’ || s.serial# ||’’’ immediate;’ “KILL_COMMAND” ,program from v$session s where program like ‘%DW%’ and s.MODULE like ‘%Pump%’;
KILL_COMMAND PROGRAM
————————————————– ——————–
alter system kill session ‘132,23612’ immediate; oracle@DB (DW00)

SQL> alter system kill session ‘132,23612’ immediate;
ORA-00031: session marked for kill

با اجرای این دستور، خطای زیر در ترمینال مربوط به اجرای دستور expdp مشاهده خواهد شد:

ORA-39014: One or more workers have prematurely exited.
ORA-39029: worker 1 with process name “DW00” prematurely terminated
ORA-31671: Worker process DW00 had an unhandled exception.
ORA-00028: your session has been killed

روش دوم:

SQL>select job_name from dba_datapump_jobs where state=’EXECUTING’;
SYS_EXPORT_FULL_01

[oracle@DB ~]$ expdp ’sys/sys AS SYSDBA’ attach=SYS_EXPORT_FULL_01
Export: Release 12.2.0.1.0 – Production on Mon Jun 11 14:03:54 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production
Job: SYS_EXPORT_FULL_01
Owner: SYS
Operation: EXPORT
Creator Privs: TRUE
GUID: 6E5B6F0DC8ED434FE0530688200AAC1A
Start Time: Monday, 11 June, 2018 14:02:53
Mode: FULL
Instance: usefdb18
Max Parallelism: 1
Timezone: +00:00
Timezone version: 31
Endianness: LITTLE
NLS character set: AL32UTF8
NLS NCHAR character set: AL16UTF16
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND “sys/******** AS SYSDBA” dumpfile=dir1:dump1.dmp logfile=dir1:logdmp.txt full=y REUSE_DUMPFILES=y
TRACE 0
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Job heartbeat: 1
Dump File: /home/oracle/dmp1/dump1.dmp
bytes written: 12,288
Worker 1 Status:
Instance ID: 1
Instance name: usefdb18
Host name: DB
Object start time: Monday, 11 June, 2018 14:03:54
Object status at: Monday, 11 June, 2018 14:03:54
Process Name: DW00
State: EXECUTING
Export> kill_job
Are you sure you wish to stop this job ([yes]/no): yes

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *