8i | 9i | 10g | 11g | 12c | 13c | 18c | Misc | PL/SQL | SQL | RAC | WebLogic | Linux

Home » Articles » 12c » Here

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.


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).

Multitenant Overview

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 DBA_% and ALL_% views within the PDB appears the same as any non-CDB database.

Oracle Managed Files (OMF) and Multitentant

Oracle recommend the use of Oracle Managed Files (OMF) when using the multitenant architecture, as it simplifies a number of pieces of functionality. It seems the use of OMF is mandatory for some functionality, like the Application Containers functionality in Oracle 12.2.

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.

Multitenant Create From Seed

Instead of creating a new PDB from the seed, you can clone an existing PDB.

Multitenant Clone

It is also possible to create clones in a remote CDB.

Multitenant Remote Clone

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.

Multitenant Unplug Plug

Not only does this allow databases to be moved easily, but it also provides an alternative way to patch and upgrade to future versions. An example of using unplug/plugin to perform a patch can be found here. A general discussion of the unplug/plugin mechanism is described 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.

Relocate a Pluggable Database (PDB)

From Oracle 12.2 onward it is possible to relocate a PDB, moving it from one CDB to another. This is significantly simpler than doing a conventional umplug/plugin.

Multitenant Relocate

You can read about the relocating PDBs here.

Refresh a Pluggable Database (PDB)

From Oracle 12.2 onward it is possible to refresh a cloned PDB from the source PDB, provided it has only ever been opened in read-only mode.

Multitenant Refresh

You can read about refreshing PDBs here.

Proxy Pluggable Database (PDB)

From Oracle 12.2 onward it is possible to create proxy PDB, which is a skeleton PDB that sends SQL across to a remote PDB to be processed. This allows you to have a local endpoint for a remote database.

Multitenant Proxy

You can read about proxy PDBs here.

Application Containers

Oracle 12.2 introduces the concept of application containers, which act like a mini-root container. They can be used to centralise shared configuration and applications, which are used by their dependent application PDBs.

Multitenant Application Container

You can read about application containers 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 all containers * (root and all PDBs).
--DBA_ : All objects in the current container (root or PDB).
  --ALL_ : Objects accessible by the current user in the current container (root or PDB), including those owned by the current user.
    --USER_ : Objects owned by the current user in the current container (root or PDB).

The views are described in the Reference Manual.

* The output of the CDB_ views is dependent on the container they are accessed from. When accessed from the root container, they do indeed present all the information from all the containers. When accessed from a PDB, they effectively act like the DBA_ views from within the container. This can be a little confusing at first.

Multitenant Articles

The following articles provide more detailed explanations of some of the concepts described in this article. Onward Onward Onward

Multitenant Option: CDBs and PDBs - YouTube Playlist

Non-CDB Architecture Deprecated

With the release of Oracle Database (, 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:

Hope this helps. Regards Tim...

Back to the Top.