Na verão Oracle database 12c tivemos o surgimento da Arquitetura Multitenant onde permite que o banco de dados funcione como um container – CDB(Container Database) e que inclua zero ou muitos bancos de dados plugáveis – PDB(Pluggable Database).
Neste novo cenário de CDB e PDB, o startup/shutdown de um banco de dados plugável pode ser feito de algumas formas diferentes do que estamos acostumados. O objetivo deste artigo é justamente demonstrar algumas destas formas de parar, iniciar e verificar o estado desdes pluggable databases.
Abrindo uma conexão com o CDB (no meu caso criado como ORCL):
C:>sqlplus sys@ORCL as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Tue Ago 13 15:56:07 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Informe a senha: Conectado a: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> show con_name CON_NAME ------------------------------ CDB$ROOTObserve que quando executo o comando “show con_name” para visualizar o container que estou conectado ele apresenta CDB$ROOT.
O CDB$ROOT é o recipiente raiz do banco de dados, nele é armazenado todos os metadados e usuários comuns. Um usuário comum é um usuário do banco de dados conhecido em cada recipiente.
Conectado no meu container(CDB) vou verificar o status de todos os pluggable databases utilizando a visão V$PDBS.
SQL> set lines 190 SQL> col open_time for a30 SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------------------ PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 MOUNTED 13/08/2013 16:38:47 TESTE2 MOUNTED 13/08/2013 16:25:17
Na coluna NAME temos o nome de cada PDB.
Na coluna OPEN_MODE é exibido o estado do PDB. Quando um PDB esta fechado(closed) seu estado é MOUNTED. Um PDB pode ser aberto com as seguintes condições: READ WRITE, READ ONLY ou MIGRATE.
A coluna OPEN_TIME mostra o ultimo dia e horário em que o plugabble database estava aberto.
NOTA: O pluggable database PDB$SEED é um template que o CDB utiliza para criar novos PDBs. Nele não podemos adicionar ou modificar nenhum objeto.
Mudando o estado dos PDB através do comando ALTER PLUGGABLE DATABASE:
--Abrindo em read write SQL> alter pluggable database teste1 open; Banco de dados plugável alterado. --Abrindo em read only SQL> alter pluggable database teste2 open read only; Banco de dados plugável alterado. Verificando novamente o estado dos PDBs. Observe que a coluna OPEN_TIME também foi alterada! SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------------------ PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 READ WRITE 13/08/2013 16:44:48 TESTE2 READ ONLY 13/08/2013 16:45:04 --Fechando um pdb SQL> alter pluggable database teste1 close immediate; Banco de dados plugável alterado. SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------------------ PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 MOUNTED 13/08/2013 16:46:18 TESTE2 READ ONLY 13/08/2013 16:45:04
A palavra IMMEDIATE especificada depois do CLOSE significa que a base será fechada imediatamente, semelhante ao comando shutdown immediate. Caso o immediate seja omitido do comando o banco de dados é fechado de forma normal(shutdown).
Outro método para iniciar e parar um PDB é conectando no mesmo e emitindo os comandos startup e shutdown já conhecidos.
--conectando na teste2 SQL> alter session set container=teste2; Sessão alterada. SQL> show con_name CON_NAME ------------------------------ TESTE2 SQL> shutdown immediate; Banco de Dados plugável Fechado. --conectando na teste1 SQL> alter session set container=teste1; Sessão alterada. SQL> show con_name CON_NAME ------------------------------ TESTE1 SQL> startup Banco de Dados plugável aberto. --conectando no recipiente raiz SQL> alter session set container=cdb$root; Sessão alterada. SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------- PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 READ WRITE 13/08/2013 16:51:11 TESTE2 MOUNTED 13/08/2013 16:48:37
Imagine agora que você tem 100 PDBs. Certamente seria muito trabalhoso executar 100x o mesmo comando ALTER PDB ou conectar em todos os PDBs para poder iniciar e parar cada um deles. Então, como fazemos?
Uma das soluções é especificar o nome dos PDBs desejados no mesmo comando:
SQL> alter pluggable database teste1, teste2 open; Banco de dados plugável alterado.
Mas ainda seria trabalhoso.. Então para facilitar ainda mais temos as mágicas palavras:
ALL: Para alterar o estado de “todos” os PDBs (O PDB$SEED não é afetado!);
ALL EXCEPT: Para alterar o estado dos PDBs exeto do PDB especificado.
SQL> alter pluggable database all close immediate; Banco de dados plugável alterado. SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------- PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 MOUNTED 13/08/2013 16:53:31 TESTE2 MOUNTED 13/08/2013 16:48:37 SQL> alter pluggable database all open; Banco de dados plugável alterado. SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------- PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 READ WRITE 13/08/2013 16:54:18 TESTE2 READ WRITE 13/08/2013 16:54:18 SQL> alter pluggable database all except teste1 close immediate; Banco de dados plugável alterado. SQL> select name, 2 open_mode, 3 to_char(open_time,'dd/mm/yyyy hh24:mi:ss') open_time 4 from v$pdbs 5 / NAME OPEN_MODE OPEN_TIME ------------------------------ ---------- ------------------- PDB$SEED READ ONLY 13/08/2013 15:58:34 TESTE1 READ WRITE 13/08/2013 16:54:18 TESTE2 MOUNTED 13/08/2013 16:56:20
Para finalizar, ainda podemos iniciar/parar um PDB das seguintes formas:
SQL> startup pluggable database teste2; Banco de Dados plugável aberto. SQL> exit Desconectado de Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options C:>sqlplus sys@TESTE2 as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Tue Ago 13 17:00:09 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Informe a senha: Conectado a: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> shutdown immediate; Banco de Dados plugável Fechado.Referências:
http://docs.oracle.com/cd/E16655_01/server.121/e17633/cdbovrvw.htm http://docs.oracle.com/cd/E16655_01/server.121/e17615/refrn30652.htm http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_2007.htm
0 comentários:
Postar um comentário