پارامترهای REMAP در ابزار IMPDP

بطور معمول و پیش فرض در هنگام 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 استفاده می شوند.

 

آدرس کانال تلگرام: ORACLEDB@

Comment (1)

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

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