پرسش: در محیط 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)