DataARTIGO

Implementação da técnica duplicate através do RMAN em ASM

Saudações, pessoal! Veremos aqui como duplicar um banco no mesmo host, utilizando ASM.

Mas por que duplicar um banco? Bom, porque um bom DBA precisa conhecer previamente esse procedimento nas versões em que ele atua, e também quando ele precisa realizar algum teste de homologação ou migração e não quer causar nenhum impacto no ambiente de produção.

Aqui no nosso exemplo iremos duplicar o banco prod, que seria uma base de produção, o nome do novo banco será duplprod – a versão do banco utilizada nesse conceito é 10.2.0.3.0, e os arquivos que compõem o banco estão na ASM. Para concluirmos esse trabalho, mostrarei a técnica do duplicate utilizando o RMAN.

Vamos começar agora o step by step do nosso trabalho.

01. Pré requisitos: verificando o status da base e se ela está em archive mode

export ORACLE_SID=prod<br />$sqlplus<br /><br />SQL*Plus: Release 10.2.0.3.0 - Production on Tue Aug 24 06:38:24 2010<br /><br />Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br /><br />Enter user-name: sys as sysdba<br />Enter password:<br /><br />Connected to:<br />Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production<br />With the Partitioning, OLAP and Data Mining Scoring Engine options<br /><br />SQL> archive log list;<br />Database log mode              Archive Mode<br />Automatic archival             Enabled<br />Archive destination            USE_DB_RECOVERY_FILE_DEST<br />Oldest online log sequence     31<br />Next log sequence to archive   33<br />Current log sequence           33<br /><br />SQL> select instance_name,status from v$instance;<br /><br />INSTANCE_NAME    STATUS<br />---------------- ------------<br />prod             OPEN

Nossa base está em archivelog e está aberta.

02- O RMAN deverá estar configurado corretamente

export ORACLE_SID=prod<br />$rman target / nocatalog<br /><br />Recovery Manager: Release 10.2.0.3.0 - Production on Tue Aug 24 06:41:21 2010<br /><br />Copyright (c) 1982, 2005, Oracle.  All rights reserved.<br /><br />connected to target database: PROD (DBID=139616651)<br />using target database control file instead of recovery catalog<br /><br />RMAN> show all;<br /><br />RMAN configuration parameters are:<br />CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;<br />CONFIGURE BACKUP OPTIMIZATION OFF;<br />CONFIGURE DEFAULT DEVICE TYPE TO DISK;<br />CONFIGURE CONTROLFILE AUTOBACKUP ON;<br />CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u03/backup/prod/%F';<br />CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;<br />CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;<br />CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;<br />CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u03/backup/prod/backup_db_%d_S_%s_P_%p_T_%t' MAXPIECESIZE 500 M;<br />CONFIGURE MAXSETSIZE TO UNLIMITED;<br />CONFIGURE ENCRYPTION FOR DATABASE OFF;<br />CONFIGURE ENCRYPTION ALGORITHM 'AES128';<br />CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;<br />CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10g/dbs/snapcf_prod.f'; # default

Nosso backup está configurado corretamente, as peças de backup serão gravadas no diretório /u03/backup/prod

03. Checando o parâmetro remote_login_password

export ORACLE_SID=prod<br />$sqlplus<br /><br />SQL*Plus: Release 10.2.0.3.0 - Production on Tue Aug 24 06:43:25 2010<br /><br />Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br /><br />Enter user-name: sys as sysdba<br />Enter password:<br /><br />Connected to:<br />Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production<br />With the Partitioning, OLAP and Data Mining Scoring Engine options<br /><br />SQL> show parameter remote_login_password<br /><br />NAME                                 TYPE        VALUE<br />------------------------------------ ----------- ------------------------------<br />remote_login_passwordfile            string      EXCLUSIVE

04. Realizar o backup da base que será duplicada

$export ORACLE_SID=prod<br />$rman target / nocatalog<br /><br />RMAN> delete noprompt force obsolete;<br />RMAN> crosscheck archivelog all;<br />RMAN> crosscheck backup;<br />RMAN> sql 'alter system archive log current';<br />RMAN> sql 'alter system checkpoint';<br />RMAN> backup as compressed backupset full database plus archivelog delete input;

05. Criar o arquivo de parametros para nosso novo banco

No nosso cenário, nossa nova base se chamará duplprod. O arquivo de parâmetros do nosso novo banco poderá ser uma cópia do nosso banco de origem (prod). Para efeito de termos técnicos, a Oracle denomina nosso banco de origem (prod) como target.

$export ORACLE_SID=prod<br />$sqlplus<br /><br />SQL*Plus: Release 10.2.0.3.0 - Production on Tue Aug 24 07:40:04 2010<br /><br />Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br /><br />Enter user-name: sys as sysdba<br />Enter password:<br /><br />Connected to:<br />Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production<br />With the Partitioning, OLAP and Data Mining Scoring Engine options<br /><br />SQL> create pfile='$ORACLE_HOME/dbs/initduplprod.ora' from spfile;<br /><br />File created.<br />SQL> exit<br /><br />$cd $ORACLE_HOME/dbs <br />$ls -ltr *duplprod*  <br />-rw-r--r--   1 oracle   oinstall    1165 Aug 24 07:40 initduplprod.ora

Bom, pessoal, o arquivo de parâmetros do novo banco (duplprod) está criado, porém precisamos realizar algumas alterações.

Basta editar o arquivo e adicionar alguns parâmetros. No meu caso, utilizarei o vi do Unix.

06. Alterando os parâmetros do novo arquivo initduplprod.ora

  • Alterar os respectivos parâmetros referentes aos diretórios *dest para o novo local.

Por exemplo:

Antes

*.audit_file_dest='/u01/app/oracle/base10g/admin/prod/adump'

Depois

*.audit_file_dest='/u01/app/oracle/base10g/admin/duplprod/adump'

Segue a lista dos parâmetros que deverão ser alterados:

audit_file_dest='/u01/app/oracle/base10g/admin/duplprod/adump'<br />background_dump_dest='/u01/app/oracle/base10g/admin/duplprod/bdump'<br />user_dump_dest='/u01/app/oracle/base10g/admin/prod/udump'<br />core_dump_dest='/u01/app/oracle/base10g/admin/duplprod/cdump'<br />control_files='+DADOS/duplprod/controlfile/control01.ctl'<br />dbname='duplprod'<br />instance_name='duplprod'

Segue o meu arquivo como exemplo.

java_pool_size=16777216<br />large_pool_size=16777216<br />shared_pool_size=352321536<br />streams_pool_size=0<br />*.audit_file_dest='/u01/app/oracle/base10g/admin/duplprod/adump'<br />*.background_dump_dest='/u01/app/oracle/base10g/admin/duplprod/bdump'<br />*.compatible='10.2.0.3.0'<br />*.control_files='+DADOS/duplprod/controlfile/control01.ctl'<br />*.core_dump_dest='/u01/app/oracle/base10g/admin/duplprod/cdump'<br />*.db_block_size=8192<br />*.db_create_file_dest='+DADOS'<br />*.db_create_online_log_dest_1='+DADOS'<br />*.db_create_online_log_dest_2='+FLASH'<br />*.db_domain=''<br />*.db_file_multiblock_read_count=16<br />*.db_name='duplprod'<br />*.instance_name='duplprod'<br />*.db_recovery_file_dest='+FLASH'<br />*.db_recovery_file_dest_size=2147483648<br />*.dispatchers='(PROTOCOL=TCP) (SERVICE=prodXDB)'<br />*.job_queue_processes=10<br />*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'<br />*.log_archive_format='%t_%s_%r.dbf'<br />*.open_cursors=300<br />*.pga_aggregate_target=848297984<br />*.processes=150<br />*.remote_login_passwordfile='EXCLUSIVE'<br />*.sga_target=1610612736<br />*.undo_management='AUTO'<br />*.undo_tablespace='UNDOTBS1'<br />*.user_dump_dest='/u01/app/oracle/base10g/admin/prod/udump'

07. Criar os diretórios referentes aos parâmetros do banco *dest para o novo banco (duplprod)

mkdir -p /u01/app/oracle/base10g/admin/duplprod/cdump<br />mkdir -p /u01/app/oracle/base10g/admin/duplprod/dpdump<br />mkdir -p /u01/app/oracle/base10g/admin/duplprod/pfile<br />mkdir -p /u01/app/oracle/base10g/admin/duplprod/bdump<br />mkdir -p /u01/app/oracle/base10g/admin/duplprod/udump<br />mkdir -p /u01/app/oracle/base10g/admin/duplprod/adump

08. Criar o arquivo de senhas para o novo banco

$export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1<br />$export ORACLE_SID=duplprod<br />$orapwd file=$ORACLE_HOME/dbs/orapwduplprod password=oracle entries=10

Obs: Lembrando que isso é um teste de conceito, por isso eu coloquei senha oracle.

09. Fazendo o startup da instância do novo banco

$sqlplus<br /><br />SQL*Plus: Release 10.2.0.3.0 - Production on Tue Aug 24 14:09:20 2010<br /><br />Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br /><br />Enter user-name: sys as sysdba<br />Enter password:<br />Connected to an idle instance.<br />SQL> startup nomount pfile='$ORACLE_HOME/dbs/initduplprod.ora'<br />ORACLE instance started.                                     <br /><br />Total System Global Area 1610612736 bytes                    <br />Fixed Size                  2073088 bytes                    <br />Variable Size             385879552 bytes                    <br />Database Buffers         1207959552 bytes                    <br />Redo Buffers               14700544 bytes                     

Obs: Depois que o startup nomount for feito, dar um exit dessa sessão, senão o Oracle não irá iniciar o duplicate.

10. Criem uma entrada no tnsnames do banco target (origem), que será duplicado, no nosso caso será prod

11. Escolhendo o ponto de duplicação do banco

$export ORACLE_SID=prod<br />$rman target / nocatalog<br /><br />Recovery Manager: Release 10.2.0.3.0 - Production on Tue Aug 24 14:14:36 2010<br /><br />Copyright (c) 1982, 2005, Oracle.  All rights reserved.<br /><br />connected to target database: PROD (DBID=139616651)<br />using target database control file instead of recovery catalog<br /><br />RMAN> list backup of database;<br /><br /><br />List of Backup Sets<br />===================<br /><br />BS Key  Type LV Size       Device Type Elapsed Time Completion Time<br />------- ---- -- ---------- ----------- ------------ ---------------<br />2       Full    162.57M    DISK        00:00:26     23-AUG-10<br />        BP Key: 2   Status: AVAILABLE  Compressed: YES  Tag: TAG20100823T090039<br />        Piece Name: /u03/backup/prod/backup_db_PROD_S_2_P_1_T_727779639<br />  List of Datafiles in backup set 2<br />  File LV Type Ckp SCN    Ckp Time  Name<br />  ---- -- ---- ---------- --------- ----<br />  1       Full 501993     23-AUG-10 +DADOS/prod/datafile/system.278.727778321<br />  2       Full 501993     23-AUG-10 +DADOS/prod/datafile/undotbs1.283.727778325<br />  3       Full 501993     23-AUG-10 +DADOS/prod/datafile/sysaux.282.727778327<br />  4       Full 501993     23-AUG-10 +DADOS/prod/datafile/users.289.727778329<br /><br />BS Key  Type LV Size       Device Type Elapsed Time Completion Time<br />------- ---- -- ---------- ----------- ------------ ---------------<br />6       Full    80.63M     DISK        00:00:14     24-AUG-10<br />        BP Key: 6   Status: AVAILABLE  Compressed: YES  Tag: TAG20100824T073250<br />        Piece Name: /u03/backup/prod/backup_db_PROD_S_6_P_1_T_727860770<br />  List of Datafiles in backup set 6<br />  File LV Type Ckp SCN    Ckp Time  Name<br />  ---- -- ---- ---------- --------- ----<br />  1       Full 541554     24-AUG-10 +DADOS/prod/datafile/system.278.727778321<br />  2       Full 541554     24-AUG-10 +DADOS/prod/datafile/undotbs1.283.727778325<br />  3       Full 541554     24-AUG-10 +DADOS/prod/datafile/sysaux.282.727778327<br />  4       Full 541554     24-AUG-10 +DADOS/prod/datafile/users.289.727778329

Eu escolhi o último checkpoint, que é 541554, o de vocês será diferente do meu; guardem essa informação.

12. Conectando no rman da base target (prod)

$export ORACLE_SID=duplprod<br />$rman target sys/oracle@prod nocatalog<br /><br />Recovery Manager: Release 10.2.0.3.0 - Production on Tue Aug 24 14:38:52 2010<br /><br />Copyright (c) 1982, 2005, Oracle.  All rights reserved.<br /><br />connected to target database: PROD (DBID=139616651)<br />using target database control file instead of recovery catalog<br /><br />RMAN> connect auxiliary /<br /><br />connected to auxiliary database: DUPLPROD (not mounted)

13. Iniciando o duplicate

Nesse momento, iremos definir o checkpoint anotado no step 10,

run {<br />        set until scn 541554;                            <br />        allocate channel ch1 type disk;<br />        allocate auxiliary channel ch2 type disk;<br />        duplicate target database to duplprod;          <br />    }   <br /><br /><br /> Modified 30-JUN-2010     Type BULLETIN     Status PUBLISHED   

Daqui para frente, várias mensagens referentes ao status da duplicação vão aparecer.

Bom, pessoal, é isso aí, espero que você tenham gostado e que aproveitem bastante esse recurso!

Um forte abraço e até a próxima.

é DBA Oracle Sr. Possui seis anos de experiência em administração de banco de dados Oracle em ambientes de missão crítica e alta disponibilidade nas plataformas AIX, HP, Solaris Sparc, Solaris, Linux Red Hat, Linux Debian, Windows Server 2008, Windows NT, Windows XP e Oracle OCP na versão 10g.

Ver perfil