Multitenant : Overview of Container Databases (CDB) and Pluggable Databases (PDB)
Oracle 12c Release 1 (12.1) introduced the Multitenant option. This article provides a basic overview of the multitenant option, with links to more detailed articles on the functionality.
- Creating Pluggable Databases (PDBs)
- Unpluging and Plugging in Pluggable Databases (PDBs)
- Multitenant Articles
- Non-CDB Architecture Deprecated
The multitenant option represents one of the biggest architectural changes in the history of the Oracle database. The option introduced the concepts of the Container Database (CDB) and Pluggable Database (PDB).
- Container Database (CDB) : On the surface this seems very similar to a conventional Oracle database, as it contains most of the working parts you will be already familiar with (controlfiles, datafiles, undo, tempfiles, redo logs etc.). It also houses the data dictionary for those objects that are owned by the root container and those that are visible to all PDBs.
- Pluggable Database (PDB) : Since the CDB contains most of the working parts for the database, the PDB only needs to contain information specific to itself. It does not need to worry about controlfiles, redo logs and undo etc. Instead it is just made up of datafiles and tempfiles to handle it's own objects. This includes it's own data dictionary, containing information about only those objects that are specific to the PDB.
This split of the data dictionary between common objects, in the root container, and PDB-specific objects, in the PDB's data dictionary, is very important, because this separation is what gives the multitenant option its flexibility. From the perspective of the PDB, the data dictionary is the union of the root and PDB data dictionaries, so internally the PDB feels very much like a normal Oracle database. For example, the
ALL_% views within the PDB appears the same as any non-CDB database.
Creating Pluggable Databases (PDBs)
Since the bulk of the working parts are already present in the root container, creating a new PDB is a comparatively quick and simple task. When creating a completely new PDP, the PDB is created as a copy of a seed PDB, so it only takes as long as the files take to copy.
Instead of creating a new PDB from the seed, you can clone an existing PDB.
It is also possible to create clones in a remote CDB.
A more detailed description of creating and cloning PDBs can be found here.
Unpluging and Plugging in Pluggable Databases (PDBs)
One of the most powerful features of the multitenant option is the ability to unplug a PDB from a CDB and plug it back into another CDB.
Not only does this allow databases to be moved easily, but it also paves the way for quick patching and upgrading to future versions. A PDB can be unplugged from a 12.1 CBD and plugged into a 12.2 CDB, effectively upgrading it in seconds. The unplug/plugin mechanism is described in more details here.
Conversion of a non-CDB database to a pluggable database involves getting a description the non-CDB database and using this to plug it into a CDB as a new PDB. This method is described here.
The introduction of the multitenant option brings with it an extra layer of data dictionary views, allowing reporting across the root container and the pluggable databases (PDBs). Ignoring editions for the moment, prior releases had the following hierarchy.
DBA_ : All objects in the database. | --ALL_ : Objects accessible by the current user, including those owned by the current user. | --USER_ : Objects owned by the current user.
With Oracle 12c, an extra layer is added to the hierarchy.
CDB_ : All objects in the root container and all PDBs. | --DBA_ : All objects in the root container or PDB, depending on the current settings. | --ALL_ : Objects accessible by the current user, including those owned by the current user. | --USER_ : Objects owned by the current user.
The views are described in the Reference Manual.
The following articles provide more detailed explanations of some of the concepts described in this article.
- Multitenant : Create and Configure a Container Database (CDB)
- Multitenant : Create and Configure a Pluggable Database (PDB)
- Multitenant : Migrate a Non-Container Database (CDB) to a Pluggable Database (PDB)
- Multitenant : Clone a Remote PDB or Non-CDB (126.96.36.199)
- Multitenant : Metadata Only PDB Clones (188.8.131.52)
- Multitenant : PDB Subset Cloning (184.108.40.206)
- Multitenant : Connecting to Container Databases (CDB) and Pluggable Databases (PDB)
- Multitenant : Startup and Shutdown Container Databases (CDB) and Pluggable Databases (PDB)
- Multitenant : Configure Instance Parameters and Modify Container Databases (CDB) and Pluggable Databases (PDB)
- Multitenant : Manage Tablespaces in a Container Database (CDB) and Pluggable Database (PDB)
- Multitenant : Manage Users and Privileges For Container Databases (CDB) and Pluggable Databases (PDB)
- Multitenant : Backup and Recovery of a Container Database (CDB) and a Pluggable Database (PDB)
- Multitenant : Flashback of a Container Database (CDB)
- Multitenant : Resource Manager with Container Databases (CDB) and Pluggable Databases (PDB)
- Multitenant : Running Scripts in Container Databases (CDBs) and Pluggable Databases (PDBs)
- Multitenant : PDB CONTAINERS Clause (220.127.116.11)
- Multitenant : PDB Logging Clause (18.104.22.168)
- Multitenant : Database Triggers on Pluggable Databases (PDBs)
- Multitenant : Remove APEX Installations from the CDB
Non-CDB Architecture Deprecated
With the release of Oracle Database (22.214.171.124), the non-CDB architecture has been deprecated. Some 12c features do not currently work with the multitenant architecture (see here), so depending on the features you require, you may still need the old pre-12c style instances.
Remember, using a single PDB does not require the Multitenant option, so lone-PDB setups can be used at no extra cost, allowing you to get familiar with the multitenant architecture.
For more information see:
- Introduction to the Multitenant Architecture
- Overview of the Multitenant Architecture
- Managing a Multitenant Environment
Hope this helps. Regards Tim...