terça-feira, 27 de agosto de 2013

Oracle database 12c – Iniciando e parando Pluggable Databases (PDB)

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$ROOT
Observe 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
Postagem mais recente Postagem mais antiga Página inicial

0 comentários:

Postar um comentário

Translate

# ACE Program

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

#ARTICULISTA

Marcadores

Postagens populares