در اوراکل از Datapump و RMAN:Recovery Manager برای ایجاد Backup استفاده می شود. تفاوت اصلی Datapump با RMAN در این است که Datapump تنها از داده ها Backup تهیه می کند ولی RMAN از داده ها و ساختار و تعریف پایگاه داده، Backup تهیه می کند. در نسخه های قدیمی تر اوراکل از دستور ها (ابزار های) exp و imp به ترتیب برای export و import کردن از/به پایگاه داده استفاده می شد. اما از نسخه 10g به بعد، از Datapump که متشکل از دستور های expdp برای export و impdp برای import کردن از/به پایگاه داده استفاده شد. Datapump در نسخه های 10g به قبل قابل استفاده نیست و نمی توان فایل هایی که توسط Datapump بطور مثال در نسخه 11gR2 ایجاد شده را در نسخه 10g استفاده نمود. دستور های exp و imp در نسخه 11g نیز وجود دارد اما در نسخه 12c دیگر این دو ابزار وجود ندارند. دو PL/SQL Package زیر درون اوراکل برای ایجاد Logical Backup وجود دارند :
- BDMS_DATAPUMP
- DBMS_METADATA
Datapump به دو گونه زیر اجرا می شود :
- Command line
- Interactive
در حالت Command line دستور های expdp/impdp را به همراه پارامتر ها از خط فرمان سیستم عامل در یک خط اجرا می کنید، اما در حالت Interactive دستور های expdp/impdp را اجرا می کنید و پس از ورود یک نام کاربری/گذرواژه، در اعلان هایی موارد مورد نیاز پرسیده می شود. توجه داشته باشید که تحت سیستم عامل لینوکس برای اجرای این دستور ها نیازی به مجوز root ندارید، بلکه باید با کاربر oracle دستور ها را اجرا کنید. در اوراکل نصب شده بر روی سیستم عامل لینوکس، نام کاربری oracle عضو گروه dba است که اعضای این گروه مجوز اجرای دستور های اوراکل را دارند.
پیش از اجرای دستور های Datapump نیاز به وجود دایرکتوری برای ذخیره فایل های export شده و خواندن فایل های از آنجا برای import کردن در پایگاه داده است. بصورت پیش فرض یک دایرکتوری به نام DATA_PUMP_DIR برای ذخیره فایل های Datapump ایجاد شده است. برای پیدا کردن مسیر این دایرکتوری از Query زیر استفاده کنید.
select owner, directory_name, directory_path
from dba_directories
;’where directory_name = ‘DATA_PUMP_DIR
WINDOWS OUTPUT
OWNER DIRECTORY_NAME DIRECTORY_PATH
———————————- ——————– —————————–
SYS DATA_PUMP_DIR C:\app\amir\admin\orcl\dpdumpLINUX OUTPUT
حتی می توانید یک دایرکتوری دیگر ایجاد کنید و فایل ها را در آن ذخیره و از آن بخوانید و در هنگام اجرای توسط پارامتر directory مسیر آنرا به دستور های Datapump معرفی کنید.
sqlplus connect / as sysdba
OR
SQL> connect / as sysdba
;’create directory MY_DATADUMP_DIR as ‘PATH_TO_OS_DIR
export/import را می توانید با کاربر SYSTEM که دارای DBA Role یا با هر کاربر دیگری مانند SYS که دارای مجوز SYSDBA است را انجام دهید، اما امکان ایجاد کاربری نیز وجود دارد.
create user datapump_admin identified by secret
default tablespace users
;quota unlimited on users
سپس لازم است مجوز های لازم به کاربر داده شود. دو مجوز datapump_exp_full_database و data_imp_full_database به ترتیب برای انجام export و import به کاربر داده می شوند. همچنین توسط مجوز read و write به ترتیب مجوز خواندن (برای import) و نوشتن (برای export) بر روی دایرکتوری جدید که ایجاد شد، به کاربر داده می شود. دلیل اهدای مجوز create table در ادامه گفته شده است.
;grant create table to datapump_admin
;grant datapump_exp_full_database to datapump_admin
;grant datapump_imp_full_database to datapump_admin
;grant read, write on directory my_datapump_dir to datapump_admin
Export/Import Levels
انجام export/import می تواند در چهار سطح زیر انجام شود.
- FULL
- SCHEMA
- TABLE
- Tablespace
Full exporting
در تمامی دستور های زیر، دستور های Datapump را در حالت Command Line اجرا شده اند. Full Level export/import یعنی اینکه از تمام پایگاه داده export تهیه کنیم یا تمام فایل را در پایگاه داده import کنیم. به این حالت اصطلاحا Entire database level می گویند. دستور زیر نمونه ای از انجام Full exporting می باشد. این دستور را در محیط خط فرمان سیستم عامل اجرا کنید و توجه داشته باشید که در انتهای دستور کاراکتر سمی کالن نیامده است.
expdp datapump_admin/secret directory=my_datapump_dir dumpfile=full.dmp logfile=full.exp.log full=y
نیاز است که توسط کاربری از پایگاه داده export تهیه کنیم. می توان از کاربران مدیریتی مانند sys و یا system استفاده نمود، اما این کاربران در دسترسی عموم نمی باشتد بلکه کاربری ویژه که در دستور های قبلی ایجاد نمودیم و مجوز های لازم را اهدا کردیم، برای export استفاده می شود. این کاربر باید دو مجوز datapump_exp_full_database و data_imp_full_database. در ادامه سه پارامتر که در تمامی سطوح و در دوستور expdp و impdp یک مفهوم را دارند، توضیح داده شده است :
- directory : این پارامتر مشخص کننده دایرکتوری است (غیر از دایرکتوری DATA_PUMP_DIR) که فایل های export در آن ذخیره می شوند. توجه داشته باشید کاربری که توسط آن export را ایجاد می کنید با مجوز write را روی این دایرکتوری داشته باشد.
- dumpfile : نام فایلی را مشخص می کند. فایل در نهایت با این نام در دایرکتوری ذخیره می شود.
- logfile : نام فایل log از عمل export و تمام اعمالی که حین اجرای دستور اتفاق افتاده را ذخیره می کند.
- full=y : این پارامتر مشخص می کند که می خواهیم یک Full export از تمامی اشیا و داده های (جداول، ایندکس ها، View ها) پایگاه داده (تمامی اسکیما ها)، تهیه کنیم. دو مقدار y و n را می گیرد و برای انجام Full exporting باید مقدار y را داشته باشد.
فایل پارامتری، فایلی است که در هر خط آن یک پارامتر دستور expdp/impdp نوشته می شود. بجای اینکه پارامتر ها را در خط فرمان و در جلوی دستور ها بنویسید، می توانید آنها را در این فایل نوشته و سپس نام فایل را در جلوی دستور توسط پارامتر parfile مشخص کنید.
userid=datapump_admin/secret
directory=my_datapump_dir
dumpfile=full.dmp
logfile=full.exp.log
full=y
دستور export مشابه زیر است :
expdp parfile=fulldp.par
- parfile : پارامتری که در جلوی دستور های expdp/impdp مسیر فایل پارامتری را مشخص می کند.
خطوط زیر یک نمونه از خروجی اجرای هر یک از دستور های expdp بالا می باشد.
expdp parfile=tables.par
OUTPUT
Export: Release 11.2.0.2.0 – Production on Thu Aug 29 16:49:05 2013
…
Starting “DATAPUMP_ADMIN”.”SYS_EXPORT_TABLE_01″: datapump_admin/******** parfile=tables.parEstimate in progress using BLOCKS method…
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KBProcessing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported “APP_OWNER”.”TEST” 5.031 KB 5 rows
. . exported “NORMAN”.”NORM” 5.023 KB 4 rows
Master table “DATAPUMP_ADMIN”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for DATAPUMP_ADMIN.SYS_EXPORT_TABLE_01 is:
/srv/oracle/datapump/tables.dmp
Job “DATAPUMP_ADMIN”.”SYS_EXPORT_TABLE_01″ successfully completed at 16:49:12
نام JOB که دستور های expdp/impdp تحت آن اجرا می شوند، دارای فرمت زیر هستند :
schema_name + “.” + “SYS_” + “EXPORT_“ OR “IMPORT_” + Level + “_” + Unique Identifier
در export از عبارت _EXPORT و در import از عبارت _IMPORT استفاده می شود و به انتهای هر کدام یک Unique Identifier الحاق می شود. LEVEL یکی از چهار Level گفته شده در بالا می باشد. Unique Identifier یک عدد منحصر به فرد است که از 01 شروع و در اجرا های همزمان Datapump یکی یکی افزایش می یابد. دو نمونه از Job Name ها به ترتیب برای export و import مانند زیر می باشد :
DATAPUMP_ADMIN.SYS_EXPORT_SCHEMA_01
DATAPUMP_ADMIN.SYS_EXPORT_FULL_01
خطوط زیر نمونه دیگری از خروجی است. به خطوط پر رنگ توجه کنید :
Export: Release 11.2.0.2.0 – Production on Thu Aug 29 15:20:12 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production
With the Partitioning optionStarting “DATAPUMP_ADMIN”.”SYS_EXPORT_FULL_01″: datapump_admin/******** parfile=fulldp.par
Estimate in progress using BLOCKS method…
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 13.75 MBProcessing object type DATABASE_EXPORT/TABLESPACE
Processing object type DATABASE_EXPORT/PASSWORD_VERIFY_FUNCTION
Processing object type DATABASE_EXPORT/PROFILE
Processing object type DATABASE_EXPORT/SYS_USER/USER
…
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE
نام Job که دستور expdp تحت آن انجام شده است ATAPUMP_ADMIN.SYS_EXPORT_FULL_01 نام دارد. هز اجرای دیگر expdp نام متمایز و منحصر به فرد از دیگر Job ها خواهد داشت. در حین اجرای فرایند export جدولی در اسکیمای کاربری که تحت آن دستور expdp را اجرا کردیم ایجاد می شود که در خطوط بالا SYS_EXPORT_FULL_01 نام دارد و اهدای مجوز create table به کاربری که می خواهد export/import را انجام دهد، به خاطر ایجاد همین جدول بود. این جدول پس از تکمیل فرایند export پاک می شود. همچنین باید میزان فضای مناسبی از Tablespace را به کاربر بدهیم، مانند آنچه که در خطوط بالا با میزان unlimited به کاربر داده شد.همچنین میزان فضای تخمین شده شده برای ذخیره فایل export در دایرکتوری مقصد، 13.75 مگابایت می باشد.
Schema exporting
بجای استفاده از پارامتر full برای انجام export از یک یا چند اسکیما، باید از پارامتر schemas استفاده نمود. اسکیما مجموعه از اشیا پایگاه داده، مانند جداول، View ها، ایندکس ها و … تحت مالیکت یک کاربر می باشد. فرض کنید می خواهید تنها از اسکیمای norman فایل export تهیه کنید، پس می توانید یا از فایل پارامتری یا دستور expdp در خط فرمان سیستم عامل با تعیین پارامتر ها جلوی دستور، export ایجاد کنید.
userid=datapump_admin/secret
directory=my_datapump_dir
schemas=norman
reuse_dumpfiles=yexpdp parfile=user_norman.par dumpfile=norman.dmp logfile=norman.exp.log
- schemas : برای گرفتن export از یک یا چند اسکیما استفاده می شود. نام اسیکما ها با , از هم جدا می شوند. schemas=SCHEMA_NAME1, SCHEMA_NAME2, …, SCHEMA_NAMEn.
userid=datapump_admin/secret
directory=my_datapump_dir
schemas=barney,fred,wilma,betty,bambam,dino
reuse_dumpfiles=yexpdp parfile=user_norman.par dumpfile=norman.dmp logfile=norman.exp.log
در دستور های بالا دقت کنید که چندین پارامتر را در فایلی به نام user_norman.par ذخیره کردیم و آنرا توسط پارامتر parfile به دستور معرفی کردیم و چندین پارامتر دیگر را نیز بجای نوشتن در فایل در جلوی دستور expdp نوشتیم.
Tablespace exporting
مانند Schema exporting می باشد، با این تفاوت که جاوی پارامتر tablespaces نام یک یا چند tablespace می آید. اگر از چندین tablespace می خواهید export بگیرید، نام آنها را با , از هم جدا کنید.
userid=datapump_admin/secret
directory=my_datapump_dir
dumpfile=users_ts.dmp
logfile=users_ts.exp.log
tablespaces=users
reuse_dumpfiles=yOR
userid=datapump_admin/secret
directory=my_datapump_dir
dumpfile=users_ts.dmp
logfile=users_ts.exp.log
tablespaces=bedrock_data,bedrock_index
reuse_dumpfiles=yexpdp parfile=user_tablespace.par
Table exporting
مانند Schema exporting می باشد، با این تفاوت که جاوی پارامتر tables نام یک یا چند table می آید. اگر از چندین table می خواهید export بگیرید، نام آنها را با , از هم جدا کنید. جداول اشایی هستند که تحت یک اسکیما ذخیره می شوند و برای مشخص کردن آنها باید بصورت SCHEMA_NAME.TABLE_NAME استفاده کنید. در خصوصط زیر تنها از دو جدول norm از اسکیمای norman و جدول test از اسکیمای app_owner فایل export تهیه می شود.
userid=datapump_admin/secret
directory=my_datapump_dir
dumpfile=tables.dmp
logfile=tables.exp.log
tables=norman.norm,app_owner.test
reuse_dumpfiles=y
- reuse_dumpfile : این پارامتر توسط دستور expdp استفاده می شود. اگر فایل export درون دایرکتوری که می خواهید فایل را در آن ذخیره کنید، وجود داشته باشد (فایل هم نام)، خطای زیر نشان داده می شود.
ORA-27038: created file already exists
یا باید از نامی دیگر استفاده کنید و یا اینکه توسط پارامتر reuse_dumpfile با مقدار y به دستور expdp اجازه بازنویسی یا overwrite روی فایل موجود را بدهید. می توانید آنرا درون فایل پارامتری مانند آنچه که در بالا گفته شد یا مانند دستور زیر، در جلوی دستور expdp بیاورید.
expdp scott/tiger directory=exp_dir dumpfile=tde.dmp tables=example reuse_dumpfiles=y
- estimate_only : همانطور که در بالا گفته شد، برای ذخیره فایل export شده نیاز به میزان فضایی از دیسک می باشد، بطور مثال در بالا فضا به میزان 13.75 مگابایت از دیسک برای ذخیره فایل نیاز بود و پس از تکمیل فرایند export به همین اندازه فضا اشغال شد. می توانید با استفاده از پارامتر estimate_only تخمین بزنید که چه میزان فضا برای ذخیره فایل export بطور مثال برای Full export level لازم است. با استفاده از ایت پارامتر، هیچ فایلی ایجاد نمی شود و تنها در خروجی تخمین می زند که چه میزان فضا لازم است. فرمت کلی استفاده از آن بصورت زیر می باشد :
expdp datapump_admin/secret LEVEL estimate_only=y
بطور مثال برای تخمین میزان فضای لازم، برای ذخیره فایل export از انجام Full export از دستور زیر استفاده کنید :
expdp datapump_admin/secret full=y estimate_only=y
OUTPUT
Export: Release 11.2.0.2.0 – Production on Thu Aug 29 16:27:26 2013
…
Starting “DATAPUMP_ADMIN”.”SYS_EXPORT_FULL_01″: datapump_admin/******** full=y estimate_only=y
Estimate in progress using BLOCKS method…
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
…
. estimated “SYSTEM”.”REPCAT$_TEMPLATE_TARGETS” 0 KB
. estimated “SYSTEM”.”REPCAT$_USER_AUTHORIZATIONS” 0 KB
. estimated “SYSTEM”.”REPCAT$_USER_PARM_VALUES” 0 KB
. estimated “SYSTEM”.”SQLPLUS_PRODUCT_PROFILE” 0 KB
Total estimation using BLOCKS method: 13.75 MB
Job “DATAPUMP_ADMIN”.”SYS_EXPORT_FULL_01″ successfully completed at 16:27:39