مقدمه:

در معماری multitenant محیط دیتاگارد می‌تواند نگرانی‌هایی را ایجاد کند. ساخت یک PDB جدید از هسته و یا بوسیله clone از یک read-only PDB در محیط container بصورت اتوماتیک در دیتاگارد مدیریت می‌شود ولی ساخت PDB جدید بوسیله remote clon و plugin بصورت اتوماتیک مدیریت نمی‌شوند. مقدار دهی پارامتر‌های STANDBY_PDB_SOURCE_FILE_DBLINK و STANDBY_PDB_SOURCE_FILE_DIRECTORY باعث ساده‌تر شدن این‌کار می‌شوند.

کپی کردن pdb در محیط دیتاگارد – اوراکل 18c

پیش فرض ها:
نکته مهم که باید قبل از انجام این‌کار درنظر داشته باشید:
توجه داشته باید که در صورت بروز اشتباه در دیتاگارد، ممکن است نیاز باشد مجددا آن‌را راه‌اندازی کنید. پس بهتر است مراحل را ابتدا بروی یک دیتابیس تستی انجام دهید.

علاوه‌بر دیتابیس اصلی و دیتاگارد ، یک CDB دیگر به‌عنوان منبع remote clon موردنیاز می‌باشد:
• cdb1 (cdb1): دیتابیس اصلی دارای یک PDB با نام “pdb1”.
• cdb1 (cdb1_stby): دیتاگارد به “pdb1” دیتابیس اصلی.
• cdb3: Standalone instance که بعنوان منبع remote clon استفاده می‌شود با نام “pdb5”.

در این فسمت وضیت PDB در دیتابیس اصلی و دیتاگارد مشاهده می‌کنیم:
— Primary

SELECT name, open_mode, recovery_status, guid
FROM v$pdbs
ORDER BY 1;

NAME OPEN_MODE RECOVERY GUID

PDB$SEED READ ONLY ENABLED 7FD2A7B8B56772FFE0536538A8C0ECC3
PDB1 READ WRITE ENABLED 7FD2C1FCD1227929E0536538A8C0E1F1

— Standby

SELECT name, open_mode, recovery_status, guid
FROM v$pdbs
ORDER BY 1;

NAME OPEN_MODE RECOVERY GUID

PDB$SEED READ ONLY ENABLED 7FD2A7B8B56772FFE0536538A8C0ECC3
PDB1 MOUNTED ENABLED 7FD2C1FCD1227929E0536538A8C0E1F1

STANDBY_PDB_SOURCE_FILE_DBLINK :
Remote Clone a PDB
پارامتر STANDBY_PDB_SOURCE_FILE_DBLINK در دیتاگارد مقداردهی می شود و دیتابیس اصلی با استفاده از DBlink عملیات remote clon را انجام می‌دهد. زمانی‌که دیتاگارد redoهای مربوط به عملیات pdb clone را از دیتابیس اصلی دریافت می‌کند از dblink برای انجام عملیات شبیه‌سازی در دیتاگارد استفاده می‌کند.
در اینجا محدودیت‌هایی وجود دارد:
• دیتاگارد باید در وضعیت Active Data Guard باشد.
• وضعیت pdb باید بصورت read-only باشد.این قابلیت با hot cloning که در 12.2 ارائه شده است کار نمی کند.

کاربری لازم را در container مبدا ایجاد می‌کنیم:

export ORACLE_SID=cdb3
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

Create link user:

sqlplus / as sysdba <<eof< p=””> </eof<>

DROP USER c##remote_clone_user CASCADE;
CREATE USER c##remote_clone_user IDENTIFIED BY remote_clone_user CONTAINER=ALL;
GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO c##remote_clone_user CONTAINER=ALL;

EXIT;
EOF

سپس با استفاده از کاربری ایجاد شده، اقدام به ساخت dblink در دیتابیس اصلی “cdb1” برای اتصال به دیتابیس مبدا “cdb3” می‌کنیم:

export ORACLE_SID=cdb1
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

Create database link:

sqlplus / as sysdba <> $ORACLE_HOME/network/admin/tnsnames.ora <<eof
CDB3 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ol7-183-dg1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cdb3)
)
)
EOF</eof

در این مرحله وضعیت دیتاگارد را به (ADG) تغییر می‌دهیم:

Standby – Active Data Guard (ADG):

sqlplus / as sysdba <<eof
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
EXIT;
EOF</eof

درصورت موفقیت‌آمیز بودن تست dblink دردیتاگارد، آن‌را به پارامتر STANDBY_PDB_SOURCE_FILE_DBLINK ارجاع می‌دهیم:

— Standby
SELECT * FROM dual@clone_link;

ALTER SYSTEM SET STANDBY_PDB_SOURCE_FILE_DBLINK=’clone_link’;

پس از اتصال به دیتابیس مبدا “cdb3” نسبت به وضعیت “pdb5” اطمینان حاصل می‌کنیم که در حالت open-readonly باشد:

export ORACLE_SID=cdb3
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

sqlplus / as sysdba <<eof
ALTER PLUGGABLE DATABASE pdb5 CLOSE;
ALTER PLUGGABLE DATABASE pdb5 OPEN READ ONLY;</eof

EXIT;
EOF

در این مرحله لقدام به ساخت یک pdb جدید با نام pdb2 از pdb5 می‌کنیم:

export ORACLE_SID=cdb1
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

Primary:

sqlplus / as sysdba <<eof
CREATE PLUGGABLE DATABASE pdb2 FROM pdb5@clone_link;</eof

EXIT;
EOF

پس از آن منتظر می‌مانیم تا تمامی فایل‌ها در دیتاگارد کپی شوند، برای این‌کار می‌توان از بررسی فایل alert log در دیتاگارد استفاده کرد:

tail -f /u01/app/oracle/diag/rdbms/cdb1_stby/cdb1/trace/alert_cdb1.log

می‌توان فایل‌های دیتا کپی شده را بعد از پیام زیر مشاهده کرد:

Recovery created pluggable database PDB2
Recovery attempting to copy datafiles for pdb-PDB2 from source pdb-PDB5 at dblink-clone_link

پس از انتقال فایل‌ها به دیتاگارد، می‌توان وضعیت pdb را در دیتابیس اصلی “cdb1” به open تغییر داد:

— Primary
ALTER PLUGGABLE DATABASE pdb2 OPEN;

در این مرحله پارامتر زیر را ریستارت می‌کنیم:

— Standby
ALTER SYSTEM RESET standby_pdb_source_file_dblink;

همچنین می‌توان وضعیت دیتابیس “pdb5” را به حالت read-write تغییر داد:

export ORACLE_SID=cdb3
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

sqlplus / as sysdba <<eof
ALTER PLUGGABLE DATABASE pdb5 CLOSE;
ALTER PLUGGABLE DATABASE pdb5 OPEN;</eof

EXIT;
EOF

export ORACLE_SID=cdb1
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

بررسی وضعیت pdbها در دیتابیس اصلی و دیتاگارد:

— Primary
SET LINESIZE 100
COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status, guid
FROM v$pdbs
ORDER BY 1;

NAME OPEN_MODE RECOVERY GUID

PDB$SEED READ ONLY ENABLED 7FFCBA15929572D9E0536538A8C055AE
PDB1 READ WRITE ENABLED 7FFCD0D366F578BDE0536538A8C01566
PDB2 READ WRITE ENABLED 7FFD420F711E187AE0536538A8C0D422

— Standby
SET LINESIZE 100
COLUMN name FORMAT A30

SELECT name, open_mode, recovery_status, guid
FROM v$pdbs
ORDER BY 1;

NAME OPEN_MODE RECOVERY GUID

PDB$SEED READ ONLY ENABLED 7FFCBA15929572D9E0536538A8C055AE
PDB1 MOUNTED ENABLED 7FFCD0D366F578BDE0536538A8C01566
PDB2 MOUNTED ENABLED 7FFD420F711E187AE0536538A8C0D422

بررسی وضعیت تنظیمات دیتاگارد:

dgmgrl sys/${SYS_PASSWORD}@${NODE2_DB_UNIQUE_NAME} <
Configuration – my_dg_config

Protection Mode: MaxPerformance
Members:
cdb1 – Primary database
cdb1_stby – Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS (status updated 36 seconds ago)

DGMGRL>

STANDBY_PDB_SOURCE_FILE_DIRECTORY:
Plugin a PDB
پارامتر STANDBY_PDB_SOURCE_FILE_DIRECTORY به ما این امکان را می‌دهد که بمنظور تکمیل عملیات plugin ، به دیتاگارد محل فایل‌های دیتا را معرفی کنیم. این فایل‌های دیتا را نمی‌توان بخشی ازpdb archive باشد.
ساخت directory در سرور دیتابیس اصلی اول و دوم برای نگهداری برخی فایل‌های بک‌آپ:

mkdir -p /u01/files

برای اتصال به دیتابیس، باید یک pdb را به حالت unplug در بیاوریم:

— Primary
CONN / AS SYSDBA

ALTER PLUGGABLE DATABASE pdb5 CLOSE INSTANCES=ALL;
ALTER PLUGGABLE DATABASE pdb5 UNPLUG INTO ‘/u01/files/pdb5.xml’;

تهیه بک‌آپ مربوط به pdb:

Primary

rman target=/ <

— Standby

SELECT name, open_mode, recovery_status, guid
FROM v$pdbs
ORDER BY 1;

NAME OPEN_MODE RECOVERY GUID

PDB$SEED MOUNTED ENABLED 7FFCBA15929572D9E0536538A8C055AE
PDB1 MOUNTED ENABLED 7FFCD0D366F578BDE0536538A8C01566
PDB3 MOUNTED ENABLED 7FFE48F43BBD2A0CE0536538A8C04898

SQL>