CDB e PDB

L'architettura multi-tenant consente a un database Oracle di funzionare come container database (CDB) multi-tenant.

A partire da Oracle Database 21c, un container database multi-tenant è l'unica architettura supportata. Nelle release precedenti, Oracle supportava database non di tipo container (non CDB).

Informazioni sui contenitori in un CDB

Un contenitore è una raccolta di schemi, oggetti e strutture correlate in un contenitore CDB (Multitenant Container Database). All'interno di un CDB, ogni contenitore ha un ID e un nome univoci.

Un CDB include zero, uno o più pluggable database (PDB) e container di applicazioni creati dal cliente. Un PDB è una raccolta portatile di schemi, oggetti di schema e oggetti non di schema che viene visualizzata in un client Oracle Net come database separato. Un contenitore dell'applicazione è un componente CDB facoltativo creato dall'utente che memorizza dati e metadati per uno o più backend dell'applicazione. Un CDB include zero o più container di applicazioni.

Nota: "Contenitori delle applicazioni" spiega in dettaglio i contenitori delle applicazioni.

La figura seguente rappresenta i contenitori possibili in un CDB.

Figura 1: Contenitori in un CDB

Descrizione dell'illustrazione admin112.png

Ogni CDB dispone dei seguenti contenitori:

Esempio di CDB 2-1 senza container di applicazioni

Questo esempio mostra un CDB semplice con cinque contenitori: il contenitore di sistema (l'intero CDB), la radice CDB, il seed del PDB (PDB$SEED) e due PDB. Ogni PDB dispone di una propria applicazione dedicata. Un amministratore PDB diverso gestisce ogni PDB. Un utente comune esiste in un CDB con una singola identità. In questo esempio, l'utente comune SYS può gestire la root e ogni PDB. A livello fisico, questo CDB è gestito da una o più istanze di database e contiene un set di file di dati per ogni PDB e per il CDB stesso.

Figura 2: CDB senza container applicativi

Descrizione dell'illustrazione cncpt345.png

Esempio di CDB da 2 a 2 con un contenitore applicazioni

In questa variante, il CDB contiene un contenitore di applicazioni denominato saas_sales_ac. All'interno del contenitore dell'applicazione, il PDB dell'applicazione cust1_pdb supporta un'applicazione per un cliente e il PDB dell'applicazione cust2_pdb supporta un'applicazione per un cliente diverso. Il CDB contiene anche un PDB denominato hrpdb, che supporta un'applicazione HR, ma non appartiene a un contenitore dell'applicazione.

Figura 3: CDB con un contenitore di applicazioni

Descrizione dell'illustrazione cncpt383.png

In questo esempio, più DBA gestiscono l'ambiente CDB:

Contenitore root e di sistema CDB

La root CDB, detta anche semplicemente root, è una raccolta di schemi, oggetti schema e oggetti non schema a cui appartengono tutti i PDB.

Ogni CDB dispone di un solo contenitore radice denominato CDB$ROOT. La radice memorizza i metadati di sistema necessari per gestire i PDB. Tutti i PDB appartengono alla radice. Il contenitore di sistema è la radice CDB e tutti i PDB che appartengono a questa radice.

La radice del CDB non memorizza i dati utente. Oracle consiglia di non aggiungere oggetti comuni alla root o di modificare gli schemi forniti da Oracle nella root. È tuttavia possibile creare utenti e ruoli comuni per l'amministrazione del database. Un utente comune con i privilegi necessari può passare da un contenitore all'altro.

Oracle consiglia AL32UTF8 per il set di caratteri root. I PDB con set di caratteri diversi possono risiedere nello stesso CDB senza richiedere la conversione del set di caratteri.

Esempio 2-3 Tutti i container in un CDB

La query seguente, eseguita da un utente amministrativo connesso alla radice del CDB, elenca tutti i container nel CDB (inclusi seed e root CDB), ordinati da CON_ID.

COL NAME FORMAT A15
SELECT NAME, CON_ID, DBID, CON_UID, GUID
FROM   V$CONTAINERS ORDER BY CON_ID;

NAME          CON_ID       DBID    CON_UID GUID
------------- ------ ---------- ---------- --------------------------------
CDB$ROOT           1 1895287725          1 2003321EDD4F60D6E0534E40E40A41C5
PDB$SEED           2 2795386505 2795386505 200AC90679F07B55E05396C0E40A23FE
SAAS_SALES_AC      3 1239646423 1239646423 200B4CE0A8DC1D24E05396C0E40AF8EE
SALESPDB           4 3692549634 3692549634 200B4928319C1BCCE05396C0E40A2432
HRPDB              5 3784483090 3784483090 200B4928319D1BCCE05396C0E40A2432

Vedere anche: "Common User Accounts"

PDB

Un PDB è un set di schemi, oggetti e strutture correlate creato dall'utente che viene visualizzato logicamente in un'applicazione client come database separato.

Ogni PDB è di proprietà di SYS, indipendentemente dall'utente che ha creato il PDB. SYS è un utente comune nel CDB, ovvero l'utente che ha la stessa identità nella radice e in ogni PDB esistente e futuro nel CDB.

Tipi di PDB

Tutti i PDB vengono creati dall'utente con l'istruzione CREATE PLUGGABLE DATABASE ad eccezione di PDB$SEED, che è fornito da Oracle.

È possibile creare i seguenti tipi di PDB.

PDB standard

Questo tipo di PDB deriva dall'esecuzione di CREATE PLUGGABLE DATABASE senza specificare il PDB come seed, PDB proxy o root dell'applicazione. Le sue funzionalità dipendono dal contenitore in cui è stato creato:

Radice applicazioni

Prendere in considerazione una radice applicazione come contenitore radice specifico dell'applicazione. Serve come repository per una definizione master di un'applicazione backend, inclusi dati e metadati comuni. Per creare una radice applicazione, connettersi alla radice CDB e specificare la clausola AS APPLICATION CONTAINER in un'istruzione CREATE PLUGGABLE DATABASE. Vedere "Radice applicazione".

Popola PDB

A differenza di un PDB standard, un PDB iniziale non è destinato a supportare un'applicazione. Piuttosto, il seed è un modello per la creazione di PDB che supportano le applicazioni. Un seme può essere uno dei seguenti:

PDB proxy

Un proxy PDB è un PDB che utilizza un database link per fare riferimento a un PDB in un CDB remoto. Quando si emette un'istruzione in un PDB proxy mentre il PDB è aperto, l'istruzione viene eseguita nel PDB di riferimento.

È necessario creare un PDB proxy durante la connessione alla radice CDB o all'applicazione radice. È possibile modificare o eliminare un PDB proxy come è possibile per un PDB standard.

Scopo dei PDB

Per un'applicazione, un PDB è un database Oracle autonomo e completamente funzionale. Puoi consolidare i PDB in un singolo CDB per ottenere economie di scala, mantenendo al contempo l'isolamento tra i PDB.

È possibile utilizzare i PDB per raggiungere gli obiettivi specifici riportati di seguito.

Vedere anche:

PDB proxy

Un proxy PDB fa riferimento a un PDB remoto, denominato referenced PDB.

Sebbene si eseguano istruzioni SQL nel PDB proxy (che fa riferimento), le istruzioni vengono eseguite nel PDB di riferimento. A questo proposito, un PDB proxy è approssimativamente analogo a un file di collegamento simbolico in Linux.

I PDB proxy offrono i vantaggi riportati di seguito.

Per creare un PDB proxy, eseguire CREATE PLUGGABLE DATABASE con la clausola AS PROXY FROM, in cui FROM specifica il nome del PDB di riferimento e un database link. L'istruzione di creazione copia solo i file di dati appartenenti alle tablespace SYSTEM e SYSAUX.

Esempio 2-4 Creazione di un PDB proxy

Questo esempio si connette al contenitore saas_sales_ac in un CDB di produzione locale. L'utente comune sales_admin crea un PDB proxy denominato sales_sync_pdb. Questo PDB dell'applicazione fa riferimento a una radice dell'applicazione denominata saas_sales_test_ac in un CDB di sviluppo remoto a cui accede utilizzando il database link cdb_dev_rem. Quando un aggiornamento dell'applicazione si verifica in saas_sales_ac nel CDB di produzione, l'aggiornamento si propaga automaticamente alla radice dell'applicazione saas_sales_test_ac nel CDB di sviluppo remoto.

CONNECT sales_admin@saas_sales_ac
Password: ***********

CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;

Nomi per PDB

I contenitori in un CDB condividono lo stesso spazio di nomi, il che significa che devono avere nomi univoci all'interno di questo spazio di nomi.

I nomi dei seguenti contenitori non devono creare conflitti all'interno dello stesso CDB:

Ad esempio, se lo stesso CDB contiene i container di applicazioni saas_sales_ac e saas_sales_test_ac, due PDB di applicazione denominati entrambi cust1 non possono risiedere contemporaneamente in entrambi i container. Le regole dello spazio di nomi impediscono inoltre la creazione di un PDB denominato cust1pdb nella radice CDB e di un PDB denominato cust1pdb in una radice dell'applicazione.

I nomi dei PDB e dei contenitori radice dell'applicazione devono seguire le stesse regole dei nomi dei servizi di rete. Inoltre, poiché un PDB o una radice applicazione dispone di un servizio con il proprio nome, il nome del contenitore deve essere univoco in tutti i CDB i cui servizi sono esposti tramite un listener specifico. Il primo carattere di un nome contenitore creato dall'utente deve essere alfabetico, con i restanti caratteri alfanumerici o il carattere di sottolineatura (_). Poiché i nomi dei servizi non fanno distinzione tra maiuscole e minuscole, i nomi dei container non fanno distinzione tra maiuscole e minuscole anche se vengono specificati utilizzando identificativi delimitati.

Vedere anche: Oracle AI Database Net Services Reference per le regole relative ai nomi dei servizi

Collegamenti database tra PDB

Per impostazione predefinita, un utente connesso a un PDB deve utilizzare i database link per accedere agli oggetti in un PDB diverso.

Figura 4: Database link tra PDB

Descrizione dell'illustrazione cncpt384.png

Di seguito sono riportate alcune eccezioni alla regola.

Quando si crea un PDB proxy, è necessario specificare un nome di database link nella clausola FROM dell'istruzione CREATE PLUGGABLE DATABASE ... AS PROXY. Se il PDB proxy e il PDB di riferimento risiedono in CDB separati, il database link deve essere definito nella radice del CDB che conterrà il PDB proxy. Il database link deve connettersi al PDB di riferimento remoto o alla radice CDB del CDB remoto.

Vedere anche: "Oggetti comuni e locali"