اوراکل 21c – قابلیت PDB Recovery Isolation

در اوراکل نسخه 19c، دیتاگارد نمی تواند عملیاتی نظیر hot cloning و point-in-time recovery را در سطح PDB مدیریت کند و در صورت انجام این قبیل عملیات در primary، دیتاگارد بدون آنکه از حالت recover خارج شود، از آن PDB صرف نظر کرده و با نادیده گرفتن PDB، به کارش ادامه خواهد داد.

–Data Guard 19c

SQL> select OPEN_MODE from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                           READ ONLY  NO

–Primary 19c

SQL> create pluggable database pdb2  from pdb1;

Pluggable database created.

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                           READ WRITE NO

         5 PDB2                           READ WRITE NO

–Data Guard 19c

SQL> select OPEN_MODE from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

SQL> alter pluggable database pdb2 open;

ORA-01111: name for data file 13 is unknown – rename to correct file

SQL> select name,status from v$datafile;

NAME                                STATUS

———————————– ——-

/oracle19c/home/dbs/UNNAMED00013    SYSOFF

/oracle19c/home/dbs/UNNAMED00014    RECOVER

/oracle19c/home/dbs/UNNAMED00015    RECOVER

/oracle19c/home/dbs/UNNAMED00016    RECOVER

در نسخه 21c، اوراکل برای حل این مسئله قابلیت PDB Recovery Isolation را معرفی کرد که بر اساس آن، پروسه(process)ای اجرا می شود و PDB کلون شده(و یا PDBای که برای آن point in time recovery انجام شده) را در پس زمینه restore و recover خواهد کرد.

در این حین، CDB هرگز از مود recover خارج نمی شود و برای مدت زمان کوتاهی، دو نوع MRP خواهیم داشت که یکی مسئولیت ریکاوری در سطح CDB را بر عهده دارد و دیگری PDB مورد نظر را ریکاور می کند.

با sync شدن PDB با CDB، پروسه MRP مربوط به PDB، از حالت اجرا خارج شده و این دو نوع MRP با هم ادغام خواهند شد.

–Data Guard 21c

SQL> select OPEN_MODE from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         5 PDB1                           READ ONLY  NO

–Primary 21c

SQL> create pluggable database pdb2  from pdb1;

Pluggable database created.

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB2                           MOUNTED

         5 PDB1                           READ ONLY  NO

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         4 PDB2                           READ WRITE NO

         5 PDB1                           READ WRITE NO

–Data Guard 21c

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs where NAME=’PDB2′;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB2                4 DISABLED AUTOMATIC RECOVER

SQL> !sleep 60

SQL> /

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB2                4 ENABLED

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         4 PDB2                           READ ONLY  NO

         5 PDB1                           READ ONLY  NO

همانطور که می بینید، pdb2 در دیتاگارد restore و recover شده است. برای آشنایی بیشتر با این قابلیت، کافی است تا نگاهی به محتویات alert log بیندازیم:

PDB2(4):File #82 added to control file as ‘/oracle21cR3/base/oradata/ST21C/D10C10B001CB7C42E0530488200A6418/datafile/o1_mf_tbs2_jsddhzs7_.dbf’.

2021-11-18T05:59:07.490261-05:00

PDB2(4):Full restore complete of datafile 82 /oracle21cR3/base/oradata/ST21C/D10C10B001CB7C42E0530488200A6418/datafile/o1_mf_tbs2_jsddhv8o_.dbf.  Elapsed time: 0:00:00

PDB2(4):  checkpoint is 72901012

PDB2(4):  last deallocation scn is 2601845

PDB2(4):Datafile #82 has been copied to the standby.

PDB2(4):PDB Side Media Recovery started for pdbid(4)

PDB2(4):…. (PID:457352): Managed Recovery starting Real Time Apply [krsm.c:15865]

PDB2(4):max_pdb is 6

PDB2(4):…. (PID:457352): Media Recovery Waiting for T-1.S-524 (in transit) [krsm.c:6185]

PDB2(4):Media Recovery of Online Log [Thread=1, Seq=524]

PDB2(4):Recovery of Online Redo Log: Thread 1 Group 5 Seq 524 Reading mem 0

PDB2(4):  Mem# 0: /oracle21cR3/base/oradata/ST21C/onlinelog/o1_mf_5_jscwnzg2_.log

PDB2(4):  Mem# 1: /oracle21cR3/FRA/ST21C/onlinelog/o1_mf_5_jscwnznq_.log

PDB2(4):The merge request has been submitted by side recovery for pdbid 4

PR00 (PID:457274): Background Media Recovery cancelled with status 16037 [krd.c:27039]

PSR: Background Media Recovery will be reactivated in an attempt to take over PDB side recovery sessions

Errors in file /oracle21cR3/base/diag/rdbms/st21c/st21c/trace/st21c_pr00_457274.trc:

ORA-16037: user requested cancel of managed recovery operation

PR00 (PID:457274): Managed Recovery not using Real Time Apply [krsm.c:15876]

Recovery interrupted!

Recovered data files to a consistent state at change 72901067

Errors in file /oracle21cR3/base/diag/rdbms/st21c/st21c/trace/st21c_pr00_457274.trc:

ORA-16037: user requested cancel of managed recovery operation

PDB2(4):…. (PID:457352): Side Recovery Complete [krds.c:1584]

PR00 (PID:457979): Media Recovery Waiting for T-1.S-524 (in transit) [krsm.c:6185]

2021-11-18T05:59:42.565481-05:00

Recovery of Online Redo Log: Thread 1 Group 5 Seq 524 Reading mem 0

  Mem# 0: /oracle21cR3/base/oradata/ST21C/onlinelog/o1_mf_5_jscwnzg2_.log

  Mem# 1: /oracle21cR3/FRA/ST21C/onlinelog/o1_mf_5_jscwnznq_.log

 

چالشها!

چالش 1: اگر دیتاگارد در وضعیت mount قرار داشته باشد، process مربوط به قابلیت PDB Recovery Isolation تا زمان open شدن دیتاگارد منتظر خواهد ماند و بلافاصله بعد از open شدن دیتاگارد، عملیات ریکاوری را برای PDB استارت خواهد زد:

–Data Guard

SQL> startup mount force;

SQL> alter database recover managed standby database disconnect;

–Primary

SQL> create pluggable database pdb3  from pdb1;

Pluggable database created.

SQL> alter pluggable database pdb3 open;

Pluggable database altered.

–Data Guard

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       MOUNTED

         3 PDB3                           MOUNTED

         4 PDB2                           MOUNTED

         5 PDB1                           MOUNTED

 

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB$SEED        2 ENABLED

PDB3                 3 DISABLED AUTOMATIC RECOVER

PDB2                  4 ENABLED

PDB1                 5 ENABLED

در ادامه مشاهده می کنید که بلافاصله با open شدن دیتاگارد، AUTOMATIC RECOVER برای PDB3 استارت خواهد شد:

–Data Guard

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter database recover managed standby database disconnect;

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB$SEED            2 ENABLED

PDB3                3 DISABLED AUTOMATIC RECOVER

PDB2                4 ENABLED

PDB1                5 ENABLED

SQL> /

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB$SEED            2 ENABLED

PDB3                3 DISABLED AUTOMATIC RECOVER

PDB2                4 ENABLED

PDB1                5 ENABLED

SQL> !sleep 60

SQL> /

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB$SEED            2 ENABLED

PDB3                3 ENABLED

PDB2                4 ENABLED

PDB1                5 ENABLED

همانطور که می بینید، PDB3 به صورت خودکار ریکاور شده و RECOVERY_STATUS آن در حالت ENABLED قرار گرفته است.

چالش 2: در صورتی که هنگام انجام عملیات PDB Recovery Isolation، دیتاگارد restart شود، عملیات PDB Recovery Isolation پس از قرار گرفتن دیتاگارد در حالت recover، مجددا استارت خواهد شد و به کارش ادامه می دهد(دیتافایلها صرفا یکبار restore خواهند شد):

–Primary

SQL> create pluggable database pdb4 from pdb1;

Pluggable database created.

–Data Guard

SQL> startup force;

SQL> alter database recover managed standby database disconnect;

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs where NAME=’PDB5′;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB4                6 DISABLED AUTOMATIC RECOVER

SQL> !sleep 60

SQL> /

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB4                6 ENABLED

چالش 3: برای متوقف کردن عملیات PDB Recovery Isolation می توان از دستور زیر استفاده کرد:

–Primary

SQL> create pluggable database pdb5 from pdb1;

Pluggable database created.

–Data Guard

SQL> ALTER PLUGGABLE DATABASE PDB5 RECOVER MANAGED STANDBY DATABASE CANCEL;

Pluggable database altered.

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs where NAME=’PDB5′;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB5                7 DISABLED

همچنین برای استارت مجدد ان می توان از دستور زیر استفاده کرد:

–Data Guard

SQL> ALTER PLUGGABLE DATABASE PDB5 RECOVER MANAGED STANDBY DATABASE;

Pluggable database altered.

SQL> select name,CON_ID,RECOVERY_STATUS from v$pdbs where NAME=’PDB5′;

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB5                7 DISABLED AUTOMATIC RECOVER

SQL> !sleep 60

SQL> /

NAME           CON_ID RECOVERY_STATUS

———- ———- ————————–

PDB5                7 ENABLED

چالش 4: در قسمت ابتدایی متن هم بیان شد که Point-In-Time Recovery در سطح PDB به صورت خودکار توسط قابلیت PDB Recovery Isolation مدیریت خواهد شد(در نسخه 21c).در ادامه تفاوت رفتار اوراکل نسخه 19c و 21c را در این زمینه مشاهده می کنید.

–Primary_19c

[oracle@RAC2 ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 – Production on Thu Nov 18 16:42:34 2021

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB21C (DBID=249297340)

RMAN>   RUN {

  ALTER PLUGGABLE DATABASE pdb1 CLOSE;

  SET UNTIL SCN 2518869;

  RESTORE PLUGGABLE DATABASE pdb1;

  RECOVER PLUGGABLE DATABASE pdb1;

  ALTER PLUGGABLE DATABASE pdb1 OPEN RESETLOGS;

}

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                           READ WRITE NO

–Data Guard_19c

SQL> alter database recover managed standby database;   

ORA-00283: recovery session canceled due to errors

ORA-65138: Data file 9 of pluggable database PDB1 belongs to an orphan PDB

incarnation.

ORA-01110: data file 9: ‘/oracle19c/base/oradata/DB21C/pdb1/system01.dbf’

همانطور که می بینید، در اوراکل 19c عملیات PITR در سطح PDB توسط دیتاگارد مدیریت نمی شود اما در ادامه خواهیم دید که اوراکل 21c، قابلیت PDB Recovery Isolation مانع از رخ دادن خطاهای فوق خواهد شد:

–Primary_21c

SQL> ALTER PLUGGABLE DATABASE pdb1 CLOSE immediate;

Pluggable database altered.

SQL> select name from v$datafile where con_id=3;

[oracle@oLinux7 ~]$ rm -rf /oracle21c/base/oradata/DB21C/D1111E988CA95792E0530488200A2486

–Data Guard_21c

SQL> ALTER PLUGGABLE DATABASE pdb1 CLOSE immediate;

SQL> select name from v$datafile where con_id=3;

[oracle@oLinux7 ~]$ rm -rf /oracle21c/base/oradata/DB21C/D1111E988CA95792E0530488200A2486

–Primary_21c

[oracle@oLinux7 ~]$ rman target /

Recovery Manager: Release 21.0.0.0.0 – Production on Thu Nov 18 08:31:59 2021

Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB21C (DBID=246486353)

RMAN> RUN {

  SET UNTIL SCN 72957710;

  RESTORE PLUGGABLE DATABASE pdb1;

  RECOVER PLUGGABLE DATABASE pdb1;

  ALTER PLUGGABLE DATABASE pdb1 OPEN RESETLOGS;

}

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                           READ WRITE NO

SQL> SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;

    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN

———- ——- ———- ——————- —————–

         3 PARENT           0            27261799          27261799

         3 CURRENT          2            72958406          72958406

–Data Guard_21c

SQL> select OPEN_MODE from v$database;

OPEN_MODE

——————–

READ ONLY WITH APPLY

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

———- —————————— ———- ———-

         2 PDB$SEED                       READ ONLY  NO

         3 PDB1                           READ ONLY  NO

SQL> alter session set container=pdb1;

Session altered.

SQL> SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;

    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN

———- ——- ———- ——————- —————–

         3 PARENT           0            27261799          27261799

         3 CURRENT          2            72958406          72958406

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

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

نشانی ایمیل شما منتشر نخواهد شد.