چالشهای دیتاگارد در محیط Multitenant

پرسش: در محیط Multitenant، با ایجاد یک pdb جدید، چه اتفاقی برای دیتاگارد رخ خواهد داد؟ آیا دیتاگارد از حالت ریکاور خارج خواهد شد؟ چگونه میتوان در زمان انجام عملیات pdb cloning  و یا remote hot clone ، دیتاگارد را در حالت همسان با بانک اصلی نگه داشت؟ و …

در این متن قصد داریم تا به این دسته از سوالات پاسخ دهیم و شیوه های مختلف ایجاد یک pdb و همچنین نحوه اثر گذاری ان را بر روی دیتاگارد، مورد بررسی قرار دهیم.

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

1.ایجاد pdb از روی  seed

2.کلون یک pdb از روی pdb دیگر

3.نگهداری دیتاگارد در زمان پلاگ یک pdb

4.ایجاد pdb به صورت از راه دور

ایجاد pdb از روی seed

در زمان ایجاد یک pdb از (seed(PDB$SEED، دیتافایلهای مربوط به pdb جدید، به طور خودکار در دیتاگارد هم ایجاد خواهند شد البته به شرطی که دیتاگارد در حالت ADG قرار داشته باشد:

–in stb:

SQL> alter system set standby_file_management=auto;

System altered.

SQL> select status from v$instance;

OPEN

SQL> select open_mode  from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

–in prim:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         5 PDB18C                         MOUNTED

SQL> CREATE PLUGGABLE DATABASE pdbseed ADMIN USER usef IDENTIFIED BY a;

Pluggable database created.

SQL> alter pluggable database pdbseed open;

Pluggable database altered.

 

–in stb:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         4 PDBSEED                        MOUNTED

         5 PDB18C                         MOUNTED

SQL> alter pluggable database PDBSEED open read only;

Pluggable database altered.

 

در زمان ایجاد این pdb، پیامهای زیر در alert log(مربوط به دیتاگارد) قابل مشاهده می باشد:

–in stb(alert log):

Recovery created pluggable database PDBSEED

2018-05-21T14:40:17.550386+04:30

Recovery copied files for tablespace SYSTEM

Recovery successfully copied file /18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_system_fj56rwpf_.dbf from /18c/base/oradata/USEFDB18/datafile/o1_mf_system_fcvjkpx0_.dbf

PDBSEED(4):Successfully added datafile 96 to media recovery

PDBSEED(4):Datafile #96: ‘/18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_system_fj56rwpf_.dbf’

2018-05-21T14:40:25.616618+04:30

Recovery copied files for tablespace SYSAUX

Recovery successfully copied file /18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_sysaux_fj56rwpg_.dbf from /18c/base/oradata/USEFDB18/datafile/o1_mf_sysaux_fcvjkpwy_.dbf

PDBSEED(4):Successfully added datafile 97 to media recovery

PDBSEED(4):Datafile #97: ‘/18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_sysaux_fj56rwpg_.dbf’

2018-05-21T14:40:27.853305+04:30

Recovery copied files for tablespace UNDOTBS1

Recovery successfully copied file /18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_undotbs1_fj56rwpj_.dbf from /18c/base/oradata/USEFDB18/datafile/o1_mf_undotbs1_fcvjkpx2_.dbf

PDBSEED(4):Successfully added datafile 98 to media recovery

PDBSEED(4):Datafile #98: ‘/18c/base/oradata/STB/6CB56A8C0E684EA0E0530688200AD35D/datafile/o1_mf_undotbs1_fj56rwpj_.dbf’

 

همانطور که می بینید، pdb جدید در محیط دیتاگارد هم ایجاد شده است در صورتی که اگر دیتاگارد در زمان ایجاد این pdb، در حالت non-ADG قرار داشته باشد، ایجاد دیتافایل در محیط دیتاگارد با خطا مواجه خواهد شد:

Recovery created pluggable database PDBSEED

Automatic Copy of Standby datafiles for create pdb failed with            error – 65169. Files need to be copied manually

2018-05-21T14:48:02.148046+04:30

Errors in file /18c/base/diag/rdbms/stb/stb/trace/stb_pr00_26289.trc:

ORA-65169: error encountered while attempting to copy file

ORA-65011: Pluggable database  does not exist.

همچنین دیتاگارد از حالت ریکاور خارج خواهد شد:

Recovery interrupted!

Recovery stopped due to failure in applying recovery marker (opcode 17.34).

 

با رجوع به دیتاگارد، وضیعت این pdb(که در حالت non-ADG به بانک اصلی اضافه شد) را به صورت جزیی تر بررسی می کنیم:

in stb:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       MOUNTED

         3 PDBSEED                        MOUNTED

         5 PDB18C                         MOUNTED

SQL> alter session set container=PDBSEED;

Session altered.

SQL> select name from v$datafile;

/18c/base/oradata/PRIM/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_system_fj577ky9_.dbf

همانطور که می بینید، تنها یک دیتافایل برای این pdb در کنترل فایل ثبت شده است و عملا برای این pdb، دیتافایلی ایجاد نشده است! ایجاد دیتافایل برای این pdb، با روشهایی چون کپی سیستم عاملی و یا اجرای دستور restore pluggable database قابل انجام است که در ادامه با کمک دستور restore pluggable database، این دیتافایلها را ایجاد خواهیم کرد:

RMAN> run{

set newname for pluggable database PDBSEED to new;

restore pluggable database PDBSEED from service prim;

switch datafile all;

}2> 3> 4> 5>

executing command: SET NEWNAME

Starting restore at 22-MAY-18

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=497 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: using network backup set from service prim

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

channel ORA_DISK_1: restoring datafile 00099 to /18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_system_%u_.dbf

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

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: using network backup set from service prim

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

channel ORA_DISK_1: restoring datafile 00100 to /18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_sysaux_%u_.dbf

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

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: using network backup set from service prim

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

channel ORA_DISK_1: restoring datafile 00101 to /18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_undotbs1_%u_.dbf

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

Finished restore at 22-MAY-18

datafile 99 switched to datafile copy

input datafile copy RECID=6 STAMP=976788290 file name=/18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_system_fj7bzpdc_.dbf

datafile 100 switched to datafile copy

input datafile copy RECID=7 STAMP=976788302 file name=/18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_sysaux_fj7bzxbz_.dbf

datafile 101 switched to datafile copy

input datafile copy RECID=8 STAMP=976788310 file name=/18c/base/oradata/STB/6CB56A8C0E6D4EA0E0530688200AD35D/datafile/o1_mf_undotbs1_fj7c0f0v_.dbf

نکته: با دستور زیر می توان یک pdb را در حالت ریکاوری قرار داد:

SQL> alter pluggable database enable  recovery;

 

در ادامه سناریوی رفع گپ از دیتاگارد، با کمک دستورات زیر، ریکاوری را برای pdbseed فعال می کنیم:

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter session set container=PDBSEED;

Session altered.

SQL> alter pluggable database enable  recovery;

Pluggable database altered.

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter database recover managed standby database disconnect;

Database altered.

 

با شروع مجدد ریکاوری، گپ ایجاد شده به صورت کامل مرتفع خواهد شد و دیتافایلها در وضیعت online قرار می گیرند:

–in alert log

PR00 (PID:9000): Media Recovery Waiting for T-1.S-385 (in transit)

SQL>  alter session set container=PDBSEED;

Session altered.

SQL> select file#,status from v$datafile;

     FILE# STATUS

———- ——-

        99 SYSTEM

       100 ONLINE

       101 ONLINE

 

نکته 1: در صورت نگهداری دیتافایلهای دیتاگارد در محیط asm، تعییری در سناریوها ایجاد نخواهد شد. قسمتی از لاگ مربوط به افزودن pdb جدید در محیط asm:

Recovery created pluggable database PDBSEED

2018-05-26T10:34:59.804110+04:30

Recovery copied files for tablespace SYSTEM

Recovery successfully copied file +DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/system.309.977135699 from +DATA/STB/6511F6B0BA1540D8E0530688200A0F3C/DATAFILE/system.300.977134147

2018-05-26T10:34:59.901079+04:30

PDBSEED(6):Successfully added datafile 38 to media recovery

PDBSEED(6):Datafile #38: ‘+DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/system.309.977135699’

2018-05-26T10:35:01.749869+04:30

Recovery copied files for tablespace SYSAUX

Recovery successfully copied file +DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/sysaux.310.977135699 from +DATA/STB/6511F6B0BA1540D8E0530688200A0F3C/DATAFILE/sysaux.303.977134155

2018-05-26T10:35:01.858951+04:30

PDBSEED(6):Successfully added datafile 39 to media recovery

PDBSEED(6):Datafile #39: ‘+DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/sysaux.310.977135699’

Recovery copied files for tablespace UNDOTBS1

Recovery successfully copied file +DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/undotbs1.311.977135701 from +DATA/STB/6511F6B0BA1540D8E0530688200A0F3C/DATAFILE/undotbs1.298.977134171

2018-05-26T10:35:02.554748+04:30

PDBSEED(6):Successfully added datafile 40 to media recovery

PDBSEED(6):Datafile #40: ‘+DATA/STB/6D15F08975A93C02E0530688200A93D3/DATAFILE/undotbs1.311.977135701’

2018-05-26T10:35:02.972688+04:30

Media Recovery Waiting for thread 1 sequence 857 (in transit)

 

نکته 2: اگر بخواهیم ریکاوری cdb در استندبای بدون لحاظ یک pdb انجام شود، می توانیم از دستور زیر استفاده کنیم:

SQL> alter session set container=PDBSEED;

Session altered.

SQL> alter pluggable database disable recovery;

Pluggable database altered.

 

نکته 3: با تنظیم پارامتر ENABLED_PDBS_ON_STANDBY در محیط دیتاگارد، می توان pdb مشخصی را فعال یا غیرفعال کرد. پس در زمان ساخت یک pdb، برای ایجاد خودکار ان در محیط دیتاگارد، باید نام این pdb جدید را به عنوان مقدار این پارامتر تعیین کرد.

البته مقدار پیش فرض این پارامتر به * تنظیم شده است که بیانگر فعال بودن همه pdbها در محیط دیتاگارد می باشد و در صورت عدم تغییر این مقدار، pdbهای جدید در صورت امکان، در این محیط هم ایجاد خواهند شد.

 

-کلون یک pdb از روی pdb دیگر(درون یک CDB)

در زمان کلون کردن یک pdb از روی pdb دیگر(در محیط یک cdb)، عبارت standbys و همچنین وضیعت data guard، دو عنصر اثرگذار می باشند که در ادامه به صورت مجزا، هر یک را مورد بررسی قرار می دهیم.

1.دیتاگارد در حالت ADG قرار دارد:

در این حالت با کمک پروسس MRP و به صورت خودکار، دیتافایلهای مربوط به pdb جدید، در دیتاگارد هم ایجاد خواهند شد.

نکته: در زمان تهیه کلون pdb در بانک اصلی، pdb مبدا باید در حالت open read only قرار داشته باشد.

سناریوی زیر نشان خواهد داد که با کمک ADG، به صورت خودکار دیتافایلهای pdb جدید در محیط دیتاگارد، ایجاد خواهند شد:

–in stb:

SQL> alter system set standby_file_management=auto;

System altered.

SQL> select status from v$instance;

STATUS

————

OPEN

SQL> select open_mode  from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

–in prim:

SQL> alter pluggable database PDB18C open read only;

Pluggable database altered.

SQL> CREATE PLUGGABLE DATABASE clone_pdb FROM pdb18c;

Pluggable database created.

–in stb:

PR00 (PID:12606): Media Recovery Waiting for T-1.S-408 (in transit)

 

SQL> alter session set container= clone_pdb;

SQL> select file#,status from v$datafile;

     FILE# STATUS

———- ——-

       111 SYSTEM

       112 ONLINE

       113 ONLINE

 

نکته: در صورتی که pdb18c در حالت read write قرار داشته باشد، ایجاد دیتافایلهای pdb جدید در دیتاگارد، با خطا مواجه خواهد شد ولی عملیات ریکاوری در سطح cdb، ادامه خواهد داشت:

–in prim:

SQL> alter PLUGGABLE DATABASE pdb18c open read write;

Pluggable database altered.

SQL> CREATE PLUGGABLE DATABASE clone_pdb FROM pdb18c;

Pluggable database created.

–in stb:

Recovery created pluggable database CLONE_PDB

CLONE_PDB(4):Tablespace-SYSTEM during PDB create skipped since source is in            r/w mode or this is a refresh clone

PR00 (PID:12606): Media Recovery Waiting for T-1.S-410 (in transit)

برای ایجاد دیتافایلهای این pdb، می توان از دستور restore pluggable database from service استفاده کرد و در نهایت، ریکاوری را در سطح این pdb، فعال نمود.

 

2.دیتاگارد در حالت non ADG قرار دارد:

این حالت از دیتاگارد، مانع از ایجاد دیتافایلهای pdb جدید در محیط data guard خواهد شد و علاوه بر ان، عملیات ریکاوری در محیط دیتاگارد، در سطح CDB با خطا متوقف خواهد شد:

–in stb

SQL> select status from v$instance;

STATUS

————

MOUNTED

–in prim:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         5 PDB18C                         READ ONLY  NO

SQL> CREATE PLUGGABLE DATABASE clone_pdb2 FROM pdb18c;

Pluggable database created.

SQL> alter system switch logfile;

System altered.

–in stb

Recovery interrupted!

Recovery stopped due to failure in applying recovery marker (opcode 17.34).

برای رفع این خطا، نیازی به رجوع به بانک اصلی نخواهد بود و می توان فایلهای pdb18c(pdb مبدا منظور است) که در محیط دیتاگارد هم موجود هستند را برای این pdb کپی کرد :

مسیر دیتافایلها در pdb18c:

–in stb:

SQL> alter session set container=pdb18c;

Session altered.

SQL> select name from v$datafile;

/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_system_fg2xkb9f_.dbf

/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_sysaux_fg2xkbbd_.dbf

/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_undotbs1_fg2xkbbf_.dbf

مسیر دیتافایلها در CLONE_PDB2:

–in stb:

SQL> alter session set container=CLONE_PDB2;

Session altered.

SQL> select name from v$datafile;

/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_system_fjo1h8bs_.dbf

 

کپی دیتافایلهای pdb18c در محیط دیتاگارد:

–in stb:

[oracle@stb ~]$ mkdir -p /18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/

[oracle@stb ~]$ cp -r -v /18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/* /18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/

`/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_sysaux_fg2xkbbd_.dbf’ -> `/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_sysaux_fg2xkbbd_.dbf’

`/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_system_fg2xkb9f_.dbf’ -> `/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_system_fg2xkb9f_.dbf’

`/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_temp_fg2xkbbh_.dbf’ -> `/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_temp_fg2xkbbh_.dbf’

`/18c/base/oradata/USEFDB18/6ABBC52D10EB590BE0530688200A690C/datafile/o1_mf_undotbs1_fg2xkbbf_.dbf’ -> `/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_undotbs1_fg2xkbbf_.dbf’

***انجام این کپی، با کمک دستور زیر هم قابل انجام است:

RMAN> backup as copy pluggable database pdb18c;

 

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

SQL> alter session set container=CLONE_PDB2;

Session altered.

SQL> alter database rename file  ‘/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_system_fjo1h8bs_.dbf’ to ‘/18c/base/oradata/PRIM/6D2E3C16F4B168E9E0530688200A71BA/datafile/o1_mf_system_fg2xkb9f_.dbf’;

Database altered.

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter database recover managed standby database disconnect;

Database altered.

در نهایت، دیتافایلهای pdb جدید، در وضیعت online قرار خواهند گرفت:

SQL> alter session set container=CLONE_PDB2;

Session altered.

SQL> select file#,status from v$datafile;

     FILE# STATUS

———- ——-

       144 SYSTEM

       145 ONLINE

       146 ONLINE

3.استفاده از عبارت STANDBYS در هنگام کلون pdb

از نسخه 12.1.0.2، همزمان با اجرای دستور ساخت pdb در بانک اصلی، می توان با کمک عبارت standbys در مورد ایجاد یا عدم ایجاد دیتافایلهای ان pdb در استندبای هم نظر داد.

شکل کلی:

CREATE PLUGGABLE DATABASE … STANDBYS={(‘cdb_name’, ‘cdb_name’, …) | NONE | ALL [EXCEPT (‘cdb_name’, ‘cdb_name’, …)]}

 

همانطور که در ساختار کلی این دستور قابل مشاهده است، عبارت standbys، می تواند مقادیر متعددی به خود بگیرد که در ادامه هر کدام را به طور مختصر، مورد بررسی قرار خواهیم داد:

مقدار none: با این مقدار، دیتافایلهای pdb جدید، تنها در بانک اصلی ایجاد خواهند شد و در محیط دیتاگارد، تنها ساختار این pdb ایجاد خواهد شد(بدون وجود دیتافایلها) و دیتاگارد، بدون در نظر گرفتن این pdb، به کارش ادامه خواهد داد. این قابلیت، در زمان انجام تست در محیط بانک اصلی، بسیار مفید خواهد بود.

سناریوی زیر را ببینید:

–in prim:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         5 PDB18C                         READ WRITE NO

SQL> CREATE PLUGGABLE DATABASE clone_pdb FROM pdb18c STANDBYS=NONE;

Pluggable database created.

–in stb:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 CLONE_PDB                      MOUNTED

         5 PDB18C                         READ ONLY  NO

SQL> alter session set container=CLONE_PDB;

Session altered.

SQL> select file#,status from v$datafile;

     FILE# STATUS

———- ——-

       123 SYSOFF

       124 RECOVER

       125 RECOVER

–alert log:

CLONE_PDB(3):because the pluggable database was created with nostandby

PR00 (PID:19283): Media Recovery Waiting for T-1.S-422 (in transit)

 

نکته: در صورتی که بعد از ایجاد pdb با گزینه standbys=none، قصد ساخت دیتافایلهای ان pdb را در محیط data guard داشته باشیم، می توانیم دیتافایلها را از بانک اصلی به سرور دیتاگارد کپی کنیم(در هر دو حالت ADG و non-ADG) همچنین اگر pdb جدید هنوز در بانک اصلی open نشده باشد، این کار با کمک rman قابل انجام می باشد(restore pluggable database from ).

cdb_name:این مقدار مشخص می کند که pdb جدید در کدام یک از دیتاگاردها ایجاد شود؟

STANDBYS= DB_UNIQUE_NAME1, DB_UNIQUE_NAME2, DB_UNIQUE_NAMEn

مقدار ALL: این عبارت مشخص می کند که pdb جدید در همه دیتاگاردهای موجود ایجاد شود.

EXCEPT cdb_name:با کمک این عبارت می توان مشخص کرد که pdb در همه دیتاگارها ایجاد شود به جز مواردی که تعیین می شود.

 

ایجاد pdb به صورت از راه دور

در زمان انجام کلون به صورت از راه دور، برای نگهداری دیتاگارد می توان به دو طریق عمل کرد:

1.استفاده از عبارت standbys=none

2.ایجاد خودکار pdb در استندبای با کمک پارامترها

در ادامه به طور مختصر در مورد هر دو این روشها، مطالبی را خواهیم اورد.

1.استفاده از عبارت standbys=none

در صورتی که قصدی برای ایجاد خودکار دیتافایلهای pdb جدید در محیط دیتاگارد نداشته باشیم، می توانیم با کمک این عبارت در زمان ساخت pdb، مانع از رخ دادن خطا در ریکاوری دیتاگارد شویم.

در سناریوی زیر خواهید دید که استفاده از عبارت standbys=none، مانع از توقف ریکاوری در دیتاگارد خواهد شد:

–in source db:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 PDB                            READ ONLY  NO

–in prim:

SQL> CREATE PUBLIC DATABASE LINK pdb_remote CONNECT TO c##usef IDENTIFIED BY a USING ‘db18c’;

Database link created.

SQL> create pluggable database remote_clone from PDB@pdb_remote tempfile reuse STANDBYS=NONE;

Pluggable database created.

–in stb(alert log)

Recovery created pluggable database REMOTE_CLONE

REMOTE_CLONE(10):Tablespace-SYSTEM during PDB create skipped since source is in            r/w mode or this is a refresh clone

REMOTE_CLONE(10):File #147 added to control file as ‘UNNAMED00147’. Originally created as:

REMOTE_CLONE(10):’/18c/base/oradata/PRIM/6D2FBDDC7A9008FAE0530688200A6CDB/datafile/o1_mf_system_fjo7hf1t_.dbf’

REMOTE_CLONE(10):because the pluggable database was created with nostandby

REMOTE_CLONE(10):or the tablespace belonging to the pluggable database is

PR00 (PID:24258): Media Recovery Waiting for T-1.S-490 (in transit)

همانطور که می بینید، دیتافایلی برای این pdb جدید در محیط دیتاگارد ایجاد نشده است ولی عملیات ریکاوری، کماکان در حال انجام می باشد.

در چنین شرایطی، هم می توان از این pdb صرف نظر کرد و هم می توان به صورت دستی، دیتافایلها را به این محیط انتقال داد هم چنین در صورتی که این pdb جدید هنوز در وضیعت open قرار نگرفته باشد، rman هم گزینه مناسبی خواهد بود:

run{

set newname for pluggable database remote_clone to new;

restore pluggable database remote_clone from service prim;

switch datafile all;

}

 

نکته: در صورتی که از عبارت standbys=none در هنگام ساخت pdb استفاده نشده باشد، می توان ریکاوری را در سطح این pdb غیرفعال کرد و در سطح cdb ان را فعال نمود:

 

SQL> alter session set container=REMOTE_CLONE;

Session altered.

SQL> alter pluggable database disable recovery;

Pluggable database altered.

SQL>  alter database recover managed standby database disconnect;

Database altered.

 

با این کار، عملیات ریکاوری بدون لحاظ این pdb، به کارش ادامه خواهد داد.

SQL> select name, recovery_status from v$pdbs;

NAME                 RECOVERY

——————– ——–

PDB$SEED             ENABLED

REMOTE_CLONE         DISABLED

PDB18C               ENABLED

 

2.ایجاد خودکار pdb در استندبای با کمک پارامترها

برای ایجاد خودکار pdb از راه دور در محیط ADG، می توان از پارامتر STANDBY_PDB_SOURCE_FILE_DBLINK کمک گرفت! این پارامتر که از اوراکل 18c ارائه شد، نام database linkای که قرار است دیتاگارد از طریق ان، دیتافایلها را از بانک مبدا(بانک prim منظور نیست) کپی کند، مشخص خواهد کرد با تنظیم این پارامتر، در صورتی که دیتاگارد در وضیعت ADG قرار داشته باشد، کلون از راه دور، به طور همزمان در محیط prim و stb انجام خواهد شد:

–in stb:

SQL> alter system set standby_file_management=auto;

System altered

SQL> select status from v$instance;

OPEN

SQL> alter system set standby_pdb_source_file_dblink=pdb_remote;

System altered.

–in prim:

SQL> create pluggable database remote_clone from PDB@pdb_remote;

Pluggable database created.

–in stb alert log:

Recovery created pluggable database REMOTE_CLONE

Recovery attempting to copy datafiles for pdb-REMOTE_CLONE from  source pdb-PDB at dblink-PDB_REMOTE

2018-05-31T09:36:13.655603+04:30

Recovery copied files for tablespace SYSTEM

Recovery successfully copied file /18c/base/oradata/STB/64A823B7A5D7266EE05386E5E50A3874/datafile/o1_mf_system_fjz0pbcw_.dbf from /u01/18c_oradata/DB18C/68C41C26CFD42CD4E0530488200AE477/datafile/o1_mf_system_fd0x148f_.dbf

REMOTE_CLONE(3):Successfully added datafile 193 to media recovery

REMOTE_CLONE(3):Datafile #193: ‘/18c/base/oradata/STB/64A823B7A5D7266EE05386E5E50A3874/datafile/o1_mf_system_fjz0pbcw_.dbf’

2018-05-31T09:36:18.217319+04:30

Recovery copied files for tablespace SYSAUX

Recovery successfully copied file /18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_sysaux_fjz0pbd3_.dbf from /u01/18c_oradata/DB18C/68C41C26CFD42CD4E0530488200AE477/datafile/o1_mf_sysaux_fd0x1499_.dbf

REMOTE_CLONE(3):Successfully added datafile 194 to media recovery

REMOTE_CLONE(3):Datafile #194: ‘/18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_sysaux_fjz0pbd3_.dbf’

2018-05-31T09:36:19.964855+04:30

Recovery copied files for tablespace UNDOTBS1

Recovery successfully copied file /18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_undotbs1_fjz0pbd5_.dbf from /u01/18c_oradata/DB18C/68C41C26CFD42CD4E0530488200AE477/datafile/o1_mf_undotbs1_fd0x149b_.dbf

REMOTE_CLONE(3):Successfully added datafile 195 to media recovery

REMOTE_CLONE(3):Datafile #195: ‘/18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_undotbs1_fjz0pbd5_.dbf’

2018-05-31T09:36:36.812623+04:30

Recovery copied files for tablespace USERS

Recovery successfully copied file /18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_users_fjz0pbd6_.dbf from /u01/18c_oradata/DB18C/68C41C26CFD42CD4E0530488200AE477/datafile/o1_mf_users_fd0x1h6x_.dbf

REMOTE_CLONE(3):Successfully added datafile 196 to media recovery

REMOTE_CLONE(3):Datafile #196: ‘/18c/base/oradata/STB/6D7A62580B55557AE0530688200A066C/datafile/o1_mf_users_fjz0pbd6_.dbf’

PR00 (PID:19475): Media Recovery Waiting for T-1.S-575 (in transit)

نکته: pdb مبدا باید در وضیعت read only قرار داشته باشد.

 

نگهداری دیتاگارد در زمان پلاگ یک pdb

در زمان انجام عملیات plug یک pdb از cdbای به cdb دیگر، برای نگهداری دیتاگارد باید ملاحضاتی را در نظر گرفت در غیر این صورت، ریکاوری در این محیط، با خطا متوقف خواهد شد. در ادامه با ارائه یک سناریو و با کمک پارامتر standby_pdb_source_file_directory که از اوراکل 18c ارائه شد طریقه نگهداری همسان دیتاگارد را در زمان عملیات plug نشان خواهیم داد.

در ابتدا pdb را از cdb مورد نظر unplug می کنیم:

–in source db:

SQL> alter pluggable database PDBSOURCE close;

Pluggable database altered.

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

Pluggable database altered.

سپس پوشه مورد نظر را در محیط بانک اصلی ایجاد می کنیم:

–in prim

mkdir -p /18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/

 

دیتافایلها را از سرور source به سرور prim منتقل می کنیم:

–copy to prim

scp -r /u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_* prim:/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/

o1_mf_sysaux_fjz3rv10_.dbf                                              100% 1090MB  90.8MB/s   00:12

o1_mf_system_fjz3rv0l_.dbf                                              100%  280MB  70.0MB/s   00:04

o1_mf_temp_fjz3rv12_.dbf                                                100%  421MB  84.2MB/s   00:05

o1_mf_undotbs1_fjz3rv11_.dbf                                            100%  255MB  85.0MB/s   00:03

o1_mf_users_fjz3rv12_.dbf                                               100% 2910MB  78.7MB/s   00:37

scp /u02/18c/PDBSOURCE.xml prim:/18c

PDBSOURCE.xml                                                           100% 8188     8.0KB/s   00:00

 

قبل از انجام عملیات plug، با کمک سرویس nfs، مسیر دیتافایلهای pdb را در سرور stb مونت می کنیم:

–in stb

df -h /18c/stb/pdb/

Filesystem            Size  Used Avail Use% Mounted on

10.32.136.4:/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile               25G   23G  1.1G  96% /18c/stb/pdb

همچنین با کمک پارامتر standby_pdb_source_file_directory، مسیری که دیتافایلهای این pdb در ان قرار دارند را مشخص می کنیم:

–in stb

SQL> alter system set standby_pdb_source_file_directory=’/18c/stb/pdb’;

System altered.

با این تنظیم، دیتاگارد از طریق دیتافایلهای موجود در این مسیر، دیتافایلهای مربوط به pdb جدید را ایجاد خواهد کرد.

بعد از انجام این مراحل، با دستور زیر، عملیات plug را در بانک اصلی انجام خواهیم داد:

–in prim

Create pluggable database PDBSOURCE using ‘/18c/PDBSOURCE.xml’ nocopy SOURCE_FILE_NAME_CONVERT =

(‘/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_sysaux_fjz3rv10_.dbf’,’/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/sysaux_fjz3rv10_.dbf’,

‘/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_system_fjz3rv0l_.dbf’,’/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/system_fjz3rv0l_.dbf’,

‘/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_undotbs1_fjz3rv11_.dbf’,’/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/undotbs1_fjz3rv11_.dbf’,

‘/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_users_fjz3rv12_.dbf’,’/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/users_fjz3rv12_.dbf’,

‘/u01/18c_oradata/DB18C/6D7B255C342324E3E0530488200AC47D/datafile/o1_mf_temp_fjz3rv12_.dbf’,’/18c/base/oradata/PRIM/6D7B255C342324E3E0530488200AC47D/datafile/temp_fjz3rv12_.dbf’

);

با اجرای این دستورات، pdb جدید در محیط دیتاگارد هم ایجاد خواهند شد:

 

Recovery created pluggable database PDBSOURCE

Recovery attempting to copy datafiles for pdb-PDBSOURCE from  source dir-/18c/stb/pdb

2018-05-31T13:31:12.423977+04:30

Recovery copied files for tablespace SYSTEM

Recovery successfully copied file /18c/base/oradata/STB/64A823B7A5D7266EE05386E5E50A3874/datafile/system_fjz3rv0l_.dbf from /18c/stb/pdb/o1_mf_system_fjz3rv0l_.dbf

PDBSOURCE(3):Recovery created file /18c/base/oradata/STB/64A823B7A5D7266EE05386E5E50A3874/datafile/system_fjz3rv0l_.dbf

PDBSOURCE(3):Successfully added datafile 17 to media recovery

PDBSOURCE(3):Datafile #17: ‘/18c/base/oradata/STB/64A823B7A5D7266EE05386E5E50A3874/datafile/system_fjz3rv0l_.dbf’

2018-05-31T13:31:20.585550+04:30

Recovery copied files for tablespace SYSAUX

Recovery successfully copied file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/sysaux_fjz3rv10_.dbf from /18c/stb/pdb/o1_mf_sysaux_fjz3rv10_.dbf

PDBSOURCE(3):Recovery created file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/sysaux_fjz3rv10_.dbf

PDBSOURCE(3):Successfully added datafile 18 to media recovery

PDBSOURCE(3):Datafile #18: ‘/18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/sysaux_fjz3rv10_.dbf’

2018-05-31T13:31:23.285791+04:30

Recovery copied files for tablespace UNDOTBS1

Recovery successfully copied file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/undotbs1_fjz3rv11_.dbf from /18c/stb/pdb/o1_mf_undotbs1_fjz3rv11_.dbf

PDBSOURCE(3):Recovery created file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/undotbs1_fjz3rv11_.dbf

PDBSOURCE(3):Successfully added datafile 19 to media recovery

PDBSOURCE(3):Datafile #19: ‘/18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/undotbs1_fjz3rv11_.dbf’

2018-05-31T13:31:44.575373+04:30

Recovery copied files for tablespace USERS

Recovery successfully copied file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/users_fjz3rv12_.dbf from /18c/stb/pdb/o1_mf_users_fjz3rv12_.dbf

PDBSOURCE(3):Recovery created file /18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/users_fjz3rv12_.dbf

PDBSOURCE(3):Successfully added datafile 20 to media recovery

PDBSOURCE(3):Datafile #20: ‘/18c/base/oradata/STB/6D7B255C342324E3E0530488200AC47D/datafile/users_fjz3rv12_.dbf’

2018-05-31T13:31:45.103448+04:30

PR00 (PID:26748): Media Recovery Waiting for T-1.S-592 (in transit)

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

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

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