ارتقا non-cdb به اوراکل 21c با کمک قابلیت Replay Upgrade

همانطو که می دانید اوراکل در نسخه 21cء، Non-CDB را ساپورت نمی کند بنابرین برای ارتقا یک دیتابیس Non-CDB به نسخه 21c، ابتدا باید آن را به PDB تبدیل کرد و پس از آن، PDB را به نسخه 21c ارتقا داد.

قابلیت Replay Upgrade که از قابلیتهای جدید اوراکل در نسخه 21c است، این امکان را می دهد تا بخشهای از عملیات ارتقا Non-CDB به صورت خودکار انجام شود. برای مثال، بعد از plug کردن Non-CDB به یک دیتابیس CDB، نیازی به اجرای اسکریپت noncdb_to_pdb.sql نخواهد بود و در زمان open کردن PDB، نسخه PDB به 21c ارتقا پیدا خواهد کرد.

در ادامه این متن، مراحل ارتقا non-cdb از نسخه 18c به نسخه 21c را با کمک قابلیت Replay Upgrade مشاهده می کنید.

مرحله اول: دیتابیس non-cdb را در حالت Read-Only قرار می دهیم:

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup open read only

ORACLE instance started.

Total System Global Area 1442839376 bytes

Fixed Size                  8657744 bytes

Variable Size             905969664 bytes

Database Buffers          520093696 bytes

Redo Buffers                8118272 bytes

Database mounted.

Database opened.

مرحله دوم: در این مرحله، از طریق پروسیجر DBMS_PDB.DESCRIBE، فایل XMLای حاوی متادیتا دیتابیس NON-CDB را ایجاد می کنیم:

SQL> exec DBMS_PDB.DESCRIBE(‘/home/oracle/noncdb18c.xml’);

PL/SQL procedure successfully completed.

مرحله سوم: دیتابیس نسخه 18c را shutdown و instance مربوط به 21c را استارت می کنیم:

SQL*Plus: Release 18.0.0.0.0 – Production on Sun Sep 26 18:51:30 2021

SQL> shut abort

ORACLE instance shut down.

SQL*Plus: Release 21.0.0.0.0 – Production on Sun Sep 26 20:02:59 2021

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 1438645216 bytes

Fixed Size                  9698272 bytes

Variable Size             562036736 bytes

Database Buffers          339738624 bytes

Redo Buffers                2883584 bytes

In-Memory Area            524288000 bytes

Database mounted.

Database opened.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         4 PDB1                                 READ WRITE NO

مرحله چهارم: با اجرای بلاک زیر در اوراکل 21c بررسی می کنیم که دیتابیس non-cdb با محیط جدید سازگار هست یا نه؟

SET SERVEROUTPUT ON;

DECLARE

compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => ‘/home/oracle/noncdb18c.xml’)

WHEN TRUE THEN ‘YES’

ELSE ‘NO’

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(compatible);

END;

/

NO

همانطور که می بینید، پاسخ منفی هست! دلایل عدم سازگاری را می توانیم از طریق ویوی PDB_PLUG_IN_VIOLATIONS ببینیم:

SQL> select MESSAGE,type,status from PDB_PLUG_IN_VIOLATIONS;

PDB plugged in is a non-CDB, requires noncdb_to_pdb.sql be run.

WARNING   PENDING

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.

ERROR     PENDING

CDB parameter processes mismatch: Previous 1300 Current 300

WARNING   PENDING

CDB parameter sga_target mismatch: Previous 1376M Current 1372M

WARNING   PENDING

CDB parameter compatible mismatch: Previous ‘18.0.0’ Current ‘21.0.0’

WARNING   PENDING

Interim patch 27923415/22239273 (OJVM RELEASE UPDATE: 18.3.0.0.180717 (27923415)): Not installed in the CDB but installed in the PDB

ERROR     PENDING

No release updates are installed in the CDB but ‘18.3.0.0.0 Release_Update 180628094’ is installed in the PDB

ERROR     PENDING

لیست violationها را در قسمت فوق مشاهده می کنید که البته بعضی از آنها اهمیت چندانی ندارند. مهمترین انها، اجرای اسکریپت noncdb_to_pdb.sql و عدم تطابق نسخه PDB با CDB هست.

مرحله پنجم: با فایل xml ایجاد شده(مرحله دوم) در دیتابیس CDB21c یک PDB ایجاد می کنیم:

SQL> Create pluggable database noncdb18c using ‘/home/oracle/noncdb18c.xml’ nocopy;

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 NONCDB18C                      MOUNTED

         4 PDB1                           READ WRITE NO

مرحله ششم: با اجرای دستور زیر، pdb ایجاد شده که در واقع یک non-cdb هم هست، به نسخه 21c ارتقا یافته و به صورت نرمال open خواهد شد البته اجرای این دستور، حدودا 25 دقیقه به طول می انجامد! و این دستور، منجر به اجرا شدن اسکریپت noncdb_to_pdb.sql هم می شود.

SQL> alter pluggable database NONCDB18C open;

Pluggable database altered.

Elapsed: 00:25:29.81

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 NONCDB18C                      READ WRITE NO

         4 PDB1                           READ WRITE NO

در alert log جزییاتی از انچه که در زمان اجرای این دستور اتفاق افتاده را مشاهده می کنید:

NONCDB18C(3):Starting Upgrade on PDB Open

2021-09-26T20:42:33.009910+03:30

NONCDB18C(3):alter pluggable database application APP$CDB$CATALOG begin install ‘18.0.0.0.0’ on error capture

NONCDB18C(3):ORA-65229 signalled during: alter pluggable database application APP$CDB$CATALOG begin install ‘18.0.0.0.0’ on error capture…

NONCDB18C(3):alter pluggable database application APP$CDB$CATALOG end install ‘18.0.0.0.0’

NONCDB18C(3):Completed: alter pluggable database application APP$CDB$CATALOG end install ‘18.0.0.0.0’

2021-09-26T20:42:34.145255+03:30

NONCDB18C(3):alter pluggable database application APP$CDB$CATALOG begin upgrade

  ‘18.0.0.0.0’ to ‘21.0.0.0.0.partial’ on error capture

NONCDB18C(3):Completed: alter pluggable database application APP$CDB$CATALOG begin upgrade

  ‘18.0.0.0.0’ to ‘21.0.0.0.0.partial’ on error capture

2021-09-26T20:42:47.222716+03:30

2021-09-26T20:58:34.612594+03:30

NONCDB18C(3):SERVER COMPONENT id=OWM: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 20:58:34 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=RAC: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 20:58:35 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=JAVAVM: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 20:59:26 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=XML: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 21:01:00 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=CATJAVA: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 21:01:16 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=XDB: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 21:02:22 Container=NONCDB18C Id=3

NONCDB18C(3):SERVER COMPONENT id=ORDIM: status=UPGRADED, version=21.3.0.0.0, timestamp=2021-09-26 21:03:54 Container=NONCDB18C Id=3

در پایان با مشاهده ویوی PDB_PLUG_IN_VIOLATIONS، خواهیم دید که خطاهای گزارش شده در حالت RESOLVED قرار گرفته اند:

SQL> select count(*) from PDB_PLUG_IN_VIOLATIONS  where name=’NONCDB18C’ and status=’RESOLVED‘;

        20

 

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

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

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