segunda-feira, 18 de julho de 2011

Minha experiência no GUOB Tech Day 2011 ...

Olá,

Quem não foi, realmente perdeu uma grande oportunidade de ver excelentes palestras e prestigiar grandes profissionais do mundo Oracle. Foi sensacional. Confesso que pequei em não realizar um networking de forma mais assertiva. No entanto, tive a oportunidade de conhecer pessoalmente grandes DBAs e profissionais Oracle que são influências e referências para mim. A não presença do Francisco Munoz Alvarez no evento, por motivos profissionais, foi uma pena pois queria muito ter conhecido ele pessoalmente desta vez. irei aguardar uma próxima oportunidade. Uma pena também foi o Ricardo Portilho ter aberto mão de sua palestra em prol de outras, mas realmente foi uma atitude louvável. Conheci pessoalmente muitos mestres que antes só conhecia apenas virtualmente, como o Rodrigo Almeida, o Ricardo Portilho, o Marcus Vinicius Miguel Pedro, o David Ricardo e muitos outros que estavam presentes no evento, incluindo o Diretor da OTN Latin America, Pablo Ciccarello. Conheci também os palestrantes internacionais como Kuassi Mensah, Kai Yu, Graham Wood, Hans Forbrich, Arup Nanda, Debra Lilley, entre outros.


A organização do evento foi impecável, pena não ter havido cadeiras suficientes para todos em algumas sessões. Acabei perdendo a palestra do Rodrigo Mufalani sobre certificações Oracle. Algumas sessões realmente estavam lotadas e acho que não teria como os organizadores preverem a tamanha quantidade de pessoas em algumas sessões. Foi um sucesso. Para quem não sabe, o GUOB faz parte do LAOUC (Latin America Oracle Users Community) desde sua fundação em 2009 e a partir desta aliança, o LAOUC assim como a OTN, se tornou um grande apoiador dos eventos do GUOB, através do envio de material técnico e relacionamento com palestrantes internacionais. Ainda não me associei ao grupo, mas irei fazê-lo logo em breve ;-)


Após a abertura do evento iniciada pelo Presidente do GUOB Eduardo Hahn e pelo diretor da OTN Pablo Ciccarello, entrou em cena o arquiteto da Oracle Graham Wood, conhecido como um dos criadores do AWR e ADDM do oracle 10g/11g. Nesta palestra ele mostrou de forma online o Oracle Exadata carregando 1 TB de dados no banco de dados de forma incrivelmente rápida, além de mostrar a inserção de aproximadamente 8 billões de linhas em apenas 9 minutos. Logo depois assisti outra palestra dele sobre algumas funcionalidades escondidas do Oracle. Arup Nanda também palestrou sobre o Exadata e nos mostrou um novo perfil de profissional, o DMA (Database Machine Administrator).

Dentre as palestras de Kleuber Matta da Quest Software e Hans Forbrich, assisti a de Kai Yu que palestrou sobre virtualização do Oracle 11g/R2 RAC e sobre arquitetura e configuração do mesmo, até então um assunto que ainda preciso me dedicar.




Assisti também outra palestra do Hans Forbrich sobre algumas considerações de segurança do Business Inteligence do 11g. Dentre as palestras de Kuassi Mensah e Thomas Glufke, me interessei sobre a palestra do Marcus Vinicius Miguel Pedro onde ele abordou a disponibilidade de sites com o RAC Extended Cluster e confesso que me agregou muito conhecimento.


Nas últimas palestras, assisti o Arup Nanda falando sobre algumas melhores práticas no que se refere ao gerenciamento do banco de dados Oracle e conheci muito de sua personalidade. Ao final do evento, foram sorteados muitos brindes, entre eles alguns livros do próprio Arup Nanda e até um NetBook foi sorteado.



Enfim, o evento foi excelente e me agregou muitos conhecimentos. Portanto, parabenizo a todos os organizadores.



quarta-feira, 6 de julho de 2011

Clonando um banco de dados Oracle com o RMAN - DUPLICATE DATABASE (10g vs 11g)

Olá,

Neste artigo irei demonstrar na prática como clonar um banco de dados Oracle no mesmo servidor através do comando DUPLICATE DATABASE do RMAN. Irei realizar alguns passos de forma a mostrar a clonagem com o uso de um backup previamente feito pelo RMAN que, aliás, é fundamental e obrigatório para realização da clonagem nas versões Oracle 10g e anteriores. Uma outra abordagem que farei, será a de mostrar os passos para a realização da clonagem sem a utilização de um backup através de um novo recurso do comando duplicate database no RMAN do Oracle 11g chamando de ACTIVE DATABASE. Para mostrar as duas abordagens, usarei o Oracle 11g Rel2 instalado em uma máquina sob o sistema operacional Windows. Já vou adiantando que a clonagem via o comando duplicate database pode ser feita em bancos que estejam operando nos modos NOARCHIVELOG ou ARCHIVELOG. No caso de bancos operando no modo NOARCHIVELOG, o banco de origem deverá estar no mínimo em estado MOUNT e a instância auxiliar deverá estar no estado NOMOUNT.

No primeiro cenário, irei clonar o banco de dados BD02 para TESTE. O primeiro passo é criar os diretórios necessários nos devidos locais de forma que eles possam ficar iguais aos diretórios do banco de dados de origem como admin\TESTE\adump e, no meu caso, oradata\TESTE. Nesta primeira abordagem irei realizar a clonagem utilizando um backup do banco de dados BD02 previamente realizado pelo RMAN como demonstrado abaixo. No caso, o banco de dados de origem BD02 está operando no modo ARCHIVELOG.


RMAN DUPLICATE (usando backup)

C:\>rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 20:33:30 2011

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

conectado ao banco de dados de destino: BD02 (DBID=2693065298)

RMAN> backup full database plus archivelog;

Iniciando backup em 06/07/11
log atual arquivado
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=29 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=16 RECID=1 STAMP=754598030
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11

Iniciando backup em 06/07/11
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=E:\ORACLE\ORADATA\BD02\SYSTEM01.DBF
número do arquivo=00002 nome=E:\ORACLE\ORADATA\BD02\SYSAUX01.DBF
número do arquivo=00003 nome=E:\ORACLE\ORADATA\BD02\UNDOTBS01.DBF
número do arquivo=00004 nome=E:\ORACLE\ORADATA\BD02\USERS01.DBF
número do arquivo=00005 nome=E:\ORACLE\ORADATA\BD02\TBS01.DBF
número do arquivo=00006 nome=E:\ORACLE\ORADATA\BD02\TBS02.DBF
número do arquivo=00007 nome=E:\ORACLE\ORADATA\BD02\TBS03.DBF
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:25
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
incluindo arquivo de controle atual no conjunto de backups
incluindo SPFILE atual do conjunto de backups
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11

Iniciando backup em 06/07/11
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=17 RECID=2 STAMP=754598064
canal ORA_DISK_1: iniciando o componente 1 em 06/07/11
canal ORA_DISK_1: componente 1 finalizado em 06/07/11
handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET\2011_07_06\
canal ORA_DISK_1: conjunto de backups concluído, tempo decorrido: 00:00:01
Finalizado backup em 06/07/11
 
Após a criação do backup pelo RMAN, irei conectar no banco de dados de origem e criar um arquivo de inicialização (pfile) na qual o editarei conforme exemplo a seguir.

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 20:35:47 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile from spfile;

Arquivo criado.

Conteúdo do arquivo de inicialização após a edição
--------------------------------------------------

*.audit_file_dest='E:\oracle\admin\TESTE\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\oracle\oradata\TESTE\control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TESTE'
*.db_recovery_file_dest='E:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=107374182400
*.diagnostic_dest='E:\oracle'
*.memory_target=320864256
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert =('\oradata\BD02\','\oradata\TESTE\')
*.log_file_name_convert =('\oradata\BD02\','\oradata\TESTE\')
 
Após a criação do arquivo initTESTE.ora, sua edição e cópia para o local apropriado em %ORACLE_HOME%\database, irei criar um serviço no Windows para poder inicializar a instância no estado NOMOUNT como demonstrado abaixo:

C:\>oradim -new -sid TESTE -syspwd minhasenha
Instância criada.

C:\>set ORACLE_SID=TESTE 
 
Realizada a criação do serviço, irei iniciar a instância no estado NOMOUNT. Neste ponto, esta será a minha instância auxiliar.

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 20:44:21 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Conectado a uma instância inativa.

SQL> startup nomount
Instância ORACLE iniciada.

Total System Global Area  322228224 bytes
Fixed Size                  1374360 bytes
Variable Size             209717096 bytes
Database Buffers          104857600 bytes
Redo Buffers                6279168 bytes
 
Está tudo pronto para iniciarmos o processo de clonagem. Abaixo irei conectar na instância BD02. Para tanto, será necessário que tenha um serviço no arquivo TNSNAMES.ORA que aponte para a instância de origem BD02. Já que no prompt do DOS eu executei o comando set ORACLE_SID=TESTE, então no comando abaixo a parte auxiliary / irá se conectar na instância auxiliar TESTE.

C:\>rman target sys/manager@BD02 auxiliary /

Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 21:08:20 2011

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

conectado ao banco de dados de destino: BD02 (DBID=2693065298)
conectado ao banco de dados auxiliar: TESTE (não montado)

Agora é só iniciar o processo de clonagem com o comando abaixo e o RMAN fará todo o trabalho para nós.

RMAN> duplicate target database to TESTE;
Iniciando Duplicate Db em 06/07/11
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISK

conteúdo do Script de Memória:
{
   sql clone "create spfile from memory";
}
executando Script de Memória

instrução sql: create spfile from memory

conteúdo do Script de Memória:
{
   shutdown clone immediate;
   startup clone nomount;
}
executando Script de Memória

encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

conteúdo do Script de Memória:
{
   sql clone "alter system set  db_name =
 ''BD02'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''TESTE'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   shutdown clone immediate;
   startup clone force nomount
   restore clone primary controlfile;
   alter clone database mount;
}
executando Script de Memória

instrução sql: alter system set  db_name =  ''BD02''
comment= ''Modified by RMAN duplicate'' scope=spfile

instrução sql: alter system set  db_unique_name =  ''TESTE''
comment= ''Modified by RMAN duplicate'' scope=spfile

encerramento de instância Oracle

instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

Iniciando restore em 06/07/11
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=18 tipo de dispositivo=DISK

canal ORA_AUX_DISK_1: iniciando restauração de conjunto de backups
canal ORA_AUX_DISK_1: restaurando arquivo de controle
canal ORA_AUX_DISK_1: lendo backup E:\ORACLE\FLASH_RECOVERY_AREA\BD02\BACKUPSET
canal ORA_AUX_DISK_1: handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02
canal ORA_AUX_DISK_1: restaurada a parte de backup 1
canal ORA_AUX_DISK_1: restauração concluída, tempo decorrido: 00:00:01
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE\CONTROL01.CTL
Finalizado restore em 06/07/11

banco de dados montado

conteúdo do Script de Memória:
{
   set until scn  222488;
   set newname for datafile  1 to
 "E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF";
   set newname for datafile  2 to
 "E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF";
   set newname for datafile  3 to
 "E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF";
   set newname for datafile  4 to
 "E:\ORACLE\ORADATA\TESTE\USERS01.DBF";
   set newname for datafile  5 to
 "E:\ORACLE\ORADATA\TESTE\TBS01.DBF";
   set newname for datafile  6 to
 "E:\ORACLE\ORADATA\TESTE\TBS02.DBF";
   set newname for datafile  7 to
 "E:\ORACLE\ORADATA\TESTE\TBS03.DBF";
   restore
   clone database
   ;
}
executando Script de Memória
executando comando: SET until clause

executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME

Iniciando restore em 06/07/11
utilizando o canal ORA_AUX_DISK_1

canal ORA_AUX_DISK_1: iniciando restauração de backups de arquivo de dados
canal ORA_AUX_DISK_1: especificando arquivo(s) para restauração
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\USERS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS01.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS02.DBF
canal ORA_AUX_DISK_1: restaurando em E:\ORACLE\ORADATA\TESTE\TBS03.DBF
canal ORA_AUX_DISK_1: lendo backup E:\ORACLE\FLASH_RECOVERY_AREA\BD02\
canal ORA_AUX_DISK_1: handle de componente=E:\ORACLE\FLASH_RECOVERY_AREA\BD02\
canal ORA_AUX_DISK_1: restaurada a parte de backup 1
canal ORA_AUX_DISK_1: restauração concluída, tempo decorrido: 00:00:45
Finalizado restore em 06/07/11

conteúdo do Script de Memória:
{
   switch clone datafile all;
}
executando Script de Memória

arquivo de dados 1 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS03.DBF

conteúdo do Script de Memória:
{
   set until scn  222488;
   recover
   clone database
    delete archivelog
   ;
}
executando Script de Memória

executando comando: SET until clause

Iniciando recover em 06/07/11
utilizando o canal ORA_AUX_DISK_1

iniciar recuperação de mídia

o log arquivado para thread 1 com sequência 17 já está no disco
recuperação da mídia concluída, tempo decorrido: 00:00:01
Finalizado recover em 06/07/11

conteúdo do Script de Memória:
{
   shutdown clone immediate;
   startup clone nomount;
   sql clone "alter system set  db_name =
 ''TESTE'' comment=
 ''Reset to original value by RMAN'' scope=spfile";
   sql clone "alter system reset  db_unique_name scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executando Script de Memória

banco de dados desmontado
encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

instrução sql: alter system set  db_name =  ''TESTE''
comment= ''Reset to original value by RMAN'' scope=spfile

instrução sql: alter system reset  db_unique_name scope=spfile

encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

instrução: CREATE CONTROLFILE REUSE SET DATABASE "TESTE" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS    3
  MAXDATAFILES   100
  MAXINSTANCES     8
  MAXLOGHISTORY  292
 LOGFILE
  GROUP  1 ( 'E:\ORACLE\ORADATA\TESTE\REDO01.LOG' ) SIZE 50 M  REUSE,
  GROUP  2 ( 'E:\ORACLE\ORADATA\TESTE\REDO02.LOG' ) SIZE 50 M  REUSE,
  GROUP  3 ( 'E:\ORACLE\ORADATA\TESTE\REDO03.LOG' ) SIZE 50 M  REUSE
 DATAFILE
  'E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF'
 CHARACTER SET WE8MSWIN1252


conteúdo do Script de Memória:
{
   set newname for tempfile  1 to
 "E:\ORACLE\ORADATA\TESTE\TEMP01.DBF";
   switch clone tempfile all;
   catalog clone datafilecopy  "E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF",
 "E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF",
 "E:\ORACLE\ORADATA\TESTE\USERS01.DBF",
 "E:\ORACLE\ORADATA\TESTE\TBS01.DBF",
 "E:\ORACLE\ORADATA\TESTE\TBS02.DBF",
 "E:\ORACLE\ORADATA\TESTE\TBS03.DBF";
   switch clone datafile all;
}
executando Script de Memória

executando comando: SET NEWNAME

arquivo temporário renomeado 1 para
E:\ORACLE\ORADATA\TESTE\TEMP01.DBF no arquivo de controle

cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE\TBS03.DBF

arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE\TBS03.DBF

conteúdo do Script de Memória:
{
   Alter clone database open resetlogs;
}
executando Script de Memória

banco de dados aberto
Finalizado Duplicate Db em 06/07/11


Pronto. A clonagem foi realizada e poderemos conectar no banco de dados TESTE como demonstrado abaixo.

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:16:54 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select open_mode,name,created from v$database;

OPEN_MODE            NAME                  CREATED
-------------------- --------------------- ----------
READ WRITE           TESTE                 06/07/2011

SQL> select file_name from dba_data_files;

FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE\SYSTEM01.DBF
E:\ORACLE\ORADATA\TESTE\SYSAUX01.DBF
E:\ORACLE\ORADATA\TESTE\UNDOTBS01.DBF
E:\ORACLE\ORADATA\TESTE\USERS01.DBF
E:\ORACLE\ORADATA\TESTE\TBS01.DBF
E:\ORACLE\ORADATA\TESTE\TBS02.DBF
E:\ORACLE\ORADATA\TESTE\TBS03.DBF

7 linhas selecionadas.

SQL> select file_name from dba_temp_files;

FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE\TEMP01.DBF
 
RMAN DUPLICATE (Usando o Active Database)


A próxima abordagem será demonstrar a clonagem sem que seja necessário a realização prévia de um backup. Isto só é possível utilizando o Oracle 11g. Neste caso, irei clonar novamente o banco de dados BD02 só que agora como TESTE2. Após a criação dos diretórios necessários, irei realizar a modificação no arquivo de inicialização (pfile) gerado da mesma forma como fiz na primeira abordagem:

Conteúdo do arquivo de inicialização após a edição
--------------------------------------------------

*.audit_file_dest='E:\oracle\admin\TESTE2\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\oracle\oradata\TESTE2\control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TESTE2'
*.db_recovery_file_dest='E:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=107374182400
*.diagnostic_dest='E:\oracle'
*.memory_target=320864256
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert =('\oradata\BD02\','\oradata\TESTE2\')
*.log_file_name_convert =('\oradata\BD02\','\oradata\TESTE2\')

Diferente da primeira abordagem, precisaremos editar o arquivo LISTENER.ORA de forma a registrar a instância clone conforme demonstrado abaixo:

Conteúdo do arquivo listener.ora
--------------------------------

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = TESTE2)
      (ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1)
      (SID_NAME = TESTE2)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = micro)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = E:\oracle


Precisaremos também adicionar um serviço no arquivo TNSNAMES.ORA para a instância TESTE2 conforme o exemplo abaixo:

Conteúdo do arquivo tnsnames.ora
--------------------------------

TESTE2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = micro)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TESTE2)
    )
  )


Após realizados os passos acima, irei criar um serviço no Windows da mesma forma que foi realizada na primeira abordagem, de forma a poder inicializar a instância TESTE2 (auxiliar) no estado NOMOUNT. Precisaremos também criar um arquivo de senha como demonstrado a seguir.

C:\>oradim -new -sid TESTE2 -syspwd minhasenha
Instância criada.

C:\>orapwd file=E:\oracle\product\11.2.0\dbhome_1\database\pwdTESTE2.ora
    password=minhasenha


Pronto. Agora já poderei inicializar a instância TESTE2 no estado NOMOUNT como demonstrado abaixo:

C:\>set ORACLE_SID=TESTE2

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:25:37 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Conectado a uma instância inativa.

SQL> startup nomount
Instância ORACLE iniciada.

Total System Global Area  322228224 bytes
Fixed Size                  1374360 bytes
Variable Size             209717096 bytes
Database Buffers          104857600 bytes
Redo Buffers                6279168 bytes


Através do comando abaixo, realizarei a conexão com a instância de origem BD02 e com a instância auxiliar TESTE2 para dar início à clonagem de forma online.

C:\>rman target sys/manager@BD02 auxiliary sys/minhasenha@TESTE2

Recovery Manager: Release 11.2.0.1.0 - Production on Qua Jul 6 21:36:59 2011

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

conectado ao banco de dados de destino: BD02 (DBID=2693065298)
conectado ao banco de dados auxiliar: TESTE2 (não montado)

Agora é só iniciar o processo de clonagem utilizando a cláusula from active database do comando DUPLICATE abaixo, e o RMAN fará todo o trabalho para nós de forma online sem a necessidade de utilização de um backup realizado previamente.

RMAN> duplicate target database to TESTE2 from active database;
Iniciando Duplicate Db em 06/07/11
usar o arquivo de controle do banco de dados de destino em vez do catálogo
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=19 tipo de dispositivo=DISK

conteúdo do Script de Memória:
{
   sql clone "create spfile from memory";
}
executando Script de Memória

instrução sql: create spfile from memory

conteúdo do Script de Memória:
{
   shutdown clone immediate;
   startup clone nomount;
}
executando Script de Memória

encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

conteúdo do Script de Memória:
{
   sql clone "alter system set  db_name =
 ''BD02'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''TESTE2'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   shutdown clone immediate;
   startup clone force nomount
   backup as copy current controlfile auxiliary format 
      'E:\ORACLE\ORADATA\TESTE2\CONTROL01.CTL';
   alter clone database mount;
}
executando Script de Memória

instrução sql: alter system set  db_name =  ''BD02''
comment= ''Modified by RMAN duplicate'' scope=spfile

instrução sql: alter system set  db_unique_name =  ''TESTE2''
comment= ''Modified by RMAN duplicate'' scope=spfile

encerramento de instância Oracle

instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

Iniciando backup em 06/07/11
canal alocado: ORA_DISK_1
canal ORA_DISK_1: SID=37 tipo de dispositivo=DISK
canal ORA_DISK_1: iniciando cópia de arquivo de dados
copiando arquivo de controle atual
nome do arquivo=E:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFBD02.ORA
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
Finalizado backup em 06/07/11

banco de dados montado

conteúdo do Script de Memória:
{
   set newname for datafile  1 to
 "E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF";
   set newname for datafile  2 to
 "E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF";
   set newname for datafile  3 to
 "E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF";
   set newname for datafile  4 to
 "E:\ORACLE\ORADATA\TESTE2\USERS01.DBF";
   set newname for datafile  5 to
 "E:\ORACLE\ORADATA\TESTE2\TBS01.DBF";
   set newname for datafile  6 to
 "E:\ORACLE\ORADATA\TESTE2\TBS02.DBF";
   set newname for datafile  7 to
 "E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
   backup as copy reuse
   datafile  1 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF"   datafile
 2 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF"   datafile
 3 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF"  datafile
 4 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\USERS01.DBF"    datafile
 5 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\TBS01.DBF"      datafile
 6 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\TBS02.DBF"      datafile
 7 auxiliary format
 "E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
   sql 'alter system archive log current';
}
executando Script de Memória

executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME
executando comando: SET NEWNAME

Iniciando backup em 06/07/11
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando cópia de arquivo de dados
nome=E:\ORACLE\ORADATA\BD02\SYSTEM01.DBF do arquivo de dados de entrada
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:01:15
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00002 nome=E:\ORACLE\ORADATA\BD02\SYSAUX01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:55
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00003 nome=E:\ORACLE\ORADATA\BD02\UNDOTBS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:25
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00004 nome=E:\ORACLE\ORADATA\BD02\USERS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:04
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00005 nome=E:\ORACLE\ORADATA\BD02\TBS01.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00006 nome=E:\ORACLE\ORADATA\BD02\TBS02.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
canal ORA_DISK_1: iniciando cópia de arquivo de dados
número do arquivo=00007 nome=E:\ORACLE\ORADATA\BD02\TBS03.DBF
nome do arquivo de saída=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF
canal ORA_DISK_1: cópia de arquivo de dados concluída; decorrido: 00:00:03
Finalizado backup em 06/07/11

instrução sql: alter system archive log current

conteúdo do Script de Memória:
{
   backup as copy reuse
   archivelog like  "E:\ORACLE\FLASH_RECOVERY_AREA\BD02\ARCHIVELOG\2011_07_06\
   O1_MF_1_18_707LDYHN_.ARC" auxiliary format
 E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\O1_MF_1_18_%U_.ARC;
   catalog clone recovery area;
   switch clone datafile all;
}
executando Script de Memória

Iniciando backup em 06/07/11
utilizando o canal ORA_DISK_1
canal ORA_DISK_1: iniciando cópia de log arquivado
thread do log arquivado de entrada=1 sequência=18 RECID=3 STAMP=754604271
nome do arquivo de saída=E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\
canal ORA_DISK_1: cópia de log arquivado concluída, decorrido: 00:00:01
Finalizado backup em 06/07/11

procurando todos os arquivos na área de recuperação

Lista de Arquivos Desconhecidos para o Banco de Dados
=====================================================
Nome do Arquivo: E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\
O1_MF_1_18_ARCH_D-BD02_ID-2693065298_S-18_T-1_A-752966866_0FMFKM7G_.ARC
catalogando arquivos...
catalogação concluída

Lista de Arquivos Catalogados
=============================
Nome do Arquivo: E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\2011_07_06\
O1_MF_1_18_ARCH_D-BD02_ID-2693065298_S-18_T-1_A-752966866_0FMFKM7G_.ARC

arquivo de dados 1 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF

conteúdo do Script de Memória:
{
   set until scn  226711;
   recover
   clone database
    delete archivelog
   ;
}
executando Script de Memória

executando comando: SET until clause

Iniciando recover em 06/07/11
canal alocado: ORA_AUX_DISK_1
canal ORA_AUX_DISK_1: SID=21 tipo de dispositivo=DISK

iniciar recuperação de mídia

o log arquivado para thread 1 com sequência 18 já está no disco
nome do arquivo de log =E:\ORACLE\FLASH_RECOVERY_AREA\TESTE2\ARCHIVELOG\

recuperação da mídia concluída, tempo decorrido: 00:00:03
Finalizado recover em 06/07/11

conteúdo do Script de Memória:
{
   shutdown clone immediate;
   startup clone nomount;
   sql clone "alter system set  db_name =
 ''TESTE2'' comment=
 ''Reset to original value by RMAN'' scope=spfile";
   sql clone "alter system reset  db_unique_name scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executando Script de Memória

banco de dados desmontado
encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

instrução sql: alter system set  db_name =  ''TESTE2''
comment= ''Reset to original value by RMAN'' scope=spfile

instrução sql: alter system reset  db_unique_name scope=spfile

encerramento de instância Oracle

conectado ao banco de dados auxiliar (não iniciado)
instância Oracle iniciada

Total da Área Global do Sistema     322228224 bytes

Fixed Size              1374360 bytes
Variable Size         218105704 bytes
Database Buffers       96468992 bytes
Redo Buffers            6279168 bytes

instrução: CREATE CONTROLFILE REUSE SET DATABASE "TESTE2" RESETLOGS ARCHIVELOG
  MAXLOGFILES     16
  MAXLOGMEMBERS    3
  MAXDATAFILES   100
  MAXINSTANCES     8
  MAXLOGHISTORY  292
 LOGFILE
  GROUP  1 ( 'E:\ORACLE\ORADATA\TESTE2\REDO01.LOG' ) SIZE 50 M  REUSE,
  GROUP  2 ( 'E:\ORACLE\ORADATA\TESTE2\REDO02.LOG' ) SIZE 50 M  REUSE,
  GROUP  3 ( 'E:\ORACLE\ORADATA\TESTE2\REDO03.LOG' ) SIZE 50 M  REUSE
 DATAFILE
  'E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF'
 CHARACTER SET WE8MSWIN1252


conteúdo do Script de Memória:
{
   set newname for tempfile  1 to
 "E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF";
   switch clone tempfile all;
   catalog clone datafilecopy  "E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF",
 "E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF",
 "E:\ORACLE\ORADATA\TESTE2\USERS01.DBF",
 "E:\ORACLE\ORADATA\TESTE2\TBS01.DBF",
 "E:\ORACLE\ORADATA\TESTE2\TBS02.DBF",
 "E:\ORACLE\ORADATA\TESTE2\TBS03.DBF";
   switch clone datafile all;
}
executando Script de Memória

executando comando: SET NEWNAME

arquivo temporário renomeado 1 para E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF

cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
cópia do arquivo de dados catalogado
nome do arquivo de cópia=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF

arquivo de dados 2 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
arquivo de dados 3 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
arquivo de dados 4 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
arquivo de dados 5 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
arquivo de dados 6 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
arquivo de dados 7 alternado para a cópia do arquivo de dados
cópia do arquivo de dados file name=E:\ORACLE\ORADATA\TESTE2\TBS03.DBF

conteúdo do Script de Memória:
{
   Alter clone database open resetlogs;
}
executando Script de Memória

banco de dados aberto
Finalizado Duplicate Db em 06/07/11

Pronto. A clonagem foi realizada de forma online e poderemos conectar no banco de dados TESTE2 como demonstrado abaixo.

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Qua Jul 6 21:47:54 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select open_mode,name,created from v$database;

OPEN_MODE            NAME                  CREATED
-------------------- --------------------- ----------
READ WRITE           TESTE2                06/07/2011

SQL> select file_name from dba_data_files;

FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE2\SYSTEM01.DBF
E:\ORACLE\ORADATA\TESTE2\SYSAUX01.DBF
E:\ORACLE\ORADATA\TESTE2\UNDOTBS01.DBF
E:\ORACLE\ORADATA\TESTE2\USERS01.DBF
E:\ORACLE\ORADATA\TESTE2\TBS01.DBF
E:\ORACLE\ORADATA\TESTE2\TBS02.DBF
E:\ORACLE\ORADATA\TESTE2\TBS03.DBF

7 linhas selecionadas.

SQL> select file_name from dba_temp_files;

FILE_NAME
------------------------------------------------
E:\ORACLE\ORADATA\TESTE2\TEMP01.DBF