زمانی که یک pdb را با استفاده از روش plug/unplug از نسخه پایین تر به دیتابیسی با نسخه بالاتر منتقل می کنیم، امکان open کردن این pdb به صورت نرمال وجود ندارد مگر آنکه نسخه pdb را ارتقا دهیم(تا قبل از اوراکل 21c!).
برای مثال، در قسمت زیر، pdb18 را از نسخه 18c به نسخه 19c انتقال دادیم و قصد داریم بدون ارتقا این pdb را open کنیم:
SQL*Plus: Release 19.0.0.0.0 – Production on Sat Sep 25 07:26:59 2021
Version 19.3.0.0.0
SQL> create pluggable database PDB18 using ‘/home/oracle/PDB18C.xml’ nocopy;
Pluggable database created.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
4 PDB18 MOUNTED
SQL> alter pluggable database PDB18 open;
Warning: PDB altered with errors.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
4 PDB18C MIGRATE YES
SQL> alter session set container=PDB18;
Session altered.
SQL> select message from PDB_PLUG_IN_VIOLATIONS where name=’PDB18′;
MESSAGE
——————————————————————————–
PDB’s version does not match CDB’s version: PDB’s version 18.0.0.0.0. CDB’s version 19.0.0.0.0.
همانطور که می بینید، pdb18 به دلیل عدم مطابقت نسخه های PDB و CDB، به صورت نرمال open نشده و در حالت MIGRATE قرار گرفته است. بنابرین برای آنکه pdb18 به صورت نرمال باز شود، باید PDB را به نسخه CDB ارتقا داد.
در اوراکل نسخه 21c تغییری در این زمینه ایجاد شد و قابلیت جدیدی به نام Replay Upgrade ارائه شد که بر اساس این فیچر، در صورت تفاوت نسخه PDB و CDB، اوراکل به صورت خودکار PDB را به نسخه CDB ارتقا می دهد و نیازی به ارتقاء دستی PDB نخواهیم داشت. ارتقا خودکار در زمانی که pdb را برای اولین بار open می کنیم، اتفاق می افتد.
SQL*Plus: Release 21.0.0.0.0 – Production on Sat Sep 25 07:30:29 2021
Version 21.3.0.0.0
SQL> create pluggable database PDB18C using ‘/home/oracle/PDB18C.xml’ nocopy;
Pluggable database created.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB18C MOUNTED
SQL> alter pluggable database PDB18C open;
Elapsed: 00:18:31.09
با اجرای این دستور، اوراکل pdb18c را از نسخه 18cR3 به نسخه 21cR3 ارتقا خواهد داد. اجرای دستور فوق در محیط تستی ما، حدودا 18 دقیقه به طول انجامید. در alert log جزییاتی از انچه که در زمان اجرای این دستور اتفاق افتاده را مشاهده می کنید:
alter pluggable database PDB18C open
2021-09-25T07:31:24.372017-04:00
PDB18C(3):Pluggable database PDB18C opening in read write
2021-09-25T07:31:29.318534-04:00
PDB18C(3):Starting Upgrade on PDB Open
….
2021-09-25T07:49:35.164487-04:00
PDB18C(3):alter pluggable database application APP$CDB$CATALOG end upgrade
PDB18C(3):Completed: alter pluggable database application APP$CDB$CATALOG end upgrade
2021-09-25T07:49:35.264903-04:00
Pluggable database PDB18C opened read write
Completed: alter pluggable database PDB18C open
بعد از اجرای دستور alter pluggable database .. open خواهیم دید که pdb18c به صورت نرمال و در حالت READ WRITE باز شده است:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PDB18C READ WRITE NO
همچنین وضیعت خطای عدم تطابق نسخه pdb و cdb به ‘RESOLVED’ تغییر کرده است:
SQL> select message from PDB_PLUG_IN_VIOLATIONS where name=’PDB18C’ and STATUS=’RESOLVED’;
MESSAGE
——————————————————————————–
PDB’s version does not match CDB’s version: PDB’s version 18.0.0.0.0. CDB’s version 21.0.0.0.0.
اگر در هنگام اجرای دستور alter pluggable database .. open دیتابیس به هر دلیلی crash کند یا کاربر اجرای ان را متوقف کند، با اجرای مجدد این دستور، عملیات ارتقا مجددا انجام خواهد شد:
SQL> alter pluggable database PDB18C open;
^C alter pluggable database PDB18C open
ORA-01013: user requested cancel of current operation
Elapsed: 00:10:42.57
SQL> alter pluggable database PDB18C close;
Pluggable database altered.
SQL> alter pluggable database PDB18C open;
Elapsed: 00:25:31.09