استفاده از DataBaseLink در ابزارهای expdp/impdp

گاهی بدلایل مختلف، مانند عدم فضای کافی یا عدم دسترسی مستقیم به سیستم عامل، امکان تهیه دامپ بر روی ماشین/سرور مبدا مهیا نمی باشد. در این مواقع datapump این امکان را فراهم نموده تا فایل دامپ را بر روی یک ماشین/سرور دیگر ایجاد کنیم یا اطلاعات را بدون ایجاد فایل دامپ، مستقیما بر روی بانک مقصد بارگذاری نماییم. برای این منظور از ارتباط database link بین دو بانک اطلاعاتی استفاده می شود.

پارامتر NETWORK_LINK

NETWORK_LINK=source_database_link

به کمک پارامتر network_link می توان نیازهای شرح داده شده در قسمت بالا را محقق نمود.

پارامتر network_link موجب می شود عملیات export/import بدون ایجاد فایل دامپ بر روی بانک مبدا، انجام شود. در این پارامتر،  نام دیتابیس لینک به بانک مبدا مشخص می شود که قبلا در بانک مقصد ایجاد شده است.

ایجاد database_link در بانک مقصد

تنظیم فایل tnsname.ora :

~]$  vi $ORACLE_HOME/network/admin/tnsnames.ora

yazddbs =

  (DESCRIPTION =

    (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.50)(PORT = 1521)))

    (CONNECT_DATA = (SERVICE_NAME = yzd))

  )

ساخت dblink :

SQL> create  public  database  link  yazd_dblink  connect to naser  identified by naser using ‘yazddbs’;

نکته : توجه داشته باشید که dblink مورد استفاده نباید از نوع current-user باشد.

در زمان export، به کمک پارامتر network_link ، پس از استخراج اطلاعات از بانک مبدا، فایل دامپ برروی ماشین/سروری که دستور را اجرا کرده ایجاد می شود.

مثال : در مثال های زیر yazd_dblink و mydb_1 نام دیتابیس لینک به بانک های دیگر هستند.

~]$ expdp   naser   directory=dumpdir   dumpfile=test_exp01.dmp  full=y  network_link=yazd_dblink 

~]$ expdp  naser  directory=dumpdir   network_link=mydb_1 tables=usef.tbl_person   dumpfile=test_exp02.dmp  

در زمان import، استفاده از این پارامتر موجب می شود اطلاعات مستقیما از بانک مبدا (source_database_link) خوانده شده و در بانک مقصد (سرور جاری که صادرکننده ی دستور است) بارگذاری شود و هیچگونه فایل دامپی ایجاد نمی شود به همین دلیل در زمان import ، پارامترهای directory و dumpfile تنظیم نمی شوند.

مثال :

~]$ impdp   hr/hr   tables=naser.employees   network_link=testdbl_2   exclude=constraint  

همانطور که در مثال بالا مشاهده می کنید، فایل دامپ و دایرکتوری مشخص نشده است.

در زمان import با استفاده از پارامتر network_link ، به نکات زیر توجه داشته باشید.

1.کاربر اجرا کننده ی دستور در بانک مقصد (ماشین/سروری که دستور در آن صادر شده) باید نقش imp_full_database و کاربر مورد استفاده در دیتابیس لینک، باید در بانک مبدا نقش exp_full_database داشته باشد.

2.اگر بانک مبدا (source_database_link) در حالت read-only باشد ، کاربر سمت بانک مبدا باید یک tablespace داخلی داشته باشد که به عنوان default temporary استفاده شود.

3.استفاده از پارامتر tables موجب می شود کل جدول import شود و نمی توان بخشی از جدول مثل پارتیشن را مشخص کرد.

4.هنگام استفاده از پارامتر tables می بایست نام اسکیما مشخص شود و در این صورت باید نام اسکیمای تعیین شده در بانک مقصد وجود داشته باشد. در غیر این صورت، می بایست از پارامتر remap_schema استفاده کنیم.

مثال: در مثال زیر فرض شده است که اسکیمای naser وجود ندارد و جدول employees در اسکیمای hr بارگذاری خواهد شد.

~]$ impdp   hr/hr   tables=naser.employees   network_link=testdbl_2   exclude=constraint   remap_schema=naser:hr

5.در زمان import پارامترهای flashback_scn ،flashback_time ، estimate ، tranpotable و transport_tablespaces همواره با پارامتر network_link استفاده می شوند.

 

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

Comments (3)

  1. با تشکر از مطالب مفیدی که در سایتتون قرار میدید.
    فقط یه نکته در زمینه این مطلبی که عنوان کردید آیا حجم دیتای بالا(مثلا 1 یا 2 ترابایت) هم می توان
    با این روش انتقال داد یا خیر؟

    ممنون

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.