unplug نمودن، بازیابی description xml file و plug نمودن pdb به cdb دیگر
- چگونه pdb را unplug کنیم ؟
- چگونه description xml file را بازیابی کنیم ؟
- چگونه pdb را با استفاده از description xml file به cdb دیگر plug کنیم ؟
[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 فوق به آدرس زیر مراجعه بفرمایید:
حالا 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.
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) شد.
دوستان عزیز امیدوارم مطلب کاربردی بوده باشد.
شاد و پیروز باشید.