top of page

Oracle: Backup Básico com RMAN

Dúvida: Como fazer backup em banco Oracle usando RMAN ?


À algum tempo atrás, para se fazer backup do banco Oracle era necessário desenvolver scripts para begin/end backup dos datafiles à serem backapeados. O problema era que, além da ocorrência de falhas que podia ocorrer, o procedimento não tinha nenhum tipo de otimização. À partir da versão 8i, e com mais segurança/estabilidade, à partir da versão 10g a Oracle passou a recomendar o uso do RMAN (Recovery Manager) para realização dos backups. Portanto, o foco neste artigo é realização de backup básico com RMAN incluindo alguns comentários sobre os principais comandos que podem ser usados.


Antes de iniciarmos o RMAN, cabe uma breve introdução sobre backups no Oracle:


Existem várias formas de realizarmos o backup. A primeira e mais simples é dar shutdown no banco e copiar todos os arquivos necessários com o banco Offline. Isso seria um COLD backup. Embora seja uma das formas mais fáceis para posterior restore/recover (isso se o shutdown for feito de forma normal/immediate), não é a mais recomendada, uma vez que ultimamente as bases trabalham 24/7 ou seja, parar um banco de dados é difícil.


A outra forma de fazer backup é o HOT BACKUP ou backup OnLine. Conforme já comentei, a algum tempo atrás era necessário usar begin backup/end backup para isso (posteriormente falarei sobre este método), no entanto, com o advento do RMAN essa passou a ser a minha forma preferida e também a mais segura. Pq ?


1) É fácil de usar e é independente de plataforma (SO);

2) É gratuíto e tem 100% de suporte da Oracle;

3) Oferece compressão dos backups já na versão Standard;

4) Pode ser usado em banco no modo ArchiveLog ou NoArchiveLog;

5) Oferece opção para backup incremental;

6) Entre diversos outros motivos;

7) ‘Backup bom é aquele que volta’, então, porque não usar algo que funciona e bem ?


Então, vamos lá. A intenção aqui é mostrar o rman funcionando. Se quiser aprender sobre conceitos (o que é obrigatório para um DBA) pesquise no google ou então no http://docs.oracle.com.


a) Para se conectar no RMAN:

[oracle@blade bin]$ rman target / nocatalog

Recovery Manager: Release 10.2.0.5.0 - Production on Mon Nov 21 10:52:44 2011

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

connected to target database: OR1 (DBID=2981456125)
using target database control file instead of recovery catalog

RMAN>

Pode-se conectar com ou sem catálogo. Recomendo em bases de produção a criação de um ambiente com catálogo do rman. Quando se usa nocatalog as informações do backup que estarão disponíveis para restore ficam no próprio control file.


b)Comandos básicos para manutenção ANTES de realização do backup:

RMAN> crosscheck backup;

allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=819 devtype=DISK
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/u02/app/oracle/backup/BkpOR1_DBF_4dms64nl_1_1.bak recid=1158 stamp=767759093
(...)
backup piece handle=/opt/app/oracle/product/10.2.0/db_1/dbs/c-2981456125-20111121-01 recid=1168 stamp=767763370
Crosschecked 11 objects

RMAN> crosscheck archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=819 devtype=DISK
validation succeeded for archived log
archive log filename=/u01/app/oracle/FLASH_RECOVERY_AREA/or1/archivelog/2011_11_20/o1_mf_1_29688_7dlp37ro_.arc recid=8752 stamp=767727828
(...)
archive log filename=/u01/app/oracle/FLASH_RECOVERY_AREA/or1/archivelog/2011_11_21/o1_mf_1_29834_7dnj0w44_.arc recid=8898 stamp=767787144
validation succeeded for archived log
Crosschecked 148 objects

RMAN>

Crosscheck serve para verificar se os arquivos de backup (ou archives) estão disponíveis no disco ainda.


c) Como os arquivos do discos são enviados para fita, posso remover os do dia anterior:

RMAN> delete noprompt backup;
using channel ORA_DISK_1

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
1146    1146    1   1   AVAILABLE   DISK        /u02/app/oracle/backup/BkpSFT_DBF_41ms5b9a_1_1.bak
(...)
1157    1157    1   1   AVAILABLE   DISK        /opt/app/oracle/product/10.2.0/db_1/dbs/c-2981456125-20111120-01
deleted backup piece
backup piece handle=/u02/app/oracle/backup/BkpSFT_DBF_41ms5b9a_1_1.bak recid=1146 stamp=767733034
deleted backup piece
(...)
Deleted 12 objects

RMAN>

d) Realizo o backup full porém, compactado:

RMAN> backup as compressed backupset format '/u02/app/oracle/backup/Bkpor1_DBF_%U.bak' database ;
Starting backup at 21-NOV-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00011 name=+DATA/or1/datafile/or1_indices.272.746038185
input datafile fno=00023 name=+FLASH/or1/datafile/or1_indices.264.755369769
input datafile fno=00019 name=+DATA/or1/datafile/updt.280.746039693
channel ORA_DISK_1: starting piece 1 at 21-NOV-11
channel ORA_DISK_1: finished piece 1 at 21-NOV-11
piece handle=/u02/app/oracle/backup/Bkpor1_DBF_4dms64nl_1_1.bak tag=TAG20111121T022453 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:09:25
channel ORA_DISK_1: starting compressed full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
(...)
Finished backup at 21-NOV-11

Starting Control File and SPFILE Autobackup at 21-NOV-11
piece handle=/opt/app/oracle/product/10.2.0/db_1/dbs/c-2981456125-20111121-00 comment=NONE
Finished Control File and SPFILE Autobackup at 21-NOV-11

RMAN>

e) Faço o delete dos archives anteriores 24 horas atrás:

RMAN> delete noprompt archivelog until time 'sysdate-1';

Pronto. Basta jogar para fita ou outro servidor os arquivos que foram gerados pelo backup. Recomendo também acrescentar os archives nesta cópia.


Basicamente, em ambientes linux/unix, ficaria um script assim já com algumas adições interessantes:

#!/bin/bash
NLS_LANG=american_america.WE8ISO8859P1
ORACLE_SID=or1
ORACLE_BASE=/opt/app/oracle
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin:/opt/app/oracle/product/10.2.0/db_1/bin
ORACLE_HOME=/opt/app/oracle/product/10.2.0/db_1
export NLS_LANG ORACLE_SID ORACLE_BASE ORACLE_HOME PATH

rman target / nocatalog log=/home/oracle/bin/rman.log << EOF
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION ON; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO 20G; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/app/oracle/product/10.2.0/db_1/dbs/snapcf_rm.f'; # default

crosscheck backup;
crosscheck archivelog all;
delete noprompt backup;
delete noprompt archivelog until time 'sysdate-1';
delete noprompt obsolete;
sql 'alter system switch logfile';
sql 'alter system switch logfile';
sql 'alter system switch logfile';
backup as compressed backupset format '/u02/app/oracle/backup/BkpOR1_DBF_%U.bak' database ;
sql 'alter system switch logfile';
sql 'alter system switch logfile';
sql 'alter system switch logfile';
backup format '/u02/app/oracle/backup/BkpOR1_CTL_%U.bak' current controlfile;
quit

EOF

Não se esqueçam de conferir diariamente o sucesso do script olhando no rman.log que será gerado.


Dúvidas ? silverio@siltechconsult.com.br

 
 
 

Posts recentes

Ver tudo

Comments


© 2022 por Siltech Consult

  • LinkedIn
bottom of page