کپی یک PDB در محیط دیتاگارد اوراکل ۱۸c
مقدمه
زمانی که یک PDB جدید از روی Seed ساخته می شود، یا یک کلون از PDB موجود در Root Container لوکال گرفته می شود دیتاگارد به طور خودکار آن را ایجاد میکند. اما PDBهای ایجاد شده توسط Remote Clone و plugin، بطور خودکار مدیریت نشده و در دیتاگارد ایجاد نخواهند شد. در اوراکل ۱۸c پارامترهای STANDBY_PDB_SOURCE_FILE_DBLINK و STANDBY_PDB_SOURCE_FILE_DIRECTORY عملیات plugin و Remote Clone را سادهتر کردهاند.
کپی یک PDB در محیط دیتاگارد اوراکل ۱۸c
لازم بذکر است این قابلیت در اوراکل ۱۲٫۱٫۰٫۲ نیز وجود داشت اما از اوراکل ۱۸ در مستندات رسمی وجود دارد.
فرضیات
قبل از این که تلاش کنید تا از این ویژگی برای خودتون استفاده کنید، این نکات را در نظر داشته باشید.
شما می دانید که اشتباهات در پایگاهداده های Standby می تواند شما را در موقعیتی قرار دهد تا مجبور به کانفیگ مجدد پایگاهداده Standby شوید. حتماً این مورد را درنظر بگیرید که قبل از انجام این دستورات در محیط تستی، هرگز آن را در محیط های عملیاتی و پایگاهداده های مهم بکار نبرید. اگر محیط تستی مناسبی نداشتید آن را ایجاد کنید.
علاوه بر پایگاهداده های Primary و Standby یک نود در CDB دیگر باید وجود داشته باشد تا بتوانیم به عنوان منبع(Source) پایگاهداده Remote Clone از آن استفاده کنیم.
-CDB1 (CDB1):پایگاهداده Primary که حاوی یک PDB به نام PDB1 می باشد.
-CDB1 (cdb_stby): پایگاهداده Standby که از یک PDB به نام PDB1 از پایگاهداده Primary محافظت می-کند (ADG).
-CDB3: پایگاهداده حاوی یک PDB به نام PDB5 جهت استفاده برای منبعRemote Clone.
خروجی زیر وضعیت PDBهای پایگاهداده های Standby و Primary را نشان می دهد.
— 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 7FD2A7B8B56772FFE0536538A8C0ECC3
PDB1 READ WRITE ENABLED 7FD2C1FCD1227929E0536538A8C0E1F1
SQL>
— 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 7FD2A7B8B56772FFE0536538A8C0ECC3
PDB1 MOUNTED ENABLED 7FD2C1FCD1227929E0536538A8C0E1F1
SQL>
Remote Clone a PDB
پارامتر STANDBY_PDB_SOURCE_FILE_DBLINK در پایگاهداده Standby تنظیم می شود، و در پایگاهداده Primary برای انجام Remote Clone از شناسه dblink. زمانی که پایگاهداده Standby، Redoهای مرتبط با عملیات PDB Clone پایگاهداده Primary را دریافت می کند، با استفاده از dblink عملیات فوق را روی پایگاهداده Standby انجام می دهد. لازم به توضیح است برخی محدودیت های برای عملیات فوق وجود دارد.
-پایگاهداده Standby باید در حالت Active Data Guard (ADG) باشد.
-PDB منبع باید حتماً در حالت Read-Only باشد. این قابلیت از قابلیت Hot Clone معرفی شده در اوراکل ۱۲٫۲ استفاده نمی کند.
و اما در عمل…
ایجاد یک یوزر برای dblink در پایگاهداده منبع CDB3.
export ORACLE_SID=CDB3
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
# Create link user.
sqlplus / as sysdba <<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 روی پایگاهداده Primary (CDB1) به پایگاهداده منبع (CDB3) با کاربر ایجاد شده.
export ORACLE_SID=CDB1
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
# Create database link.
sqlplus / as sysdba <<EOF
CREATE DATABASE LINK clone_link
CONNECT TO c##remote_clone_user IDENTIFIED BY remote_clone_user USING ‘CDB3’;
exit;
EOF
بررسی کنید که از روی پایگاهداده Standby، می توانید به پایگاهداده منبع (CDB3) متصل شوید. همچنین شما نیاز به تنظیمات فایل tnsnames.ora (وارد نمودن موارد ذکر شده) روی همه سرورها دارید.
cat >> $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
پایگاهداده Standby را به حالت 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
Dblink ایجاد شده را روی پایگاهداده Standby بررسی کنید، سپس آن را برای پارامتر STANDBY_PDB_SOURCE_FILE_DBLINK تنظیم کنید.
— Standby
SELECT * FROM dual@clone_link;
ALTER SYSTEM SET STANDBY_PDB_SOURCE_FILE_DBLINK=’clone_link’;
به پایگاهداده منبع (CDB3) متصل شوید، سپس پایگاهدادهPDB5 را در حالت Open Read-Only قرار دهید.
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;
EXIT;
EOF
روی پایگاهداده Primary یک Pluggable جدید به نام PDB2 توسط Remote Clone ( از پایگاهداده 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;
EXIT;
EOF
صبر کنید تا تمام دیتافایل ها در Standby کپی شود. شما می توانید با استفاده از چک کردن 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
زمانی که فایل ها به پایگاهداده Standby کپی شد شما می توانید با اطمینان PDB را در پایگاهداده Primary به وضعیت Open ببرید، همچنین باید پارمتر را روی پایگاهداده Standby به حالت اول تغییر دهید(Reset).
— Primary
ALTER PLUGGABLE DATABASE pdb2 OPEN;
— Standby
ALTER SYSTEM RESET standby_pdb_source_file_dblink;
در این مرحله شما می توانید PDB پایگاهداده منبع را به وضعیت Open 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;
EXIT;
EOF
export ORACLE_SID=CDB1
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
وضعیت فعلی PDBها را در پایگاهداده های Primary و Standby بررسی کنید.
— 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
SQL>
— 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
SQL>
وضعیت سرویس ADG را نیز بررسی کنید.
dgmgrl sys/${SYS_PASSWORD}@${NODE2_DB_UNIQUE_NAME} <<EOF
SHOW CONFIGURATION;
EXIT;
EOF
خروجی زیر را به شما نمایش خواهد داد.
DGMGRL for Linux: Release 18.0.0.0.0 – Production on Mon Jan 21 18:54:14 2019
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “CDB1”
Connected as SYSDG.
DGMGRL>
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>
$
با پاکسازی و حذف PDB2 از پایگاهداده Primary همه چیز را برای آزمایش بعد آماده می کنیم.
— Primary
ALTER PLUGGABLE DATABASE pdb2 CLOSE;
DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;
حال می بینید که با حذف PDB2 از پایگاهداده Primary به طور معمول از پایگاهداده Standby نیز حذف شده است.
— 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
SQL>
— 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
SQL>
شما همچنین می توانید ADG را غیر فعال کنید.
# Standby – Active Data Guard (ADG).
sqlplus / as sysdba <<EOF
CONN / AS SYSDBA
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
EXIT;
EOF
Plugin a PDB
پارامتر STANDBY_PDB_SOURCE_FILE_DIRECTORY شمارا قادر می سازد تا مسیر پشتیبان، دیتافایل ها را برای پایگاهداده Standby مشخص کنید، جهت یافتن دیتافایل ها و تکمیل فرایند Plugin که توسط پایگاهداده Primary آغاز شده است. این دیتافایل ها نمی تواند بخشی از آرشیو PDB باشد.
ایجاد یک دایرکتوری روی پایگاهداده Primary و سرور ثانویه برای نگهداری فایل های بکاپ.
mkdir -p /u01/files
شما می خواهید یک پایگاهداده Plugin داشته باشد، بنابراین ابتدا باید یک PDB ایجاد کنید و سپس آن را Unplug کنید به عنوان شروع آزمایش…
— Primary
CONN / AS SYSDBA
CREATE PLUGGABLE DATABASE pdb5
ADMIN USER pdb_admin IDENTIFIED BY Password1;
ALTER PLUGGABLE DATABASE pdb5 OPEN;
ALTER PLUGGABLE DATABASE pdb5 CLOSE INSTANCES=ALL;
ALTER PLUGGABLE DATABASE pdb5 UNPLUG INTO ‘/u01/files/pdb5.xml’;
از فایل های مرتبط با PDB بکاپ بگیرید.
# Primary
rman target=/ <<EOF
BACKUP AS COPY PLUGGABLE DATABASE pdb5 FORMAT ‘/u01/files/%U’;
EXIT;
EOF
سپس PDB را با اطمینان Drop کنید.
— Primary
CONN / AS SYSDBA
DROP PLUGGABLE DATABASE pdb5 INCLUDING DATAFILES;
بکاپ دیتافایل ها را روی سرور Standby کپی کنید و آن ها را در مسیر “/u01/files” قرار دهید.
سپس پارامتر STANDBY_PDB_SOURCE_FILE_DIRECTORY را روی پایگاهداده Standby به مقدار آدرس محل کپی فایل ها، تنظیم کنید.
— Standby
CONN / AS SYSDBA
ALTER SYSTEM SET standby_pdb_source_file_directory=’/u01/files’;
یک پایگاهداده Pluggable به نام PDB3 روی پایگاهداده Primary بر پایه PDB که Unplug کرده اید ایجاد کنید.
— Primary
CONN / AS SYSDBA
CREATE PLUGGABLE DATABASE pdb3 as clone
USING ‘/u01/files/pdb5.xml’ COPY
SOURCE_FILE_DIRECTORY=’/u01/files’;
صبر کنید تا تمام فایل ها روی Standby کپی شود.
tail -f /u01/app/oracle/diag/rdbms/CDB1_stby/CDB1/trace/alert_CDB1.log
بعد از اینکه پیام زیر را مشاهده کردید خواهید دید که دیتافایل ها کپی شده است.
Recovery created pluggable database PDB3
Recovery attempting to copy datafiles for pdb-PDB3 from source dir-/u01/files
پس از تکمیل ایجاد PDB بر روی پایگاهداده Standby شما می توانید PDB در پایگاهداده Primary را Open کنید.
— Primary
ALTER PLUGGABLE DATABASE pdb3 OPEN READ WRITE;
شما می بینید که پایگاهداده PDB3 برروی Standby و Primary ایجاد شده است.
— 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
PDB3 READ WRITE ENABLED 7FFE48F43BBD2A0CE0536538A8C04898
SQL>
— 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 MOUNTED ENABLED 7FFCBA15929572D9E0536538A8C055AE
PDB1 MOUNTED ENABLED 7FFCD0D366F578BDE0536538A8C01566
PDB3 MOUNTED ENABLED 7FFE48F43BBD2A0CE0536538A8C04898
SQL>
وضعیت دیتاگارد را نیز بررسی کنید.
dgmgrl sys/${SYS_PASSWORD}@${NODE2_DB_UNIQUE_NAME} <<EOF
SHOW CONFIGURATION;
EXIT;
EOF
خروجی زیر را به شما نمایش می دهد.
DGMGRL for Linux: Release 18.0.0.0.0 – Production on Mon Jan 21 20:00:53 2019
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “CDB1_stby”
Connected as SYSDBA.
DGMGRL>
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 37 seconds ago)
DGMGRL>
$
با حذف PDB3 پایگاهداده Primary را پاکسازی کنید.
— Primary
ALTER PLUGGABLE DATABASE pdb3 CLOSE;
DROP PLUGGABLE DATABASE pdb3 INCLUDING DATAFILES;
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.