As most of us know, Oracle Database 19c now supports up to 3 pluggable databases (PDBs) per container database (CDB) without requiring additional multitenant license—applicable for both Standard Edition (SE2) and Enterprise Edition (EE). This documentation clearly states: “For all offerings, if you are not licensed for Oracle Multitenant, then you may have up to 3 user-created PDBs in a given container database at any time.” Meaning it’s about user-created PDBS.

But is a Proxy PDB (in fact a kind of symbolic link in Linux terms) considered user-created, or are you allowed to have 4 PDBs in theory? Once, I attended a presentation of Carajandb (Johannes Ahrends) in Germany, who stated that a Proxy PDB is free to use, based on the 18c documentation.


A part of his slide:




This isn’t clearly stated in the licensing documentation of 19c, so I wanted more proof.

Let’s start with the beginning: what is a Proxy PDB, why should you want it, and how do you install it? Oracle-base has a nice blogpost regarding this. In my own words: A Proxy DB is just a serving hatch. You think you’re talking to one database, but all your commands and data are actually transported to another PDB. This can be useful when you migrate the PDB (to the cloud), or when you don’t want or can’t change anything on the clients.



By the way: When you feel more comfortable with a lazier explanation, you can watch this YouTube-video of Tim Hall about Proxy PDBs.

Below, you’ll find some tests I did to familiarize myself.

I created two regular ‘user-created’ PDBs:

SQL> show pdbs

———- —————————— ———- ———-
2 PDB$SEED                       READ ONLY  NO
3 PDB1                           READ WRITE NO
5 PDB2                           READ WRITE NO

The Seed PDB doesn’t count, so there are two PDBS.

I’m setting the parameter MAX_PDBS to 2.


This parameter is counting user-created PDB’s, according to the documentation.

Only user-created PDBs are counted. PDB$SEED, application seed, and application root clones are ignored.

I played around and tested if it is fool proof, trying to set the parameter below the number of PDBs:

SQL> alter system set max_pdbs=1;
alter system set max_pdbs=1
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-65334: invalid number of PDBs specified

Yep. Works as designed.

So the creation of an extra user-created PDB shouldn’t work either:

SQL> create pluggable database pdb3 admin user pdbadmin identified by testjob;
create pluggable database pdb3 admin user pdbadmin identified by testjob
ERROR at line 1:
ORA-65010: maximum number of pluggable databases created

When a Proxy PDB isn’t considered a ‘user-created’ PDB – as the PDB$SEED – then I will be able to create this. It will be the ultimate proof that we are allowed to use the Proxy DB within the 3 free PDBs. After some preparation (referenced PDB in local undo mode, archivelog mode, referenced PDB in open read/write mode):

SQL> create pluggable database pdb6 as proxy from pdb1@link_to_pdb1_in_cdb2;
create pluggable database pdb6 as proxy from pdb1@link_to_pdb1_in_cdb2
ERROR at line 1:
ORA-65010: maximum number of pluggable databases created

Same as a user-created PDB: Until now, it looks like a Proxy PDB is part of the MAX_PDBS parameter and is considered a user-created PDB.

Is there an LMS-source I can use? The script they used before 19c (ReviewLite17.2.sql):

PROMPT *** MULTITENANT (introduced in 12c_r1)
PROMPT ======================================================================

PROMPT * Looking for pluggable databases (PDB)
col OPEN_TIME format a20 wrap

decode(a.CON_ID, 0, ‘entire CDB or non-CDB’, 1, ‘ROOT’, 2, ‘SEED’, ‘PDB’) as CONTAINER
order by a.CON_ID;

PROMPT If more than one PDB container is returned, then Multitenant Option is in use

In this script, there’s no distinction between Proxy PDB and regular ones. Unfortunately, I haven’t got the script LMS is using for the 19c version yet.

As a last resort (reluctant to do this), I finally asked LMS.

My question:

Is a Proxy DB and Application-Root Container considered a ‘user-created’ PDB in 19c and onward? With other words, are you allowed for example to have 3 ‘normal’ databases and 1 Proxy DB without having to buy a Multitenancy license?


Root container  (CDB$ROOT) and Proxy DB are not counted.

Root container is used only by the Oracle DB to administrates the PDBs.

The proxy DB is just a link to a physical PDB.


So the answer is YES.

The customer can use 1 CDB 1 Proxy and 3 PDBs without the need to buy Multitenant.

Quite clear about the Proxy PDB: It is NOT a user-created PDB!

The Application-Root container is likely to be the same as the definition of MAX_PDBs: application seed and application root clones.

At last, I got an answer for this tiny little question that bothered me sometimes.




19c licensing doc:

Carajandb presentation:

Preparations for a Proxy PDB:

Oracle-base blog-post:

Oracle-base blog-post:

Oracle-base YouTube:

MAX-PDBS parameter in 19c:

18c licensing doc: