سلام به همه دوستان

خب اگه با من همراه باشید به خاطر دارید که ما دیتابیس 11.2.0.4 را upgrade کردیم به 18.3 و با استفاده از patch های که زدیم به نسخه 18.4 مهاجرت کردیم 


یکی از Feature های خوبی که از 12.1 معرفی شد استفاده از PDB های بود که در مقاله ای سعی میکنم توضیح در مورد این نوع دیتابیس های بدم .


خب خیلی از دوستان که  دیتابیس های 11.3 و11.4 را upgrade میکنن میخواهند از این feature  جدید هم استفاده کنن که وقتی دیتابیس را 12 یا 18 کردن به صورت non CDB هست که در این پست من انتقال دیتابس از Non-cdb به cdb رو توضیح میدم که سعی میکنم حالت های مختلف رو اینجا و در پست های مختلف توضیح بدم


ما یه دیتابیسی داریم که 18.4 و به صورت non cdb هست 

[oracle@testupgradedb ~]$ !sql
sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Fri Mar 29 22:18:02 2019
Version 18.4.1.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.1.0.0

SQL> select name,cdb,con_id,log_mode,database_role from v$database;

NAME      CDB     CON_ID LOG_MODE     DATABASE_ROLE
--------- --- ---------- ------------ ----------------
ORCLTEST  NO           0 ARCHIVELOG   PRIMARY

SQL>

همانطور که در بالا مشاهده میکنید دیتابیس من در mod noncdb هست برای اینکار من یک دیتابیس cdb نصب کردم در همین سرور

SQL>  select name,cdb,con_id,log_mode,database_role from v$database;

NAME      CDB     CON_ID LOG_MODE     DATABASE_ROLE
--------- --- ---------- ------------ ----------------
CDB12C    YES          0 ARCHIVELOG   PRIMARY

SQL>
خب حالا دیتابس non cdb رو به مد read only تغییر میدیم
SQL> shut immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup open read only;
ORACLE instance started.

Total System Global Area 1962930464 bytes
Fixed Size                  8659232 bytes
Variable Size             570425344 bytes
Database Buffers         1375731712 bytes
Redo Buffers                8114176 bytes
Database mounted.
Database opened.
خب حالا با استفاده از pakage  dbms_pdb xml  مورد نیاز رو تهیه میکنیم
SQL> BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/orcltest.xml');
END;
/  2    3    4

PL/SQL procedure successfully completed.

در این سناریو من دیتابیس cdb هم در یک host قرار دارد در سناریو های بعدی ما دیتابیس خودمون رو روی asm و در دیگر host قرا میدهیم

خب حالا به دینابیس CDB خودمون متصل میشیم

[oracle@testupgradedb ~]$ export ORACLE_SID=cdb12c
[oracle@testupgradedb ~]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Fri Mar 29 22:32:36 2019
Version 18.4.1.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.1.0.0

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
SQL>
خب شروع به فراینده انتقال میکنیم
SQL> CREATE PLUGGABLE DATABASE pdb2 USING '/tmp/orcltest.xml' COPY;

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         5 PDB2                           MOUNTED

همانطور که ملاحظه میکنید PDB2  در حالت mount قرار دارد  خب قبل از open کردن آن ما باید script noncdb_to_pdb رو اجرا کنیم 
SQL> alter session set container=PDB2;

Session altered.

SQL> @noncdb_to_pdb.sql


خب حالا از view PDB_PLUG_IN_VIOLATIONS وضعیت خطاها را چک میکنیم و رفع خطا میکنیم
SQL>  select time,name,status,type,message from PDB_PLUG_IN_VIOLATIONS;

TIME                           NAME                 STATUS    TYPE      MESSAGE
------------------------------ -------------------- --------- --------- ----------------------------------------------------------------------
29-MAR-19 10.45.40.930962 PM   PDB2                 RESOLVED  WARNING   CDB parameter processes mismatch: Previous 300 Current 480
29-MAR-19 10.45.40.930962 PM   PDB2                 RESOLVED  WARNING   CDB parameter compatible mismatch: Previous '11.2.0.4.0' Current '18.0
                                                                        .0'

29-MAR-19 10.45.40.930962 PM   PDB2                 RESOLVED  WARNING   CDB parameter pga_aggregate_target mismatch: Previous 620M Current 621
البته ما میتونیم اببتدا بررسی کنیم که مشکلی برای انتقال وجود دارد یا نه 
SQL> SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/tmp/orcltest.xml',
pdb_name => 'PDB2')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/SQL>   2    3    4    5    6    7    8    9   10   11   12
YES

PL/SQL procedure successfully completed.
و سپس این view PDB_PLUG_IN_VIOLATIONS را ببینیم و خطا ها ابتدا رفع کنیم و سپس ادامه بدهیم
SQL> col cause for a20
col name for a10
col message for a70 word_wrapped
select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='PDB3';SQL> SQL> SQL>

NAME       CAUSE                TYPE      MESSAGE                                                                STATUS
---------- -------------------- --------- ---------------------------------------------------------------------- ---------
PDB2       Parameter            WARNING   CDB parameter processes mismatch: Previous 300 Current 480             PENDING

PDB2       Parameter            WARNING   CDB parameter compatible mismatch: Previous '11.2.0.4.0' Current       PENDING
                                          '18.0.0'

PDB2       Parameter            WARNING   CDB parameter pga_aggregate_target mismatch: Previous 620M Current     PENDING
                                          621M

خب ما بعد از رفع این waring ها دیتابیس PDB2 را open  میکنیم
SQL> alter pluggable database open;

Pluggable database altered.


در ادامه در مورد خطا های احتمالی مثل character set و انواع مختلف خطاهای که ممکنه در  ویو PDB_PLUG_IN_VIOLATIONS ببینم رو بررسی خواهیم کرد

موفق باشید