Com a
introdução da arquitetura multitenant
na versão 12c do Oracle Database, passamos a ter múltiplos pluggable databases
(PDBs) abaixo de um único container database (CDB). Anterior a versão 12.1.0.2,
sempre que um container database era iniciado todos os pluggable databases
associados permaneciam por padrão no estado MOUNT (com exceção do pluggable
database SEED que fica em READ-ONLY).
Um mecanismo
muito utilizado até então para se iniciar os pluggable databases eram triggers
de startup. Quando o container era iniciado a trigger era disparada e todos os
pluggable databases configurados abaixo da trigger eram automaticamente
alterados para READ WRITE ou READ ONLY.
create or replace trigger startup_pdbs after startup on database begin execute immediate 'alter pluggable database DBHMG1 open'; end; /
Em um
container database (CDB) com vários pluggable databases (PDBs) associados a
solução começava a se tornar mais complexa, pois cada PDB poderia ter seu OPEN
MODE diferente dos demais (MOUNTED, READ WRITE, READ ONLY). A cada necessidade
de se disponibilizar um PDB em outro modo se tornava necessário também alterar
a trigger manualmente ajustando o novo estado do PDB.
Iniciando na
versão 12.1.0.2, a Oracle disponibilizou a feature pdb_save_or_discard_state junto ao comando ALTER PLUGGABLE DATABASE onde permite que o estado (state) de um
PDB seja salvo ou descartado, agora sempre que o CDB é iniciado os pluggable
databases (PDBs) voltam ao seu estado em que foram salvos (READ WRITE/READ
ONLY).
Se um PDB não
possui estado salvo ou ele foi descartado, então por default o estado dele será
MOUNT quando o CDB for novamente iniciado.
SAVE: Salva o atual estado de OPEN MODE do(s) PDB(s) de modo que
seja mantido após o restart do CDB;
DISCARD: Descarta o estado salvo do(s) PDB(s) resultando no retorno
ao padrão MOUNTED;
INSTANCES_CLAUSE: Adicionado ao comando, permite salvar/descartar o
estado de uma instance específica ou para todas as instances (RAC) - instances
= ('cdb1','cdb2'). Se omitido, modifica o estado do PDB apenas para a instance
corrente;
ALL: Salva/descarta o estado para todos pluggable database;
ALL EXCEPT: Salva/descarta o estado para todos pluggable databases
exceto pelos listados na cláusula EXCEPT;
Demonstrações de uso:
-- Verificando o estado corrente dos pluggable databases
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 DBHMG1 READ WRITE NO 4 DBHMG2 READ ONLY NO 5 DBHMG3 READ WRITE YES
SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states; no rows selectedNeste momento nenhum PDB possuía seu estado salvo, ou seja, se o container database (CDB) for reiniciado, todos os pluggable databases irão ficar em estado MOUNT.
-- Salvando o estado de apenas um pluggable database
SQL> alter pluggable database DBHMG1 save state; Pluggable database altered.
-- Salvando o estado de todos os pluggable databases exceto
o DBHMG3
SQL> alter pluggable database ALL EXCEPT DBHMG3 save state; Pluggable database altered.
-- Salvando o estado de todos os pluggable databases
SQL> alter pluggable database ALL save state; Pluggable database altered.
-- Verificando o estado salvo dos pluggable databases
SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states; CON_NAME INSTANCE_NAME STATE RES ------------------------------ --------------- -------------- --- DBHMG3 cdb OPEN YES DBHMG1 cdb OPEN NO DBHMG2 cdb OPEN READ ONLY NO
O retorno da
DBA_PDB_SAVED_STATES representa o estado salvo de cada PDB, se um outro PDB
existir e o mesmo não for listado significa que ele não possui nenhum estado
salvo até o momento, desta forma, um restart do container resultaria no retorno
dele ao estado default, MOUNT.
-- Forçando um restat do container
SQL> startup force ORACLE instance started. Total System Global Area 629145600 bytes Fixed Size 2927528 bytes Variable Size 281019480 bytes Database Buffers 339738624 bytes Redo Buffers 5459968 bytes Database mounted. Database opened.
-- Verificando o estado corrente dos pluggable databases
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 DBHMG1 READ WRITE NO 4 DBHMG2 READ ONLY NO 5 DBHMG3 READ WRITE YES
Com o restart do CBD, todos os
pluggable databases voltaram ao seu estado salvo.
Sempre que o
estado de um PDB for alterado e este precise ser persistido após um restart do
container, execute um novo SAVE STATE, sem o SAVE STATE ele voltara ao antigo
estado salvo.
SQL> alter pluggable database DBHMG3 discard state; Pluggable database altered.
-- Verificando o estado salvo dos pluggable databases
SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states; CON_NAME INSTANCE_NAME STATE RES ------------------------------ --------------- -------------- --- DBHMG1 cdb OPEN NO DBHMG2 cdb OPEN READ ONLY NO
-- Forçando um restat do container
SQL> startup force ORACLE instance started. Total System Global Area 629145600 bytes Fixed Size 2927528 bytes Variable Size 281019480 bytes Database Buffers 339738624 bytes Redo Buffers 5459968 bytes Database mounted. Database opened.
-- Verificando o estado corrente dos pluggable databases
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 DBHMG1 READ WRITE NO 4 DBHMG2 READ ONLY NO 5 DBHMG3 MOUNTED
A mudança
proporcionada através da feature pdb_save_or_discard_state,
embora pequena, representa uma melhoria significativa no mecanismo de
gerenciamento dos pluggable databases (PDBs) principalmente aos DBAs que possuem
muitos pluggable databases para gerenciar abaixo de um único container database
(CDB).
Referências:
https://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT514
https://docs.oracle.com/database/121/SQLRF/statements_2008.htm#CCHGJJHH
0 comentários:
Postar um comentário