بطور معمول و پیش فرض در هنگام import داده ها در بانک مقصد، جداول با همان نام قبلی و در همان schema و tablespace بارگذاری می شوند، مگر آنکه با استفاده از برخی پارامترها نام و مکان آنها را تغییر دهیم که در ادامه با این پارامترها آشنا می شویم.
REMAP_TABLE
REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
توسط این پارامتر می توان نام جدول و یا پارتیشن را در زمان import تغییر داد. بین نام فبلی و نام جدید جدول از کاراکتر : استفاده می شود و برای تغییر نام چند جدول هم می توان از چند پارامتر remap_table استفاده کرد.
مثال 1: نام جدول hr.employees به hr.emps تغییر داده می شود.
~]$ impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expschema.dmp TABLES=hr.employees REMAP_TABLE=hr.employees:emps
مثال 2: بطور همزمان نام چند جدول را تغییر خواهیم داد.
~]$ impdp ali DIRECTORY=dmp_dir DUMPFILE=test_export.dmp REMAP_TABLE=test_tbl1:table01 REMAP_TABLE=test_tbl2:table02 REMAP_TABLE=test_tbl3:table03 REMAP_TABLE=ns.payment:pay_01
هر عبارتی پس از کاراکتر : بعنوان نام جدید جدول درنظر گرفته می شود و ممکن است باعث بروز مشکلاتی در نام گذاری جدول شود.
بعنوان مثال، با اجرای دستور زیر، عبارت ali.tbl_j_test02 بعنوان نام جدید جدول tbl_s_test در اسکیمای naser درنظر گرفته خواهد شد:
~]$ impdp naser directory=dump dumpfile=tbl_s_test.dmp remap_table=tbl_s_test:ali.tbl_j_test02
نکته 1: برای بارگذاری جدول در یک اسکیمای دیگر می توان از پارامتر remap_schema استفاده کرد و مالک جدول را تغییر داد. در ادامه به پارامتر remap_schema خواهیم پرداخت.
نکته 2: پارامتر remap_table، هنگام بارگذاری، فقط برروی جداول داخل فایل دامپ اعمال می شود و هیچ تغییری در نام جداول موجود در بانک مقصد ایجاد نمی کند.
مثال :
SQL> select table_name from all_tables where owner=’ALI’
TABLE_NAME
——————————
TBL_ALI_TEST
TBL01
TBL02
TBL03
~]$ impdp ali directory=dump dumpfile=test.dmp remap_schema=naser:ali
remap_table=tbl01:rename_tbl01
. . .
SQL> select table_name from all_tables where owner=’ALI’
TABLE_NAME
——————————
TBL_ALI_TEST
TBL01
TBL02
TBL03
RENAME_TBL01
همانطور که می بینید هیچ تغییری در نام جدول TBL01 که قبلا در اسکیمای ali بود، ایجاد نشده است.
نکته 3: تغییر نام پارتیشن جدول ، فقط در حالت departition امکان پذیر است. رجوع شود به پارامتر partition_option .
مثال:
~]$ impdp ali directory=dump dumpfile=test.dmp remap_table=ali.tbl01.tbl01_p1:payment_90 partition_option=departition
REMAP_SCHEMA
REMAP_SCHEMA=source_schema:target_schema
این پارامتر در زمان import، آبجکتهای اسکیمای مبدا را در اسکیمای تعیین شده بارگذاری می کند همچنین امکان انتقال آبجکتهای چند اسکیما به یک اسکیما در بانک مقصد وجود دارد اما نمی توان ابجکتهای یک اسکیما را به چند اسکیمای جدید انتقال داد. توجه کنید که هر تغییر اسکیمایی می بایست در یک پارامتر جدا تنظیم شود.
Remap_schema=naser:ali
Remap_schema=hr:ali
Remap_schema=cid:cis
در صورتی که اسکیمای جدید در بانک مقصد وجود نداشته باشد، اوراکل آنرا ایجاد می کند، به شرط آنکه فایل دامپ با سطح دسترسی لازم ایجاد شده باشد (مثلا dba) تا حاوی دستورات متاداده ای create user برای ایجاد اسکیما باشد.
مثال : در دستورات زیر، چون در زمان export از کاربر system استفاده شده است و کاربر system دسترسی لازم را دارد، فایل دامپ با دستورات create user ایجاد می شود:
~]$ expdp SYSTEM/password FULL=y
~]$ expdp SYSTEM/password SCHEMAS=hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
. . .
~]$ impdp SYSTEM/password DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
REMAP_SCHEMA=hr:scott
در مثال فوق چون با کاربر system اکسپورت گرفته شده ، در زمان import حتی اگر کاربر scott وجود نداشته باشد ، بصورت خودکار توسط سیستم ایجاد می شود.
در این حالت پس از ایجاد اسکیما توسط اوراکل و انتقال آبجکتها به آن ، برای دسترسی به اسکیمای جدید باید ابتدا پسورد کاربر جدید تنظیم شود.
درصورتی که فایل دامپ با سطح دسترسی کافی ایجاد نشده باشد و دسترسی کافی نداشته باشد، عملیات با خطا متوقف می شود.
اگر کاربر import کننده دسترسی کافی برای remap کردن یک اسکیما به اسکیمای دیگر را نداشته باشد، فقط می تواند ابجکتها را به اسکیمای خودش انتقال دهد.
مثال :در مثال زیر کاربر nas2 (بدلیل نداشتن سطح دسترسی کافی) نمی تواند آبجکتهای اسکیمای naser را به اسکیمای ali انتقال دهد، ولی می تواند به اسکیمای خودش منتقل کند.
~]$ impdp nas2 directory=dump dumpfile=test.dmp remap_schema=naser:ali
. . .
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31631: privileges are required
ORA-39122: Unprivileged users may not perform REMAP_SCHEMA remappings.
REMAP_TABLESPACE
REMAP_TABLESPACE=source_tablespace:target_tablespace
در زمان import جهت بارگذاری آبجکتهای یک tablespace در tablespace دیگر، از این پارامتر استفاده می شود. البته tablespace جدید باید قبلا در بانک مقصد ایجاد شده باشد و همچنین اسکیمای مورد نظر در بانک مقصد، باید دسترسی به tablespace جدید را داشته باشد.
برای جابجایی چند tablespase می توان از چند پارامتر remap_tablespace استفاده کرد. توجه داشته باشید که هر tablespace مبدا نمی تواند به بیش از یک tablespace در مقصد map شود. اما چند tablespace می توانند به یک tablespace در مقصد map شوند.
نکته : در صورتی که فایل دامپ بصورت full=y تهیه شده باشد و کاربر import کننده دسترسی کافی (مثلا dba grant) داشته باشد، درصورت عدم وجود tablespace، اوراکل آنرا ایجاد می کند.
مثال :
~]$ expdp naser directory=dump dumpfile=full_testdb.dmp full=y
. . .
SQL> grant dba to ali;
~]$ impdp ali directory=dump dumpfile=full_testdb.dmp remap_tablespace=nastbs:dept_tbls
در مثال بالا اگر dept_tbls در بانک مقصد وجود نداشته باشد، چون کاربر ali دسترسی کافی دارد، بصورت خودکار ایجاد می شود.
REMAP_DATAFILE
REMAP_DATAFILE=source_datafile:target_datafile
همانطور که می دانید data pump درصورت لزوم در فایل دامپ، دستورات DDL ای را نظیر CREATE TABLESPACE ، CREATE LIBRARY و CREATE DIRECTORY جهت ایجاد datafile مورد نیاز را نیز قرار می دهد، تا در بانک مقصد datafile را در همان مسیر و با همان نام ایجاد کند. این پارامتر(REMAP_DATAFILE) در زمان import ، در صورت لزوم، نام و مسیر datafile های جدید را تعیین می کند.
این پارامتر معمولا زمانی استفاده می شود که قصد انتقال اطلاعات بین دو platform با قواعد مختلف نامگذاری فایل ها را داریم. اوراکل توصیه می کند که نام مبدا و مقصد داخل کاراکتر ‘ قرار گیرد تا از ایجاد ابهام جلوگیری شود.
نکته 1: کاربر import کننده باید نقش IMP_FULL_DATABASE را داشته باشد.
نکته 2: چون در نام datafile ها از کاراکتر ‘ استفاده می شود بهتر است پارمتر remap_datafile داخل پارامترفایل قرار گیرد.
نکته 3: پارامترهای reuse_datafile و remap_datafile در full import استفاده می شوند.
در زیر یک نمونه از پارمتر remap_datafile آمده است که نام datafile جدید را از قالب ویندوزی به قالب لینوکسی مشخص می کند:
REMAP_DATAFILE=’d:\oracle\hrdata\payroll\tbs6.dbf’:’/db1/hrdata/payroll/tbs6.dbf’
REUSE_DATAFILES
REUSE_DATAFILES=[yes | no]
این پارامتر تعیین می کند که در زمان import ، اگر datafile ی از قبل وجود دارد ، اطلاعات فایل دامپ به آن اضافه شود (مقدار yes) یا مجددا آنرا ایجاد کند (مقدار پیشفرض no) که البته در این صورت اطلاعات موجود در آن از بین می رود.
نکته 1: اگر datafile وجود داشته باشد و reuse_datafile=n باشد یا استفاده نشود، یک پیغام خطای CREATE TABLESPACE صادر می شود ولی عملیات import به کار خود ادامه می دهد.
نکته 2: پارامتر reuse_datafile و remap_datafile در full import استفاده می شوند.
Comment (1)