RMAN: Customizando o seu backup
by Rodrigo Almeida on ago.10, 2009, under RMAN
Olá,
Um dos grandes pontos fortes de trabalhar com o Recovery Manager (RMAN) é a possibilidade de alocar uma determinada quantidade de canais necessários no processo de Backup para melhorar o desempenho de I/O durante a tarefa, diminuindo o tempo do backup.
Os administradores de banco de dados (DBA) muitas vezes gostam de utilizar a alocação de canal manual para efetuar o backup e com isso, torna necessário mencionar a cada canal (channel) alocado o caminho que deverá ser gerado o backup set. Como o script abaixo:
run {
allocate channel t1 type disk format '/u02/app/oracle/backup/rman/bkp_%d_%t_%s.rman';
backup current controlfile tag 'BKP_CF';
release channel t1;
}
Perceba que durante a alocação do canal t1, é utilizada a cláusula FORMAT, que posteriormente menciona o caminho e o nome do backupset que será gerado pelo RMAN. Pois bem, se você costuma utilizar 3, 4, 5 ou mais canais, em um único caminho de backup e usando sempre a mesma máscara de nomenclatura de backup set, tornando os scripts frágeis.
Vamos analisar o exemplo e dividir as tarefas e customizar o RMAN, a partir da cláusula FORMAT. Veja:
- Quantidade de canais = 3
- Caminho de Backup = /u02/app/oracle/backup/rman
- Nomenclatura de Backup set = bkp_%d_%t_%s.rman
Sobre a nomenclatura utilizada, segue a explicação:
- bkp_ = Nome inicial dos backupsets gerados, ou seja, definido por mim, é um valor fixo.
- %d = Variável do RMAN para identificar o nome do banco de dados.
- %t = Variável do RMAN para o Time Stamp do backup set.
- %s = Variável do RMAN para identificar a sequência do backup set.
Agora, vamos colocar na prática essa customização.
1°) Logar-se no banco de dados usando o RMAN
[oracle@ORA11G ~]$ rman target /
Recovery Manager: Release 11.1.0.6.0 – Production on Thu Aug 6 10:57:15
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: RADB (DBID=1241100324)
2°) Configura o caminho e nome do backup set no control file
As informações sobre a customização do RMAN será armazenada no control file. Para configurar emita o comando abaixo:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u02/app/oracle/backup/rman/bkp_%d_%t_%s.rman';
new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u02/app/oracle/backup/rman/bkp_%d_%t_%s.rman';
new RMAN configuration parameters are successfully stored
3°) Definir a quantidade de alocação de canal automático
Para definir a quantidade de alocação de canais automáticos, quando executado qualquer script do RMAN para o banco de dados alvo, a estratégia é utilizar o PARALELISMO. E para configurar essa opção, basta executar o passo abaixo:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters are successfully stored
4°) Verifique as configurações alteradas
show all;
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name RADB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/u02/app/oracle/backup/rman/bkp_%d_%t_%s.rman’;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM ‘AES128′; # default
CONFIGURE COMPRESSION ALGORITHM ‘BZIP2′; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/11.1.0/db_1/dbs/snapcf_RADB.f’; # default
5°) Testando o novo script
Agora, veja como ficou o script com as customizações que foram feitas. Em negrito está as novas configurações realizadas para o RMAN.
run {
shutdown immediate;
startup mount;
backup database include current controlfile tag 'BKP_FULL';
alter database open;
}
database closed
database dismounted
Oracle instance shut down
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 644468736 bytes
Fixed Size 1301840 bytes
Variable Size 293601968 bytes
Database Buffers 343932928 bytes
Redo Buffers 5632000 bytes
Starting backup at 06/08/2009 11:26:16
allocated channel: ORA_DISK_1allocated channel: ORA_DISK_2allocated channel: ORA_DISK_3/u02/app/oracle/backup/rman/bkp_RADB_694178799_15.rman tag=BKP_FULL comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:03:16
channel ORA_DISK_3: starting full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_3: starting piece 1 at 06/08/2009 11:30:43
channel ORA_DISK_3: finished piece 1 at 06/08/2009 11:31:23
piece handle=/u02/app/oracle/backup/rman/bkp_RADB_694179009_16.rman tag=BKP_FULL comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:40
channel ORA_DISK_1: finished piece 1 at 06/08/2009 11:34:13
piece handle=/u02/app/oracle/backup/rman/bkp_RADB_694178778_13.rman tag=BKP_FULL comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:07:48
channel ORA_DISK_2: finished piece 1 at 06/08/2009 11:35:04
piece handle=/u02/app/oracle/backup/rman/bkp_RADB_694178786_14.rman tag=BKP_FULL comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:08:30
Finished backup at 06/08/2009 11:35:04
Starting Control File and SPFILE Autobackup at 06/08/2009 11:35:04
piece handle=/u01/app/oracle/flash_recovery_area/RADB/autobackup/2009_08_06/o1_mf_s_694178760_57otk638_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 06/08/2009 11:35:29
database opened
channel ORA_DISK_1: SID=154 device type=DISKchannel ORA_DISK_2: SID=153 device type=DISK
channel ORA_DISK_3: SID=151 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u02/app/oracle/oradata/RADB/system01.dbf
channel ORA_DISK_1: starting piece 1 at 06/08/2009 11:26:26
channel ORA_DISK_2: starting full datafile backup set
channel ORA_DISK_2: specifying datafile(s) in backup set
input datafile file number=00002 name=/u02/app/oracle/oradata/RADB/sysaux01.dbf
input datafile file number=00004 name=/u02/app/oracle/oradata/RADB/users01.dbf
channel ORA_DISK_2: starting piece 1 at 06/08/2009 11:26:34
channel ORA_DISK_3: starting full datafile backup set
channel ORA_DISK_3: specifying datafile(s) in backup set
input datafile file number=00005 name=/u02/app/oracle/oradata/RADB/example01.dbf
input datafile file number=00003 name=/u02/app/oracle/oradata/RADB/undotbs01.dbf
channel ORA_DISK_3: starting piece 1 at 06/08/2009 11:26:47
channel ORA_DISK_3: finished piece 1 at 06/08/2009 11:30:03
piece handle=
PRONTO! Deste modo conseguimos definir regras de backup mais customizadas para cada banco de dados. É válido lembrar que nos exemples realizei os testes de backup diretamente para disco, porém, é possível configurar os mesmos parâmetros para FITA, de acordo com a sua configuração MML no ambiente.
Abraços,











fevereiro 4th, 2010 on 8:47
Olá Claudia,
Tudo bem! Vamos tentar sanar algumas das suas dúvidas:
Mesmo quando se configura o rman para que seja feito backup do controlfile de forma automática (CONFIGURE CONTROLFILE AUTOBACKUP ON;) é preciso executar o comando de cópia do controlfile manunalmente?
R: Não, quando se faz a configuração de cópia automática do Control File, não é necessário realizar a cópia do control file novamente, nos meus scripts, eu sempre utilizo novamente a cópia dos control file pois é para aumentar a segurança e armazenar-los junto os backup sets gerados pelo backup. Apenas para aumentar a segurança e conseguir realizar uma restauração baseando-se na tag BKP_FULL por exemplo. Mas próximas respostas vai entender o motivo.
No seu exemplo vc fez um backup frio com o comando: “backup database include current controlfile tag ‘BKP_FULL’;”. Não bastaria executar o comando “backup database” que o controlfile seria copiado automaticamente para diretório configurado no RMAN?
R: SIM, perfeitamente! Porém, um grande problema que é encontrado na maioria dos ambientes é a seguitne, quando se realiza o backup automático, com o CONTROLFILE AUTOBACKUP ON, ele irá gerar o backup do controlfile para a pasta AUTOBACKUP que está dentro do seu FRA, um problema comum é que as pessoas se esquecem desta pasta e copiam somente a ARCHIVELOG, esquece da ONLINELOG e AUTOBACKUP, com isso, tu pode ter um grande problema na restauração quando usar o comando RESTORE CONTROLFILE FROM AUTOBACKUP; E desta forma, garantimos uma maior segurança ao nosso backup, deixando uma cópia do Control file e spfile junto aos backup sets que serão levados para fita.
E no caso de backup quente? Usuaríamos o mesmo procedimento para fazer backup do controlfile?
R: Claudia, o procedimento pode ser o mesmo, tanto para HOT ou COLD backup, COLD backup é muito mais aconselhável já que irá fazer uma cópia da imagem e poderá ser usado para fazer uma restauração baseado em UPDATE IMAGE, RESTORE DATABASE ou RESTORE VIA PROXY. É bom mencionar para no caso do backup COLD, perceba que eu uso a tag BKP_FULL, justamente para me garantir que eu sei que meus backup sets daquele backup FULL está com a mesma marcação de SCN nos datafiles e no control file, que não terei imprevistos. É a questão da garantia e qualidade. Sem dor de cabeça no futuro.
Meu entendimento era que o RMAN executaria este backup de forma automática, não sendo necessário qualquer outro tipo de linha de comando para efetivar a cópia do controlfile, mas já estou em dúvida se estou fazendo o backup da forma correta.
R: Seu entendimento está correto e perfeito! Não não pode esquecer de levar para FITA ou qualquer outro dispositivo de armazenamento, na pasta que configurou para armazenar os backups sets gerados automáticos, pois, imagina se justamente o disco ou volume que estão seus AUTOBACKUPS dá uma pane ou perca total? Tu deverá recrirar 100% dos caminhos para conseguir usar sem problemas o AUTOBACKUP, ou apenas criar uma máquina rápidamente e usar a opção
Abraços,
Rodrigo Almeida
fevereiro 4th, 2010 on 0:42
Rodrigo,
Vlw pelo artigo, muito esclarecedor.
Ainda estou com dúvidas em relação ao backup do controlfile. Mesmo quando se configura o rman para que seja feito backup do controlfile de forma automática (CONFIGURE CONTROLFILE AUTOBACKUP ON;) é preciso executar o comando de cópia do controlfile manunalmente?
No seu exemplo vc fez um backup frio com o comando: “backup database include current controlfile tag ‘BKP_FULL’;”. Não bastaria executar o comando “backup database” que o controlfile seria copiado automaticamente para diretório configurado no RMAN? E no caso de backup quente? Usuaríamos o mesmo procedimento para fazer backup do controlfile?
Meu entendimento era que o RMAN executaria este backup de forma automática, não sendo necessário qualquer outro tipo de linha de comando para efetivar a cópia do controlfile, mas já estou em dúvida se estou fazendo o backup da forma correta. Qual seria o melhor procedimento para se fazer um hot backup com o menor risco de perda do controlfile?
Desde já agradeço.
novembro 13th, 2009 on 7:55
Aew Rodrigo….
Muito obrigado pela ajuda!!
Abraços.
novembro 8th, 2009 on 0:58
Fala Brunão,
Tudo bem! Tô arrumando esse blog ainda, será o meu blog oficial dentro de poucos dias, todas as atualizações, novos posts e diversas outras coisas serão baseadas nesse blog. Ainda não está sendo publicado, por questão de “arrumar” a casa. =D
Bom, o melhor é tu se programar para o próximo OOW’10, esse com certeza estarei lá.
Abraços,
Rodrigo Almeida
novembro 8th, 2009 on 0:56
Olá Douglas,
Na verdade, se quiser criar políticas de backup de acordo com as suas datas, TAG será apenas uma opção para identificar o backup no catálogo, porém, o que será necessário informar ao catálogo para não expirar após a sua política baseada no RETENTION POLICY. Exemplo:
Se eu quiser um backup anual, poderia fazer deste modo:
RMAN> backup database include current controlfile tag ‘BKP_ANUAL_09′;
RMAN> change backupset tag BKP_ANUAL_09 keep forever nologs;
Deste modo, poderá utilizar o seu backup quando necessário e não expirar de acordo com a política de rentenção.
Abraços,
Rodrigo Almeida
outubro 16th, 2009 on 17:51
Karamba Rodrigão que blog massa, preciso criar um assim pra mim fora do GPO.
Este eu não sabia que você tinha. Ja vou adicionar nos meus favoritos.
Esses dias fui pra Sampa em um apresentação do Oracle11g na Oracle do Brasil, mas so consegui ver o Julio Cesar, os outros como vc, o David e o Portilho não consegui encontrar. Mas fica pra próxima.
Um grande Abraço
Bruno Murassaki
outubro 16th, 2009 on 17:19
Boa Tarde Rodrigo.
Seguinte, surgiu uma dúvida.
Por exemplo, se eu precisasse criar 3 politicas de backup. Uma de semana em semana, outra de mes em mes e outra de Ano em ano, teria como fazer isto? Seria usando tag?
Agradeço desde ja.