CDBs e PDBs

A arquitetura multilocatário permite a um banco de dados Oracle funcionar como um banco de dados contêiner multitenant (CDB).

A partir do Oracle Database 21c, um banco de dados contêiner multitenant é a única arquitetura suportada. Em versões anteriores, os bancos de dados não contêineres (não CDBs) suportados pela Oracle.

Sobre Contêineres em um CDB

Um contêiner é uma coleção de esquemas, objetos e estruturas relacionadas em um banco de dados contêiner (CDB) multitenant. Em um CDB, cada contêiner tem um ID e um nome exclusivos.

Um CDB inclui zero, um ou muitos bancos de dados plugáveis (PDBs) criados pelo cliente e contêineres de aplicativos. Um PDB é uma coleção portátil de esquemas, objetos de esquema e objetos não esquema que aparece para um cliente do Oracle Net como um banco de dados separado. Um contêiner de aplicativos é um componente CDB opcional criado pelo usuário que armazena dados e metadados para um ou mais back-ends de aplicativos. Um CDB inclui zero ou mais contêineres de aplicativos.

Observação: "Contêineres de Aplicativos" explica detalhadamente os contêineres de aplicativos.

A figura a seguir representa possíveis contêineres em um CDB.

Figura 1: Contêineres em um CDB

Descrição da ilustração admin112.png

Cada CDB tem os seguintes contêineres:

Exemplo 2-1 CDB sem Contêineres de Aplicativo

Este exemplo mostra um CDB simples com cinco contêineres: o contêiner do sistema (o CDB inteiro), a raiz do CDB, a implantação do PDB (PDB$SEED) e dois PDBs. Cada PDB tem seu próprio aplicativo dedicado. Um administrador de PDB diferente gerencia cada PDB. Existe um usuário comum em um CDB com uma única identidade. Neste exemplo, o usuário comum SYS pode gerenciar a raiz e cada PDB. No nível físico, esse CDB é gerenciado por uma ou mais instâncias de banco de dados e contém um conjunto de arquivos de dados para cada PDB e para o próprio CDB.

Figura 2: CDB sem contêineres de aplicativos

Descrição da ilustração cncpt345.png

Exemplo 2-2 CDB com um Contêiner de Aplicativos

Nesta variação, o CDB contém um contêiner de aplicativos chamado saas_sales_ac. No contêiner de aplicativos, o PDB do aplicativo cust1_pdb suporta um aplicativo para um cliente e o PDB do aplicativo cust2_pdb suporta um aplicativo para outro cliente. O CDB também contém um PDB chamado hrpdb, que suporta um aplicativo de RH, mas não pertence a um contêiner de aplicativos.

Figura 3: CDB com um Contêiner de Aplicativos

Descrição da ilustração cncpt383.png

Neste exemplo, vários DBAs gerenciam o ambiente CDB:

A raiz do CDB e o contêiner do sistema

A raiz do CDB, também chamada simplesmente de raiz, é um conjunto de esquemas, objetos de esquema e objetos de não esquema aos quais todos os PDBs pertencem.

Cada CDB tem um e somente um contêiner raiz chamado CDB$ROOT. A raiz armazena os metadados de sistema necessários para gerenciar PDBs. Todos os PDBs pertencem à raiz. O contêiner do sistema é a raiz do CDB e todos os PDBs que pertencem a essa raiz.

A raiz do CDB não armazena dados do usuário. A Oracle recomenda que você não adicione objetos comuns à raiz ou modifique os esquemas fornecidos pela Oracle na raiz. No entanto, você pode criar usuários e atribuições comuns para administração de banco de dados. Um usuário comum com os privilégios necessários pode alternar entre contêineres.

A Oracle recomenda AL32UTF8 para o conjunto de caracteres raiz. PDBs com conjuntos de caracteres diferentes podem residir no mesmo CDB sem exigir a conversão do conjunto de caracteres.

Exemplo 2-3 Todos os Contêineres em um CDB

A consulta a seguir, emitida por um usuário administrativo conectado à raiz do CDB, lista todos os contêineres no CDB (incluindo o seed e a raiz do CDB), ordenados por 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

Consulte Também: "Contas de Usuário Comuns"

PDBs

Um PDB é um conjunto de esquemas, objetos e estruturas relacionadas criados pelo usuário que aparece logicamente em um aplicativo cliente como um banco de dados separado.

Cada PDB pertence a SYS, independentemente de qual usuário criou o PDB. SYS é um usuário comum no CDB, o que significa que esse usuário que tem a mesma identidade na raiz e em cada PDB existente e futuro no CDB.

Tipos de PDBs

Todos os PDBs são criados pelo usuário com a instrução CREATE PLUGGABLE DATABASE, exceto PDB$SEED, que é fornecida pela Oracle.

Você pode criar os seguintes tipos de PDBs.

PDB Padrão

Esse tipo de PDB resulta da execução de CREATE PLUGGABLE DATABASE sem especificar o PDB como um PDB de teste, proxy ou raiz de aplicativo. Seus recursos dependem do contêiner no qual você o cria:

Raiz do Aplicativo

Considere uma raiz do aplicativo como um contêiner raiz específico do aplicativo. Ele serve como um repositório para uma definição principal de um back-end de aplicativo, incluindo dados e metadados comuns. Para criar uma raiz de aplicativo, conecte-se à raiz do CDB e especifique a cláusula AS APPLICATION CONTAINER em uma instrução CREATE PLUGGABLE DATABASE. Consulte "Application Root".

Pré-implantar PDBs

Ao contrário de um PDB padrão, um PDB pré-implantado não se destina a suportar um aplicativo. Em vez disso, o seed é um modelo para a criação de PDBs que suportam aplicativos. Uma semente pode ser uma das seguintes:

PDBs de proxy

Um PDB de proxy é um PDB que usa um link de banco de dados para fazer referência a um PDB em um CDB remoto. Quando você emite uma instrução em um PDB de proxy enquanto o PDB está aberto, a instrução é executada no PDB referenciado.

Crie um PDB proxy enquanto estiver conectado à raiz do CDB ou à raiz do aplicativo. Você pode alterar ou eliminar um PDB proxy da mesma forma que pode um PDB padrão.

Finalidade dos PDBs

Para um aplicativo, um PDB é um banco de dados Oracle independente e totalmente funcional. Você pode consolidar PDBs em um único CDB para obter economias de escala, mantendo o isolamento entre PDBs.

Você pode usar PDBs para atingir as seguintes metas específicas:

Consulte Também:

PDBs de proxy

Um PDB proxy se refere a um PDB remoto, chamado de PDB referenciado.

Embora você emita instruções SQL no PDB de proxy (referência), as instruções são executadas no PDB referenciado. Nesse aspecto, um PDB proxy é vagamente análogo a um arquivo de link simbólico no Linux.

Os PDBs de proxy fornecem os seguintes benefícios:

Para criar um PDB de proxy, execute CREATE PLUGGABLE DATABASE com a cláusula AS PROXY FROM, em que FROM especifica o nome do PDB referenciado e um link de banco de dados. A instrução de criação copia somente os arquivos de dados pertencentes aos tablespaces SYSTEM e SYSAUX.

Exemplo 2-4 Criando um PDB Proxy

Este exemplo se conecta ao contêiner saas_sales_ac em um CDB de produção local. O usuário comum sales_admin cria um PDB de proxy chamado sales_sync_pdb. Esse PDB de aplicativo faz referência a uma raiz de aplicativo chamada saas_sales_test_ac em um CDB de desenvolvimento remoto, que ele acessa usando o link de banco de dados cdb_dev_rem. Quando ocorre um upgrade de aplicativo em saas_sales_ac no CDB de produção, o upgrade se propaga automaticamente para a raiz de aplicativo saas_sales_test_ac no CDB de desenvolvimento remoto.

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

CREATE PLUGGABLE DATABASE sales_sync_pdb AS PROXY FROM saas_sales_test_ac@cdb_dev_rem;

Nomes para PDBs

Os contêineres em um CDB compartilham o mesmo namespace, o que significa que eles devem ter nomes exclusivos nesse namespace.

Os nomes dos seguintes contêineres não devem entrar em conflito no mesmo CDB:

Por exemplo, se o mesmo CDB contiver os contêineres de aplicativos saas_sales_ac e saas_sales_test_ac, dois PDBs de aplicativos com o nome cust1 não poderão residir simultaneamente em ambos os contêineres. As regras de namespace também impedem a criação de um PDB chamado cust1pdb na raiz do CDB e um PDB chamado cust1pdb em uma raiz de aplicativo.

Os nomes de PDBs e contêineres raiz de aplicativos devem seguir as mesmas regras dos nomes de serviço de rede. Além disso, como um PDB ou uma raiz de aplicativo tem um serviço com seu próprio nome, o nome do contêiner deve ser exclusivo em todos os CDBs cujos serviços são expostos por meio de um listener específico. O primeiro caractere de um nome de contêiner criado pelo usuário deve ser alfabético, com os caracteres restantes alfanuméricos ou sublinhado (_). Como os nomes de serviço não fazem distinção entre maiúsculas e minúsculas, os nomes de contêiner não fazem distinção entre maiúsculas e minúsculas e estão em letras maiúsculas, mesmo que sejam especificados usando identificadores delimitados.

Consulte Também: Referência de Serviços do Oracle AI Database Net para obter as regras de nomes de serviço

Links de Banco de Dados entre PDBs

Por padrão, um usuário conectado a um PDB deve usar links de banco de dados para acessar objetos em outro PDB.

Figura 4: Link de Banco de Dados entre PDBs

Descrição da ilustração cncpt384.png

As exceções à regra incluem:

Ao criar um PDB de proxy, especifique um nome de link de banco de dados na cláusula FROM da instrução CREATE PLUGGABLE DATABASE ... AS PROXY. Se o PDB do proxy e o PDB referenciado residirem em CDBs separados, o link do banco de dados deverá ser definido na raiz do CDB que conterá o PDB do proxy. O link de banco de dados deve se conectar ao PDB referenciado remoto ou à raiz do CDB do CDB remoto.

Consulte Também: "Objetos Comuns e Locais"