برای تهیه دامپ در محیط data guard، می توان از ابزار Exp بصورت مستقیم و از ابزار Expdp به صورت غیرمستقیم(با کمک database link) استفاده کرد همچنین با تبدیل data guard به snapshot standby، هم می توان مجددا از ابزار Expdp به صورت مستقیم بهره گرفت.
در ادامه به بررسی این سه روش خواهیم پرداخت.
- Exp
در دستور زیر، با کمک ابزار exp در محیط data guard، از جدول test_us دامپ گرفته می شود. این کار بدون هیچ تغییر خاصی، در این محیط قابل انجام است:
exp usef/a file=’/u01/oracle/e.dmp’ tables=test_us
Export: Release 12.2.0.1.0 – Production on Wed Feb 21 10:39:39 2018
. . exporting table TEST_US 14 rows exported
EXP-00091: Exporting questionable statistics.
Export terminated successfully with warnings.
- EXPDP و DBLINK
همانطور که در ابتدای متن اورده شد، تهیه دامپ مستقیم برای Expdp امکان پذیر نمی باشد مگر انکه استندبای، در حالت snapshot standby قرار داشته باشد(این امکان ناپذیری، به عدم قابلیت ساخت Master table در حالتread-only برمی گردد). با اجرای expdp در این محیط، این دستور با خطای زیر، متوقف خواهد شد:
expdp usef/abc directory=dr dumpfile=test_dg.dmp tables=test_us
ORA-31626: job does not exist
ORA-31633: unable to create master table “USEF.SYS_EXPORT_TABLE_05”
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 95
ORA-06512: at “SYS.KUPV$FT”, line 1038
ORA-16000: database open for read-only access
برای حل این مسئله، می توان روش دیگری را برگزید، در این روش، ابتدا باید به بانک دیگری متصل شد و با ایجاد dblink، ارتباطی را بین این بانک دوم با data guard برقرار کرد و سپس با کمک این dblink، از اطلاعات موجود در data guard، دامپی را تهیه کرد.
مثال زیر ببینید.
در این مثال، ابتدا در بانک دوم به عبارتی دیگر، بانکی که قرار است Expdp بر روی ان اجرا شود، دایرکتوری ای را ایجاد می کنیم:
SQL> create directory dr as ‘/oracle’;
Directory created.
پس از ایجاد دایرکتوری، database linkای را در همین محیط برای اتصال به data guard می سازیم:
SQL> create public database link us_dg connect to usef identified by abc using ‘tns_dg’;
Database link created.
عبارت tns_dg در دستور ساخت dblink، به نام tnsای اشاره دارد که در فایل tnsnames.ora تعریف شده است:
tns_dg =
(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.56.4)(PORT = 1521)))
(CONNECT_DATA =
(SID =dg)
(SERVER = DEDICATED) ))
در نهایت دستور Expdp را اجرا می کنیم:
expdp usef/a@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ها و نیز زمانبر بودن نسبی عملیات را در پی خواهد داشت.
- EXPDP و SNAPSHOT STANDBY
همانطور که در ابتدای متن هم عنوان شد، در حالت snapshot standby هم می توان از دستور expdp بهره گرفت. در ادامه ضمن تبدیل data guard به snapshot standby، از کاربر usef دامپی را تهیه خواهد شد.
برای این کار، باید ابتدا استندبای را از حالت ریکاور خارج کرد:
SQL> recover managed standby database cancel;
Media recovery complete.
سپس با اجرای دستور زیر، standby را به حالت snapshot standby منتقل نمود:
SQL> alter database convert to snapshot standby;
Database altered.
در نهایت، بانک را در وضیعت open قرار داد:
SQL> alter database open;
Database altered.
در این مرحله امکان تهیه دامپ از standby امکان پذیر خواهد بود:
expdp \’sys/sy AS SYSDBA\’ directory=dr dumpfile=dump.dmp schemas=usef
Export: Release 11.2.0.4.0 – Production on Sun Apr 15 17:44:47 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Total estimation using BLOCKS method: 128 KB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . exported “USEF”.”TBL97″ 18.78 KB 5 rows
. . exported “USEF”.”TBL_USEF” 18.79 KB 5 rows
Master table “SYS”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
بعد از اجرای موفق این دستور، استندبای را به حالت اول بر می گردانیم:
SQL> startup mount force;
Database mounted.
SQL> alter database convert to physical standby;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.