وبلاگ مسعود حاجی حسن پور

راهکار های عملی اوراکل

راهکار های عملی اوراکل

این وبلاگ جهت به اشتراک گذاری تجربیات و راهکار های عملی در زمینه پایگاه داده اوراکل می باشد.

دستاوردها
طبقه بندی موضوعی

۱ مطلب با کلمه‌ی کلیدی «pdb» ثبت شده است

unplug نمودن، بازیابی description xml file و plug نمودن pdb به cdb دیگر

با سلام خدمت دوستان عزیز
در Multitenant container database یکی از قابلیت های خیلی خوب، قابلیت unplug و plug نمودن pdb در یک cdb دیگر هست. برای این منظور لازم هست اول مقداری راجب به unplug نمودن pdb توضیح دهم. در زمانی که pdb را unplug میکنیم یک فایل xml  تولید میگردد که option های آن pdb را توصیف میکند. سپس با استفاده از همان description xml file آن pdb را به cdb دیگر متصل (plug) میکنیم. فرض کنید پس از unplug نمودن pdb فایل xml ما یا معیوب شده است یا از دست رفته است. پس با من همراه باشید که طی یک سناریو مطالب زیر را دنبال کنیم:
 
  1. چگونه pdb را unplug کنیم ؟
  2. چگونه description xml file را بازیابی کنیم ؟
  3. چگونه pdb  را با استفاده از description xml file به cdb دیگر plug کنیم ؟
اول وضعیت cdb مبدا و pdb ها ای که به آن متصل شده است را بررسی میکنیم:
[oracle@oel7 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Jan 31 14:57:34 2018

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select name, cdb from v$database;

NAME      CDB
--------- ---
DB12C     YES

SQL> col name for a20;
SQL> select con_id, name, open_mode, restricted from v$pdbs;

    CON_ID NAME                 OPEN_MODE  RES
---------- -------------------- ---------- ---
         2 PDB$SEED             READ ONLY  NO
         3 MYPDB                READ WRITE NO
         4 MAS12C               READ WRITE NO

طی دستور های زیر mypdb  را از پایگاه داده مبدا unplug و سپس حذف میکنیم.

SQL> alter pluggable database mypdb close;
2018-01-31T15:10:55.443763+03:30
MYPDB(3):JIT: pid 40960 requesting stop
Pluggable database MYPDB closed
Completed: alter pluggable database mypdb close

Pluggable database altered.

SQL> alter pluggable database mypdb unplug into '/u01/mypdbfile.xml';
2018-01-31T15:11:04.127823+03:30
alter pluggable database mypdb unplug into '/u01/mypdbfile.xml'
MYPDB(3):Autotune of undo retention is turned on.
2018-01-31T15:11:04.248476+03:30
MYPDB(3):Endian type of dictionary set to little
MYPDB(3):[40960] Successfully onlined Undo Tablespace 2.
MYPDB(3):Undo initialization finished serial:0 start:95543809 end:95543858 diff:49 ms (0.0 seconds)
MYPDB(3):Database Characterset for MYPDB is AL32UTF8
2018-01-31T15:11:06.044436+03:30
MYPDB(3):Opatch XML is skipped for PDB MYPDB (conid=3)
MYPDB(3): AUDSYS.AUD$UNIFIED (SQL_TEXT) - CLOB populated
MYPDB(3):JIT: pid 40960 requesting stop
MYPDB(3):Autotune of undo retention is turned on.
MYPDB(3):Endian type of dictionary set to little
MYPDB(3):Undo initialization finished serial:0 start:95546119 end:95546119 diff:0 ms (0.0 seconds)
MYPDB(3):Database Characterset for MYPDB is AL32UTF8
MYPDB(3):Opatch XML is skipped for PDB MYPDB (conid=3)
2018-01-31T15:11:07.053863+03:30
MYPDB(3): AUDSYS.AUD$UNIFIED (SQL_TEXT) - CLOB populated
MYPDB(3):JIT: pid 40960 requesting stop
Completed: alter pluggable database mypdb unplug into '/u01/mypdbfile.xml'

Pluggable database altered.

SQL> drop pluggable database mypdb;
2018-01-31T15:15:43.286392+03:30
drop pluggable database mypdb
Completed: drop pluggable database mypdb

Pluggable database dropped.

SQL> select con_id, name, open_mode, restricted from v$pdbs;

    CON_ID NAME                 OPEN_MODE  RES
---------- -------------------- ---------- ---
         2 PDB$SEED             READ ONLY  NO
         4 MAS12C               READ WRITE NO

 همانگونه که گفتیم فرض مسئله معیوب بودن یا از دست رفتن description xml file هست پس این کار را انجام میدهیم:

[oracle@oel7 ~]$ mv /u01/mypdbfile.xml /u01/mypdbfile.xml.old
[oracle@oel7 ~]$ ll /u01/
total 8
drwxrwxr-x. 4 oracle oinstall   38 Jan 13 11:58 app
-rw-r--r--. 1 oracle oinstall 6957 Jan 31 15:11 mypdbfile.xml.old

در بالا دیدیم که چگونه pdb را unplug کنیم. حالا میخواهیم description xml file را بازیابی کنیم و سپس pdb را به cdb  دیگر متصل (plug) نماییم. در ادامه بر روی cdb مقصد کار خواهیم کرد، پس وضعیت cdb مذکور را بررسی میکنیم:

[oracle@oel7 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Jan 31 16:04:15 2018

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select name, cdb from v$database;

NAME      CDB
--------- ---
MYCDB     YES

SQL> col name for a20;
SQL> select con_id, name, open_mode, restricted from v$pdbs;

    CON_ID NAME                 OPEN_MODE  RES
---------- -------------------- ---------- ---
         2 PDB$SEED             READ ONLY  NO
         3 NIMA                 READ WRITE NO

برای plug نمودن pdb که unplug  شده است، شما نیاز به description xml file  دارید. با یک dbms package با خواندن دوباره دیتا فایل ها میتوانید آن را بسازید. شکل package و argument  های آن به حالت زیر می باشد:

DBMS_PDB.RECOVER (
   pdb_descr_file    IN   VARCHAR2, 
   pdb_name          IN   VARCHAR2,
   filenames         IN   VARCHAR2);

pdb_descr_file:
Path of the XML file that contains description of a pluggable database

pdb_name:
Name of a pluggable database

filenames:
Comma-separated list of datafile paths and/or directories containing datafiles for the pluggable database

برای اطلاعات بیشتر در مورد dbms package  فوق به آدرس زیر مراجعه بفرمایید:

DBMS_PDB

حالا description xml file  را بازیابی میکنیم:

[oracle@oel7 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Jan 31 16:20:54 2018

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 
1 begin
2    dbms_pdb.recover(
3    pdb_descr_file => '/home/oracle/mypdb.xml',
4    pdb_name => 'mypdb',
5    filenames => '/u01/app/oracle/oradata/db12c/mypdb'
6  );
7 end;
8 /

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@oel7 ~]$ ls -l mypdb.xml
-rw-r--r--. 1 oracle oinstall 4184 Jan 31 16:20 mypdb.xml

همانگونه که مشاهده نمودید description xml file بازیابی شد. حالا وقت این هست که pdb را به cdb مقصد متصل (plug) نماییم. پیش از این، یک مرحله optional را پیش میبریم تا ببینیم pdb ما با cdb  جدید سازگار میباشد یا خیر. برای این کار از dbms_pdb.check_plug_compatibility استفاده میکنیم:

[oracle@oel7 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Jan 31 16:20:54 2018

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> set serverout on;
SQL>
1 DECLARE
2   theResult BOOLEAN;
3 BEGIN
4   l_result := DBMS_PDB.check_plug_compatibility(
5                 pdb_descr_file => '/home/oracle/mypdb.xml',
6                 pdb_name       => 'mypdb');
7 
8   IF theResult THEN
9     DBMS_OUTPUT.PUT_LINE('pdb is compatible');
10   ELSE
11     DBMS_OUTPUT.PUT_LINE('dpb is not incompatible');
12   END IF;
13 END;
14 /
pdb is compatible

PL/SQL procedure successfully completed.

در procedure  بالا مشخص شد که pdb ما با cdb مقصد سازگار میباشد. در مرحله آخر pdb  را به cdb متصل (plug) میکنیم.
SQL> create pluggable database mypdb using '/home/oracle/mypdb.xml'
  2  file_name_convert=('/u01/app/oracle/oradata/db12c/mypdb','/u01/app/oracle/oradata/mycdb/mypdb')
  3  tempfile reuse;

Pluggable database created.

SQL> alter pluggable database mypdb open;

Pluggable database altered.

SQL> col name for a20;
SQL> select con_id, name, open_mode, restricted from v$pdbs;

    CON_ID NAME                 OPEN_MODE  RES
---------- -------------------- ---------- ---
         2 PDB$SEED             READ ONLY  NO
         3 NIMA                 READ WRITE NO
         4 MYPDB                READ WRITE NO

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

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/mycdb/mypdb/undotbs01.dbf
/u01/app/oracle/oradata/mycdb/mypdb/system01.dbf
/u01/app/oracle/oradata/mycdb/mypdb/sysaux01.dbf
/u01/app/oracle/oradata/mycdb/mypdb/users01.dbf

در بالا مشاهده نمودید که pdb  به درستی به cdb مقصد متصل (plug) شد.

 

دوستان عزیز امیدوارم مطلب کاربردی بوده باشد.

شاد و پیروز باشید.