Arquitetura Lógica de um CDB
- CDB - Container Database, é nome que damos a toda estrutura do ambiente, ao conjunto de todos os containers, possui o container_id (con_id) igual 0, qual se refere a componentes compartilhados entre todo o ambiente.
- CDB$ROOT - Container único e obrigatório dentro de um CDB, possuí todos os componentes e objetos comuns a todos os PDBs, possui o identificado container_id (con_id) igual 1.
- PDB$SEED - Container único e obrigatório dentro de um CDB, é um container vázio utilizado como template para criação de novos PDBs, possui o identificado container_id (con_id) igual 2.
- PDBs - São container exclusivo para uso de aplicação e usuário, possuí con_id entre 3 e 252.
Arquitetura Fisica de um CDB
Apesar da mudança de arquitetura de um CDB, a oracle manteve-se fiel ao modelo tradicional, e em questão de arquitetura quase não houveram alterações no meio fisico.
- Estruturas Fisicas Compartilhadas
- Database Instance - Assim como um Oracle Non-CDB ou Pre-12c, possuimos uma SGA unica, as áreas de memória são compartilhadas entre todos os PDBs contidos no CDB.
- Background Processes - Possuí os mesmo BG Processes de um modelo Non-CDB, dentro de uma arquitetura Non-CDB nenhum novo processos de Background foi adicionado.
- Controlfiles - Um grupo de controlfiles multiplexados suportam todos a estrutura de CDB;
- Redo Logs Groups - A configuração de Online Redo Logs se dá a nivel do CDB inteiro, as transações de todos os PDBs e CDB$ROOT são todas gravadas no mesmo conjuto de redo e são identificadas através do ID do Container, archive logs não podem se manipulados a nivel de PDB;
- Temporary Files - Arquivos temporários criados no CDB$ROOT podem ser compartilhados entre os PDBs, porém também é possivel atribuir tablespaces temporaris dentro de PDBs;
- Undo Tablespace Datafiles - Na versão 12.1.0.x a tablespace de Undo é unica para todos os PDBs e faz parte do CDB$ROOT;
- CDB$ROOT System e Sysaux Tablespaces Datafiles - Essas tablespaces são compartilhadas entre os demais PDBs pois há apontamentos de dicionários comuns a todos os PDBs dentro do CDB$ROOT;
- Arquivo de Inicialização: O Arquivo de inicialização é unico para toda instancia CDB.
- Estruturas Fisicas Não Compartilhadas
- Local Tablespaces Datafiles - Dentro de cada PDBs há as tablespaces System, Sysaux e Temp, no contexto de PDBs essas tablespaces/Datafiles não possuem informações que compartilhadas nos demais PDBs, assim como os datafiles de tablespaces de usários, estas estão isoladas dentro do PDB local.
O Dicionário de Dados
Em um modelo Non-CDB existe apenas um dicionário de dados, portanto o armazenamento dos metadados interno do Oracle, são compartilhado com as informações de metadados de usuários e aplicações, assim como metadados de usuários distintos ficam armazenados no mesmo dicionário.
No modelo CDB cada container possuí sua tablespace System e Syaux, possibilitando assim que cada container possua seu próprio dicionário. As informações de dicionário são divididas e armazenadas os PDBs Locais e o CDB$ROOT para afim de evitar duplicidade de dados, portanto uma tabela com definições globais são armazenadas no CDB$ROOT container e acessadas pelos PDBs Locais através de apontamentos. Assim com os objetos comuns os objetos de sistema, como dbms_output são armazenados unicamente no CDB$ROOT e são acessados pelos PDBs Locais através de ponteiros.
Essas caracteristicas proporcionam a redução de consumo de armazenamento, pois os dados não são duplicados entre containers, e o fast patching e upgrade, caso o mesmo dicionário existisse em todos os PDBs o upgrade deveria ser feito em cada PDB isoladamente.
Desenho abaixo mostra uma tabela de sistema de um PDB com apontamentos para o Dicionário do CDB$ROOT:
Views do Sistema
No Multitenant há um novo tipo de View, CDB_*, a qual se trata de um Container Object, container objects, são objetos que possuem informações comuns a varios containers, assim como as views dinamicas GV$ / V$, também são Container Objects ou Shared Objects.
Shared Objects possuem uma nova coluna chamada de con_id, onde é possivel identificar o container a qual essa informação pertence, o resultado da saída de consultas em objetos comuns, depende da contexto ao qual esta conectado, se conectado ao CDB$ROOT a saída esperada é relacionada a todos os containers que o usuário tem permissão, se executada a partir de um PDB, a saída esperada é unicamente do PDB conectado.
As views DBA_* existem para compatibilidade de versão, porém para cada DBA_* existe uma respectiva view CDB_*.
Nenhum comentário:
Postar um comentário