In case you are desesperately looking for an upgrade from non-cdb to pdb with two clicks, here is the answer from Mike : you can’t
Nope – not via "upgrade". You can use Data Pump, Transportable Tablespaces or Full Transportable Export/Import as a direct option but you can't upgrade and plugin in one pass unfortunately 🙁
— Mike Dietrich (@MikeDietrichDE) August 22, 2018
If your database is huge and you don’t want to move anything nor change SID nor change path, this is my own receipt.
- Backup your database
- Create a XML description of your CDB
shutdown immediate startup read only exec dbms_pdb.describe('/save/DB01/DB01.xml') shutdown immediate
- Setup init.ora parameter for PDB
startup force nomount restrict alter system set enable_pluggable_database=true scope=spfile; alter system set db_name=CDBDB01 scope=spfile; alter system set instance_name=DB01 scope=spfile; startup force nomount
- Create a CDB database
Yes, you have read it correctly. You are required to create a database. There is -so far I’ve googled- no way to avoid this step. You can use dbca or sqlplus.
Don’t overwrite the datafile. Use for instance /data/DB01/cdb/system.dbf instead of /data/DB01/system.dbf
create database CDBDB01 user sys identified by *** user system identified by *** character set al32utf8 national character set al16utf16 logfile ('/onlinelog/DB01/redo01a.dbf','/onlinelog/DB01/redo01b.dbf') size 32M REUSE, ('/onlinelog/DB01/redo02a.dbf','/onlinelog/DB01/redo02b.dbf') size 32M REUSE extent management local datafile '/data/DB01/cdb/system01.dbf' size 10M autoextend on sysaux datafile '/data/DB01/cdb/sysaux01.dbf' size 10M autoextend on default tablespace admin datafile '/data/DB01/cdb/admin01.dbf' size 10m autoextend on extent management local autoallocate default temporary tablespace temp tempfile '/data/DB01/cdb/temp01.dbf' size 10M autoextend on undo tablespace undotbs1 datafile '/data/DB01/cdb/undotbs1_01.dbf' size 10M autoextend on set time_zone='Europe/Zurich' ENABLE PLUGGABLE DATABASE SEED FILE_NAME_CONVERT = ('/data/DB01/cdb/', '/data/DB01/seed/') LOCAL UNDO ON USER_DATA TABLESPACE users datafile '/data/DB01/cdb/users01.dbf' size 10m autoextend on; perl catcon.pl -u sys/*** -d oh/rdbms/admin -b catalog_DB01 -e -l log catalog.sql perl catcon.pl -u sys/*** -d oh/rdbms/admin -b catproc_DB01 -e -l log catproc.sql
It’s a pretty cumbersome step. Maybe you need Oracle Text or maybe you have DEC character set… all those details must be engineered by the DBA. This is pretty insane Oracle doesn’t offer a tool to migrate to a non-deprecated architecture.
- Plug-in the database
CREATE PLUGGABLE DATABASE DB01 USING '/save/DB01/DB01.xml' nocopy tempfile reuse;
If you miss this step, Ô râge, Ô désespoir, you probably must restart from the beginning.
- run noncdb_to_pdb
alter session set container=DB01; alter pluggable database DB01 open; alter session set container=DB01; @?/rdbms/admin/noncdb_to_pdb.sql
Once you are so far, you’ll have all advantages of Multi-Tenant. PDB-Clone. PDB-Flashback. Lockdown profiles. And you’ll be able to consolidate if you buy the multitenant option. You’ll save money on hardware (SGA/CPU) to spent on software (Multitenant option).
Most importantly, you’ll have moved to a non-deprecated architecture
Conclusion: there is more than one way to move to pluggable. But there is no way to migrate to pluggable without creating a new database