مقدمه:
در این مقاله دو روش برای کنترل تکثیر PDBها در اوراکل دیتاگارد را توصیف می‌کنیم.

Assumptions:
این این‌جا فرض بر وجود یک دیتابیس اصلی و یک دیتاگارد می‌باشد.
در زیر وضعیت وضعیت PDB در دیتابیس اصلی و دیتاگارد نمایش داده شده است:

— Primary

COLUMN name FORMAT a30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED READ ONLY ENABLED

PDB1 READ WRITE ENABLED

SQL>

— Standby

COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED MOUNTED ENABLED

PDB1 MOUNTED ENABLED

SQL>

در این مثال از Oracle Managed Files (OMF) استفاده شده است و نیازی به تبدیل نام فایل‌ها نمی‌باشد. در صورت عدم استفاده از OMF نیاز به تبدیل نام فایل‌ها می‌باشد.

STANDBYS Clause (12.1.0.2):
عبارت STANDBYS در دستور CREATE PLUGGABLE DATABASE در نسخه 12.1.0.2 معرفی شده است تا به ما اجازه دهد مشخص کنیم کدام دیتاگارد باید از PDB جدید ایجاد شده محافظت کند. ساختار استفاده از آن در زیر نمایش داده شده است:

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

در اینجا چند نمونه بیان شده است:
• عدم استفاده از STANDBYS : PDB بوسیله تمامی دیتاگارد‌ها محافظت می‌شود.
• STANDBYS=NONE : PDB بوسیله هیچ یک از دیتاگارد‌ها محافظت نمی‌شود.
• STANDBYS=ALL : PDB بوسیله تمامی دیتاگارد‌ها محافظت می‌شود.
• STANDBYS=ALL EXCEPT (‘cdb1_stby_1′,’cdb1_stby_2’) : PDB بوسیله تمامی دیتاگارد‌ها محافظت می‌شود بغیر از مواردی که DB_UNIQUE_NAME آن‌ها شامل ‘cdb1_stby_1’ and ‘cdb1_stby_2’ می‌باشد.
• STANDBYS=(‘cdb1_stby_1’) : PDB بوسیله دیتاگارد با DB_UNIQUE_NAME شامل ‘cdb1_stby_1’ محافظت می‌شود.

ساخت PDB جدید در دیتابیس اصلی که بوسیله هیچ دیتاگاردی محافظت نمی‌شود:

— Primary

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1

STANDBYS=NONE;

ALTER PLUGGABLE DATABASE pdb2 OPEN;

همنطور که انتظار می‌رود، PDB ساخته شده در دیتابیس اصلی، در دیتاگارد محافظت نمی‌شود:

— Primary

COLUMN name FORMAT a30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED READ ONLY ENABLED

PDB1 READ WRITE ENABLED

PDB2 READ WRITE ENABLED

SQL>

— Standby

COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED MOUNTED ENABLED

PDB1 MOUNTED ENABLED

PDB2 MOUNTED DISABLED

SQL>

در این‌جا ما تنها دارای یک دیتاگارد هستیم ، بنابراین می‌توانیم با حذف آن با استفاده از DB_UNIQUE_NAME به همراه ALL EXCEPT همان نتیجه را بدست آوریم:

— Primary

— Remove the PDB.

ALTER PLUGGABLE DATABASE pdb2 CLOSE;

DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

— Recreate it using ALL ACCEPT.

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1

STANDBYS=ALL EXCEPT (‘cdb1_stby’);

ALTER PLUGGABLE DATABASE pdb2 OPEN;

در این‌ قسمت با توجه به وجود تنها یک دیتاگارد ، هر یک از موارد زیر منجر به محافظت از PDB توسط دیتاگارد می شود:

— Primary

— Remove the PDB.

ALTER PLUGGABLE DATABASE pdb2 CLOSE;

DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

— Recreate it with one of these.

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1;

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1

STANDBYS=ALL;

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1

STANDBYS=(‘cdb1_stby’);

— Open it.

ALTER PLUGGABLE DATABASE pdb2 OPEN;

حذف PDB جدید ساخته شده:

— Primary

ALTER PLUGGABLE DATABASE pdb2 CLOSE;

DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

ENABLED_PDBS_ON_STANDBY Parameter (12.2):
پارامترENABLED_PDBS_ON_STANDBY برای کنترل این‌که کدام یک از PDBها توسط یک دیتاگارد خاص محافظت ‌شوند ، در 12.2 معرفی شد. تنظیمات پارامتر می‌تواند در دیتابیس اصلی و یا دیتاگارد انجام شود ولی تنها بوسیله دیتاگارد مورد استفاده قرار می‌گیرد.

در این‌جا چند نمونه از چگونگی استفاده از پارامتر آورده شده است:
• “” : تمامی PDBها محفظت می‌شوند. • “PDB1”, “PDB2” : تنها PDBها با نام “PDB1” و “PDB2″محافظت می‌شوند. • “PDB” : تنها PDBهایی که نام آن‌ها با “PDB” شروع می‌شود، محافظت می‌شوند.
• ““, “-PDB” : تمامی PDBها بغیر از آن‌هایی که نامشان با “PDB” آغاز می‌شود محافظت می‌شوند.
• “*”, “-PDB1” : تمامی PDBها بغیر از PDB با نام “PDB1” محافظت می‌شوند.

در دیتاگارد با استفاده از دستور زیر ، از replicate دیتابیس PDB2 در دیتاگارد جلوگیری می‌کنیم. در حالی که دیگر PDBها بصورت نرمال محافظت می‌شوند:

— Standby

ALTER SYSTEM SET enabled_pdbs_on_standby=”*”, “-PDB2”;

سپس در دیتابیس اصلی اقدام به ساخت PDB با نام‌های PDB2 و PDB3 می‌کنیم:

— Primary

CREATE PLUGGABLE DATABASE pdb2

ADMIN USER pdb_admin IDENTIFIED BY Password1;

ALTER PLUGGABLE DATABASE pdb2 OPEN;

CREATE PLUGGABLE DATABASE pdb3

ADMIN USER pdb_admin IDENTIFIED BY Password1;

ALTER PLUGGABLE DATABASE pdb3 OPEN;

پس از آن اقدام به بررسی وضعیت PDBها در دیتابیس اصلی و دیتاگارد می‌کنیم:

— Primary

COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED READ ONLY ENABLED

PDB1 READ WRITE ENABLED

PDB2 READ WRITE ENABLED

PDB3 READ WRITE ENABLED

SQL>

— Standby

COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status

FROM v$pdbs

ORDER BY 1;

NAME OPEN_MODE RECOVERY

PDB$SEED MOUNTED ENABLED

PDB1 MOUNTED ENABLED

PDB2 MOUNTED DISABLED

PDB3 MOUNTED ENABLED

SQL>

همانطور که انتظار داشتیم، از PDB با نام PDB2 بوسیله دیتاگارد محافظت نمی‌شود.
بمنظور حذف PDBها و تغییر مقدار پارامتر به مقدار پیش‌فرض از دستور زیر استفاده می‌کنیم:

— Primary

ALTER PLUGGABLE DATABASE pdb2 CLOSE;

DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

ALTER PLUGGABLE DATABASE pdb3 CLOSE;

DROP PLUGGABLE DATABASE pdb3 INCLUDING DATAFILES;

— Standby

ALTER SYSTEM SET enabled_pdbs_on_standby=”*”;