مقدمه:
در این مقاله دو روش برای کنترل تکثیر 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=”*”;