In a multitenant container database (CDB), a container is a collection of schemas, objects, and related structures. A pluggable database (PDB) is a user-created container that stores the data and code for an application, such as a human resources application.
From the perspective of a user or application, the PDB appears to be a logically separate, independent database. From the operating system perspective, the CDB is the database.
Every CDB has the following containers:
- One root container, called CDB$ROOT, that stores Oracle-supplied metadata and common users (database users that are known in every container belonging to that CDB). The root does not store any user data. All PDBs belong to the root.
- One seed PDB, called PDB$SEED, which is a system-supplied template that the CDB can use to create new PDBs. You can't modify the seed PDB.
- Zero or more user-created PDBs. No PDBs exist when you first create a CDB. You can plug multiple PDBs into a CDB at one time, but you can't plug a PDB into multiple CDBs. Each PDB exists in complete isolation from the other PDBs that are plugged into the same CDB. Users interact only with the PDBs and not the seed PDB or root container.
- Zero or more application containers, which are optional collections of PDBs within a CDB that store data and metadata for applications. An application container, like the CDB, can include multiple application PDBs, and enables these PDBs to share metadata and data.
At a physical level, containers consist of physical data files. Each container has at least one data file. At a logical level, the database allocates data across data files with logical structures called tablespaces.
The CDB also uses several system files during its operation. The control file and redo online log files reside in the CDB and are shared across all PDBs and application containers. Other system files reside outside the CDB.
Note: Non-CDBs were desupported in Oracle Database 21c, which means that the Oracle Universal Installer and Database Configuration Assistant (DBCA) can no longer create non-CDB Oracle Database instances.