یکی از راههایی که برای مدیریت cdb ها و pdbها وجود داره، استفاده از dbca هست. تو این نوشته چند تا کار رو سعی می کنیم باهاش انجام بدیم.
برای اجرای دستور dbca احتیاج هست که ORACLE_HOME و PATH به درستی ست شده باشه. همچنین این ORACLE_HOME باید به HOME دیتبایس اشاره کنه وگرنه با خطای زیر مواجه میشیم:
من از دستور oraenv بصورت زیر برای تنظیم Env استفاده می کنم:
[oracle@test12cr2 ~]$ . oraenv ORACLE_SID = [+ASM] ? cdb2 ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/12.2.0/dbhome_1 The Oracle base remains unchanged with value /u01/app/oracle
[oracle@test12cr2 dbhome_1]$ . oraenv ORACLE_SID = [oracle] ? cdb2
The Oracle base has been changed from /home/oracle to /u01/app/oracle [oracle@test12cr2 dbhome_1]$ sqlplus / as sysdba SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDBTESTCDB2 READ WRITE NO 4 PDB3 READ WRITE NO SQL> alter session set container=pdb3; SQL> create user vahid identified by vahid ; SQL> grant dba to vahid; SQL> create table vahid.t1 (f1 number); SQL> insert into vahid.t1 values (1); SQL> commit;
حالا دوباره دستور dbca را انتخاب می کنیم و باز به قسمت manage pluggable database می رویم و اینبار گزینه unplug a pluggable database را انتخاب می کنیم.
آن cdb که pdb مدنظر ما در آن است را انتخاب می کنیم و در صفحه بعدی گزینه generate pluggable database file set را انتخاب کرده و آدرس می دهیم. در صورتی که گزینه اول را انتخاب کنیم، با خطا مواجه می شویم و دلیل آن نیز این داکیومنت است:
DBT-15011 During Unplug PDB by DBCA (Doc ID 2350135.1)
من از توضیحی که داد قانع نشدم و تنها گفت که باید با ابزاری مثل sqlplus اینکار را انجام دهیم.
خلاصه ای از کاری که می خواهد انجام بدهد را می گوید و در نهایت این pdb را unplug می کند.
SQL> select pdb_id , pdb_name from cdb_pdbs; PDB_ID ---------- PDB_NAME -------------------------------------------------------------------------------- 3 PDBTESTCDB2 2 PDB$SEED
حالا یک حرکت قشنگ می کنیم و این دیتابیس unplug شده را به cdb دیگر می زنیم. دوباره دستور dbca و انتخاب گزینه manage pluggable databases و گزینه create a pluggable database و اینبار دیتابیس cdb دیگر را انتخاب می کنیم.
گزینه create pluggable database from an unplugged pdb را انتخاب می کنیم و با دادن مسیر فایلی که در مراحل قبل ساختیم، کار را ادامه می دهیم.
حالا نام pdb و نام ادمین و پسوردش را وارد می کنیم.
این صفحه رو نمی دونم چرا گذاشت :)
سپس یه خلاصه به ما نشان می دهد و این pdb را به cdb جدید اضافه می کند.
حالا می توانیم از cdb جدید داده ای که قبلاً اضافه کرده بودیم را ببینیم.
[oracle@test12cr2 ~]$ . oraenv ORACLE_SID = [testcdb] ? The Oracle base remains unchanged with value /u01/app/oracle [oracle@test12cr2 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Sat Dec 7 06:43:50 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 TESTPDB MOUNTED 4 FROMCDB2PDB READ WRITE NO SQL> SQL> SQL> alter session set container=fromcdb2pdb; Session altered. SQL> select * from vahid.t1; F1 ---------- 1
- ۹۸/۰۹/۱۶