Artarad_18C

کپی یک 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;

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *