استفاده از Preplugin Backup در اوراکل 18c

از اوراکل 18c،با plug کردن یک pdb به cdb دیگر، امکان استفاده از بکاپهای قدیمی این pdb در cdb جدید امکان پذیر است. در ادامه با یک مثال، خواهیم دید که چگونه می توان از بکاپ pdb18c که ماقبل عملیات plug تهیه شده است، استفاده کرد و دیتافایلهای از دست رفته ای را بدون از دست دادن حتی رکوردی(چه قبل از plug و چه بعد از ان) برگرداند.

جهت انجام این سناریو، قبل از unplug کردن pdb مورد نظر، tablespace، کاربر و همچنین جدولی را ایجاد می کنیم تا از انها برای انجام تست بکاپ/ریکاوری استفاده کنیم:

–in cdb1–

SQL> alter session set container=pdb18c;

Session altered.

SQL> create tablespace tbs01 datafile ‘/u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/tbs01.dbf’ size 100m;

Tablespace created.

SQL> create user usef identified by a default tablespace tbs01;

User created.

SQL> grant dba to usef;

Grant succeeded.

SQL> create table usef.tbl(name varchar2(9));

Table created.

SQL> insert into usef.tbl values(‘USEF’);

1 row created.

SQL> commit;

Commit complete.

در همین cdb، از pdb18c بکاپی را تهیه می کنیم:

–in cdb1–

RMAN> BACKUP PLUGGABLE DATABASE Pdb18c  format ‘/18c/bkp/%U’ PLUS ARCHIVELOG format ‘/18c/bkp/%U’;

Starting backup at 28-JUN-18

current log archived

input archived log thread=1 sequence=67 RECID=27 STAMP=979995400

input archived log thread=1 sequence=68 RECID=28 STAMP=979995401

input archived log thread=1 sequence=69 RECID=29 STAMP=979995409

piece handle=/18c/bkp/0vt6j2oi_1_1 tag=TAG20180628T125650 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15

input datafile file number=00057 name=/u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_sysaux_fm96sf4s_.dbf

input datafile file number=00056 name=/u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_system_fm96sf4q_.dbf

input datafile file number=00058 name=/u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_undotbs1_fm96sf4t_.dbf

input datafile file number=00059 name=/u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/tbs01.dbf

piece handle=/18c/bkp/10t6j2p2_1_1 tag=TAG20180628T125706 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15

current log archived

input archived log thread=1 sequence=70 RECID=30 STAMP=979995441

piece handle=/18c/bkp/11t6j2ph_1_1 tag=TAG20180628T125721 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 28-JUN-18

بعد از تهیه بکاپ، این pdb را unplug می کنیم:

–in cdb1–

SQL> alter pluggable database pdb18c close immediate;

Pluggable database altered.

SQL> alter pluggable database pdb18c unplug into ‘/18c/pdb18c.xml’;

Pluggable database altered.

SQL> drop pluggable database pdb18c keep datafiles;

Pluggable database dropped.

و در همان ماشین، ان را به cdb2 پلاگ(plug) می کنیم:

–in cdb2–

SQL> create pluggable database Pdb18c using ‘/18c/pdb18c.xml’ NOCOPY;

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         6 PDB18C                         MOUNTED

SQL> alter pluggable database PDB18C open;

Pluggable database altered.

عملیات plug/unplug به درستی انجام شد! حال جهت انجام تست، به جدول tbl رکورد دومی را اضافه می کنیم، تا بعد از انجام عملیات ریکاوری، از برگشت رکوردهای بعد از plug اطمینان حاصل کنیم:

SQL> alter session set container=pdb18c;

Session altered.

SQL> select name from usef.tbl;

NAME

———

USEF

SQL> insert into usef.tbl values(‘VAHID’);

1 row created.

SQL> commit;

Commit complete.

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter system switch logfile;

System altered.

بعد از درج این رکورد، دیتافایلهای این pdb را حذف می کنیم:

SQL> alter session set container=pdb18c;

Session altered.

[oracle@cdb2 ~]$ rm -rf /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/*

با حذف این دیتافایلها، بدیهی است که اطلاعات جدول tbl هم در دسترس نخواهند بود:

SQL> alter session set container=pdb18c;

Session altered.

SQL> startup force;

ORA-01157: cannot identify/lock data file 46 – see DBWR trace file

حال از این دیتافایلها، تنها یک نسخه بکاپ در دسترس است که ان هم به قبل از plug شدن این pdb در cdb2 برمی گردد. با ویژگی جدید اوراکل در نسخه 18c، می توان از این نسخه بکاپ، برای برگرداندن دیتافایلها استفاده کرد. در ابتدا لیست بکاپهای ماقبل از plug این pdb را مشاهده می کنیم:

–in cdb2–

RMAN> SET PREPLUGIN CONTAINER=pdb18c;

executing command: SET PREPLUGIN CONTAINER

using target database control file instead of recovery catalog

RMAN> LIST PREPLUGIN BACKUP OF PLUGGABLE DATABASE pdb18c;

List of Backup Sets

===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

——- —- — ———- ———– ———— —————

31      Full    530.55M    DISK        00:00:08     28-JUN-18     

        BP Key: 31   Status: AVAILABLE  Compressed: NO  Tag: TAG20180628T125706

        Piece Name: /18c/bkp/10t6j2p2_1_1

  List of Datafiles in backup set 31

  Container ID: 6, PDB Name: PDB18C

  File LV Type Ckp SCN    Ckp Time  Abs Fuz SCN Sparse Name

  —- — —- ———- ——— ———– —— —-

  43      Full 19703906   28-JUN-18              NO    /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_system_fm96sf4q_.dbf

  44      Full 19703906   28-JUN-18              NO    /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_sysaux_fm96sf4s_.dbf

  45      Full 19703906   28-JUN-18              NO    /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_undotbs1_fm96sf4t_.dbf

  46      Full 19703906   28-JUN-18              NO    /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/tbs01.dbf

با دستور زیر و با کمک عبارت preplugin، تمامی دیتافایلهای مربوط به این pdb را برمی گردانیم:

RMAN> restore pluggable database pdb18c from preplugin;

Starting restore at 28-JUN-18

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00043 to /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_system_fm96sf4q_.dbf

channel ORA_DISK_1: restoring datafile 00044 to /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_sysaux_fm96sf4s_.dbf

channel ORA_DISK_1: restoring datafile 00045 to /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/o1_mf_undotbs1_fm96sf4t_.dbf

channel ORA_DISK_1: restoring datafile 00046 to /u02/18c/base/oradata/CDB18C2/6FB071F31A631D00E0530288200ADC84/datafile/tbs01.dbf

channel ORA_DISK_1: reading from backup piece /18c/bkp/10t6j2p2_1_1

channel ORA_DISK_1: piece handle=/18c/bkp/10t6j2p2_1_1 tag=TAG20180628T125706

channel ORA_DISK_1: restore complete, elapsed time: 00:00:07

Finished restore at 28-JUN-18

و همچنین با دستور زیر و با کمک ارشیوهای موجود در بکاپ، ریکاوری را انجام می دهیم:

RMAN> recover pluggable database pdb18c from preplugin;

RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 71 and starting SCN of 19703925

همانطور که می بینید، دستور ریکاوری با خطا متوقف شد. این دستور برای اجرای موفق، به ارشیو شماره 71 نیاز دارد که در بکاپ ارشیوها، خبری از ان نیست(این ارشیو، بعد از بکاپ و قبل از unplug ایجاد شده است). با دستور زیر، ادرس این ارشیو را تعیین می کنیم:

RMAN> catalog preplugin archivelog ‘/u02/18c/base/fast_recovery_area/CDB18C2/archivelog/2018_06_28/o1_mf_1_71_fm97dl0r_.arc’;

cataloged archived log

archived log file name=/u02/18c/base/fast_recovery_area/CDB18C2/archivelog/2018_06_28/o1_mf_1_71_fm97dl0r_.arc RECID=31 STAMP=0

با اجرای مجدد دستور قبلی، ریکاوری با موفقیت انجام خواهد شد:

RMAN> recover pluggable database pdb18c from preplugin;

Starting recover at 28-JUN-18

starting media recovery

archived log for thread 1 with sequence 70 is already on disk as file /u02/18c/base/fast_recovery_area/CDB18C2/archivelog/2018_06_28/o1_mf_1_70_fm96z9d8_.arc

archived log for thread 1 with sequence 71 is already on disk as file /u02/18c/base/fast_recovery_area/CDB18C2/archivelog/2018_06_28/o1_mf_1_71_fm97dl0r_.arc

media recovery complete, elapsed time: 00:00:01

Finished recover at 28-JUN-18

در نهایت، دستور ریکاوری را بدون استفاده از عبارت preplugin اجرا می کنیم تا تغییرات بعد از plug(مشابه رکوردی که به جدول tbl اضافه شد)، به این pdb اعمال شوند:

RMAN> recover pluggable database pdb18c;

Starting recover at 28-JUN-18

using channel ORA_DISK_1

starting media recovery

media recovery complete, elapsed time: 00:00:00

Finished recover at 28-JUN-18

pdb18c را در وضیعت open قرار می دهیم:

SQL>  alter pluggable database pdb18c open;

Pluggable database altered.

با اتصال به این pdb، اطلاعات جدول tbl را مورد بررسی قرار می دهیم که خواهیم دید بدون از دست دادن رکوردی، ریکاوری انجام شده است:

SQL> alter session set container=pdb18c;

Session altered.

SQL> select name from usef.tbl;

NAME

———

USEF

VAHID

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

Comment (1)

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

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