Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


quarta-feira, 2 de abril de 2014

Oracle Multitenant: Abordando a realização de backups com o RMAN nos Pluggable Databases (PDB) e Container Databases (CDB) no Oracle 12c

Por Eduardo Legatti

Olá,




Nos artigos de Fevereiro/2014 e Março/2014 abordei sobre a arquitetura Multitenant do Oracle 12c de forma prática afim de demonstrar alguns conceitos e propriedades por trás dos bancos de dados de containers (CDBs) e dos bancos de dados plugáveis (PDBs). Neste artigo irei abordar a realização de backups dos bancos de dados CDBs e PDBs através do utilitário RMAN (Recovery Manager). Vale a pena salientar que irei focar apenas na realização dos backups, sem qualquer ação de recovery. A seguir, irei conectar no banco de dados de container CDB01 e realizar o backup do mesmo utilizando o RMAN. Pode-se notar abaixo que no RMAN da versão 12c é possível executar instruções SQL da mesma forma que no SQL*Plus.


C:\>set ORACLE_SID=CDB01

C:\>rman target /

Gerenciador de Recuperação: Release 12.1.0.1.0 - Production on Qua Abr 2 11:34:47 2014

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

conectado ao banco de dados de destino: CDB01 (DBID=1370556575)

RMAN> select con_id,dbid,name,open_mode from v$pdbs;

    CON_ID       DBID NAME              OPEN_MODE
---------- ---------- ----------------- ----------
         2 4076210644 PDB$SEED          READ ONLY
         3 3898013363 PDB01             READ WRITE
         4 3947824578 PDB02             READ WRITE
         5 4001514065 PDB03             READ WRITE

No resultado do SQL acima, pode-se notar a existência de 4 bancos de dados plugáveis (PDBs). Por padrão, o banco de dados PDB$SEED usado como template para criação de novos bancos de dados PDBs se mantém no estado somente leitura (READ ONLY). Abaixo irei realizar o backup do banco de dados CDB01. Como pré requisito para realização de Hot Backup, o banco de dados CDB01 foi alterado para operar no modo ARCHIVELOG.


Backup do Container Database (CDB) 

RMAN> backup database plus archivelog;

Iniciando backup em 02/04/14
log atual arquivado
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=23 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=11 RECID=1 STAMP=842882988
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00001 nome=D:\ORACLE\APP\ORADATA\CDB01\SYSTEM01.DBF
número do arquivo=00005 nome=D:\ORACLE\APP\ORADATA\CDB01\UNDOTBS01.DBF
número do arquivo=00003 nome=D:\ORACLE\APP\ORADATA\CDB01\SYSAUX01.DBF
número do arquivo=00006 nome=D:\ORACLE\APP\ORADATA\CDB01\USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:02:26
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00004 nome=D:\ORACLE\APP\ORADATA\CDB01\PDBSEED\SYSAUX01.DBF
número do arquivo=00002 nome=D:\ORACLE\APP\ORADATA\CDB01\PDBSEED\SYSTEM01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\02C6D349454A4F42BE1E114F23...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:05
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00013 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSAUX01.DBF
número do arquivo=00012 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSTEM01.DBF
número do arquivo=00014 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\PDB01_USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\A1D71A8D231B4153A6189ECF7C...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:15
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00018 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB02\SYSAUX01.DBF
número do arquivo=00017 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB02\SYSTEM01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BBF9D856E6144A5586175255D5...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:05
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00023 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB03\SYSAUX01.DBF
número do arquivo=00022 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB03\SYSTEM01.DBF
número do arquivo=00024 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB03\PDB01_USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\8C150C75FFDE4362A4CDF6C7B2...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:55
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
log atual arquivado
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=12 RECID=2 STAMP=842883401
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando Control File and SPFILE Autobackup em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\AUTOBACKUP\2014_04_02\O1_M...
Finalizado Control File and SPFILE Autobackup em 02/04/14

No resultado apresentado acima, pode-se notar que ao realizar o backup de um banco de dados de container CDB, o mesmo acontece com todos os bancos de dados PDBs existentes.


Backup do Container ROOT (CDB$ROOT)

O backup do banco de dados de container ROOT é semelhante ao backup do banco de dados de CDB, com a diferença de que os bancos de dados PDB não são incluídos no backup. Segue abaixo a demonstração de realização do backup do container ROOT.

RMAN> backup database root plus archivelog;

Iniciando backup em 02/04/14
log atual arquivado
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=34 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=13 RECID=3 STAMP=842884398
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00001 nome=D:\ORACLE\APP\ORADATA\CDB01\SYSTEM01.DBF
número do arquivo=00005 nome=D:\ORACLE\APP\ORADATA\CDB01\UNDOTBS01.DBF
número do arquivo=00003 nome=D:\ORACLE\APP\ORADATA\CDB01\SYSAUX01.DBF
número do arquivo=00006 nome=D:\ORACLE\APP\ORADATA\CDB01\USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:02:15
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
log atual arquivado
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=14 RECID=4 STAMP=842884538
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando Control File and SPFILE Autobackup em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\AUTOBACKUP\2014_04_02\O1_M...
Finalizado Control File and SPFILE Autobackup em 02/04/14 

Backup dos Pluggable Databases (PDB)



É possível realizar o backup de um ou mais bancos de dados plugáveis de uma só uma vez. Segue abaixo o exemplo de realização de backup dos bancos de dados PDB01 e PDB02.

RMAN> backup pluggable database pdb01, pdb02 plus archivelog;

Iniciando backup em 02/04/14
log atual arquivado
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=30 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=13 RECID=3 STAMP=842884398
thread do log arquivado de entrada=1 sequência=14 RECID=4 STAMP=842884538
thread do log arquivado de entrada=1 sequência=15 RECID=5 STAMP=842885189
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00013 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSAUX01.DBF
número do arquivo=00012 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSTEM01.DBF
número do arquivo=00014 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\PDB01_USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\02C6D349454A4F42BE1E114F23...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:05
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00018 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB02\SYSAUX01.DBF
número do arquivo=00017 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB02\SYSTEM01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BBF9D856E6144A5586175255D5...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:15
Finalizado backup em 02/04/14

Iniciando backup em 02/04/14
log atual arquivado
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando conjunto de backups de log arquivado
canal ORA_DISK_1: especificando log(s) arquivado no conjunto de backups
thread do log arquivado de entrada=1 sequência=16 RECID=6 STAMP=842885334
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\BACKUPSET\2014_04_02\O1_MF...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 02/04/14

Iniciando Control File and SPFILE Autobackup em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\AUTOBACKUP\2014_04_02\O1_M...
Finalizado Control File and SPFILE Autobackup em 02/04/14

Até agora demonstrei a realização de backups dos bancos de dados estando conectado no banco de dados de container ROOT. É possível realizar o backup de um banco de dados PDB conectando diretamente no mesmo pelo RMAN através de um serviço TNS. Como exemplo, segue abaixo o serviço TNS criado no TNSNAMES.ORA da minha máquina local.

PDB01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDB01)
    )
  )


A seguir, irei utilizar o serviço PDB01 acima para conectar no banco de dados PDB01. Após a realização da conexão será possível realizar o backup do mesmo como demonstrado abaixo.
 
C:\>rman target /@PDB01

Gerenciador de Recuperação: Release 12.1.0.1.0 - Production on Qua Abr 2 11:58:00 2014

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

conectado ao banco de dados de destino: CDB01 (DBID=1370556575)

RMAN> backup database;

Iniciando backup em 02/04/14
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=35 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando conjunto de backup completo de arquivo de dados
canal ORA_DISK_1: especificando arquivo(s) de dados no conjunto de backups
número do arquivo=00013 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSAUX01.DBF
número do arquivo=00012 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\SYSTEM01.DBF
número do arquivo=00014 nome=D:\ORACLE\APP\ORADATA\CDB01\PDB01\PDB01_USERS01.DBF
canal ORA_DISK_1: iniciando o componente 1 em 02/04/14
canal ORA_DISK_1: componente 1 finalizado em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\02C6D349454A4F42BE1E114F23...
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:01:15
Finalizado backup em 02/04/14

Iniciando Control File and SPFILE Autobackup em 02/04/14
handle de componente=D:\ORACLE\APP\FAST_RECOVERY_AREA\CDB01\AUTOBACKUP\2014_04_02\O1_M...
Finalizado Control File and SPFILE Autobackup em 02/04/14



3 comentários:

Rafael disse...

Olá, Eduardo, tudo bem?

Estou me aprofundando no Oracle Multitenant e me parece que é uma solução interessante para o meu caso.

Administro um banco de 86 TB, sem compressão e estamos tendo muitos problemas nas estratégias de backup e recovery.

Então, o que eu pensei.

Comprimir todo o banco de dados com o Advanced Compression na versão atual - 11.2.0.3 RAC dois nós em Linux Red Hat - (como é basicamente um banco que sofre insert via SQL*Loader e pesquisas, acredito que podemos nos beneficiar muito com isso). A minha expectativa, baseada nos testes que fiz, é que a compressão chegue a 60%, portanto, cerca de 36 TB, mas ainda muito grande para backup e recovery.

O próximo passo seria migrar para o 12c e iniciar a configuração do Oracle Multitenant e dividir esse banco de dados em 5 instâncias (para te posicionar, é um banco com dados de tecnologias de voz e dados, portanto, possível dividir nas diversas tecnologias). Supondo que a divisão seja igual, teríamos 5 instâncias com 7 TB cada, o que tornaria essas instâncias mais gerenciáveis.

Perguntas:
- Você acha que o Multitenant traria benefícios para o meu caso?
- Essa mudança seria transparente para a aplicação? Ou seja, sem grandes mudanças de código?
- Como funcionaria o backup? Podemos fazer o backup de cada plugable database e restaurá-las individualmente?

Desculpe pela enorme mensagem.

Obrigado
Rafael Borges

Eduardo Legatti disse...

Olá Rafael,

Realmente 86 TB é muita informação! Vocês estão utilizando alguma estratégia de backup incremental com block change tracking ativado? Em relação a compressão vocês estão usando o nível HIGH ou MEDIUM?

Em relação ao 12c, teria que avaliar para ver se a aplicação se beneficiaria com o Multitentant. Dependendo de como a aplicação acessa os schemas do banco de dados, talvez você possa realocar os schemas em PDBs distintos e fazer uma estratégia de backup diferente para cada instância PDB, se for o caso. É possível fazer backup/restore de PDBs. Em relação a aplicação, teria que ver se existiria algum impacto em conectar em mais de uma instância PDB.

Enfim, acho que vale a pena você avaliar sim. Apesar de muita propaganda, por enquanto ainda não me atrevo a instalar o 12c R1 em produção. Vou esperar a Release 2 com calma ;-)

No mais, se precisar de mais alguma informação sobre a arquitetura Multitentant do 12c, você poderá dar uma lida no artigo abaixo:

http://eduardolegatti.blogspot.com.br/2014/02/oracle-multitenant-abordando.html


Abraços

Legatti

Rafael disse...

Eduardo, a compressão que utilizamos hoje é a BASIC, mas vamos para a mais agressiva, a HIGH. Ainda não habilitamos o BCT, mas vamos habilitar.

Obrigado pelos esclarecimentos!

Postagens populares