Estratégia de BACKUP: INCREMENTAL, MINIMIZE TIME, MINIMIZE LOAD, e EXCLUDE TABLESPACE

Acho que BACKUP INCREMENTAL é super valorizado.

Primeiro, é necessário fazer BACKUP FULL todo dia? Talvez até mais do que isso seja necessário. Quanto mais você posterga o FULL, maior será seu RTO (Recovery Time Objective – que é em quanto tempo você coloca o banco no ar após uma recuperação), pois mais RECOVER (que aplica no banco recuperado as alterações que aconteceram no banco original após a execução do BACKUP) será necessário. Da mesma forma, se seu banco de dados possui poucas alterações, talvez até um BACKUP FULL mensal seja suficiente.

Geralmente o BACKUP INCREMENTAL é utilizado como substituto do FULL, e ele aparece com uma conversa mais ou menos assim: “Ah, não dá mais para fazer backup toda noite né? Então vamos fazer FULL no Domingo, e Incremental durante a semana. Pronto.”

Acho isto errado pois o INCREMENTAL não é utilizado no momento do RESTORE, e sim do RECOVER. Ou seja, ele não substitui o FULL, nem de perto.

Bem, o Oracle (e todo banco de dados ACID) já tem um BACKUP INCREMENTAL automático: ele se chama ARCHIVEs.

Quando o cliente me pede “Faça um BACKUP INCREMENTAL”, eu digo apenas, na mesma hora: “Pronto, já fiz.”

O BACKUP INCREMENTAL é um ARCHIVEZÃO.

E quando o INCREMENTAL é vantajoso? Imagine que seu banco de dados tem uma tabela onde uma linha é inserida, e depois alterada, e depois alterada, e depois alterada, e depois alterada, e depois apagada. Nos ARCHIVEs contarão todas as alterações, enquanto no INCREMENTAL constará apenas a última imagem do bloco onde está esta linha, no momento que o backup INCREMENTAL é feito.

E como você sabe se isto acontece no seu banco de dados, se o INCREMENTAL é vantagem ou não? O mais fácil é comparar o volume de ARCHIVEs gerados durante o dia com o INCREMENTAL de um dia. Quanto menor o volume, menor será o tempo de um eventual RECOVER, ou seja, vai reduzir o RTO. E ainda tem a respeito da vantagem do INCREMENTAL Diferencial x Cumulativo…

Para piorar o problema de “vamos fazer INCREMENTAL porque FULL não dá”, o impacto de Leitura do BACKUP INCREMENTAL é o mesmo do FULL, a não ser que seja utilizada a Feature Block Change Tracking (que é exclusiva da Enterprise Edition) – o RMAN precisa ler o banco todo para saber de quais blocos deve fazer backup. Ou seja, o INCREMENTAL pode levar quase o mesmo tempo que o FULL.

Tudo isto posto, eu cuido de um grande banco de dados, onde para manter o RTO necessário, eu preciso de um BACKUP FULL todo dia.

E para conseguir eu preciso aproveitar a janela da noite o máximo possível, e ainda usar o dia, mas aí com o menor impacto possível.

Então no início da janela da noite eu faço o BACKUP das grandes TABLESPACEs.

O comando abaixo avisa o RMAN que ele tem 8 horas, mas deve acabar o mais rápido possível (MINIMIZE TIME).

RMAN> BACKUP DURATION 08:00 PARTIAL MINIMIZE TIME TABLESPACE DEV:SOE;

Starting backup at 02-SEP-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=44 device type=DISK
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00015 name=/u01/app/oracle/oradata/ORCL/DEV/soe01.dbf
channel ORA_DISK_1: starting piece 1 at 02-SEP-19
channel ORA_DISK_1: finished piece 1 at 02-SEP-19
piece handle=/u01/Backup/Database-ORCL___DBID-1537518502___Date-20190902___Set-7318___Piece-1.BKP tag=TAG20190902T084902 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:06
Finished backup at 02-SEP-19

Starting Control File and SPFILE Autobackup at 02-SEP-19
piece handle=/u01/Backup/ControlfileAutoBackup-c-1537518502-20190902-26.BKP comment=NONE
Finished Control File and SPFILE Autobackup at 02-SEP-19

RMAN> BACKUP DURATION 08:00 PARTIAL MINIMIZE TIME TABLESPACE DEV:SHSB;

Starting backup at 02-SEP-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00016 name=/u01/app/oracle/oradata/ORCL/DEV/shsb01.dbf
channel ORA_DISK_1: starting piece 1 at 02-SEP-19
channel ORA_DISK_1: finished piece 1 at 02-SEP-19
piece handle=/u01/Backup/Database-ORCL___DBID-1537518502___Date-20190902___Set-7320___Piece-1.BKP tag=TAG20190902T085057 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
Finished backup at 02-SEP-19

Starting Control File and SPFILE Autobackup at 02-SEP-19
piece handle=/u01/Backup/ControlfileAutoBackup-c-1537518502-20190902-27.BKP comment=NONE
Finished Control File and SPFILE Autobackup at 02-SEP-19

RMAN>

E para fazer BACKUP de tudo menos de uma ou mais TABLESPACEs, estas precisam ser especificadas com o CONFIGURE EXCLUDE.

Veja que antes de executar o CONFIGURE EXCLUDE, não há nada a respeito nas configurações exibidas pelo SHOW ALL, e depois aparecem as TABLESPACEs excluídas.

Como são TABLESPACEs de um PDB, é necessário usar a sintaxe PDB:TABLESPACE. Se não fosse, basta colocar apenas o nome da TABLESPACE.

RMAN> SHOW ALL;

RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/Backup/ControlfileAutoBackup-%F.BKP';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED 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   '/u01/Backup/Database-%d___DBID-%I___Date-%T___Set-%s___Piece-%p.BKP';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.3.0.0/db_1/dbs/snapcf_ORCL.f'; # default

RMAN> CONFIGURE EXCLUDE FOR TABLESPACE DEV:SOE;

Tablespace DEV:SOE will be excluded from future whole database backups
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE EXCLUDE FOR TABLESPACE DEV:SHSB;

Tablespace DEV:SHSB will be excluded from future whole database backups
new RMAN configuration parameters are successfully stored

RMAN> SHOW ALL;

RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/Backup/ControlfileAutoBackup-%F.BKP';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED 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   '/u01/Backup/Database-%d___DBID-%I___Date-%T___Set-%s___Piece-%p.BKP';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE EXCLUDE FOR TABLESPACE 'DEV:SOE';
CONFIGURE EXCLUDE FOR TABLESPACE 'DEV:SHSB';
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.3.0.0/db_1/dbs/snapcf_ORCL.f'; # default

RMAN>

Em seguida (neste ponto já são quase 06 da manhã, e a janela da noite se acabou) é feito o BACKUP do “restante” do banco, mas com o menor impacto possível (MINIMIZE LOAD). Desta forma, o RMAN vai “devagarzinho” fazer o backup do que falta, usando todas as 14 horas que restam até a próxima janela da noite.

RMAN> BACKUP DURATION 14:00 PARTIAL MINIMIZE LOAD DATABASE;

Starting backup at 02-SEP-19
using channel ORA_DISK_1
skipping datafile 2; already backed up 2 time(s)
skipping datafile 4; already backed up 2 time(s)
skipping datafile 6; already backed up 2 time(s)
file 15 is excluded from whole database backup
file 16 is excluded from whole database backup
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00012 name=/u01/app/oracle/oradata/ORCL/DEV/system01.dbf
input datafile file number=00014 name=/u01/app/oracle/oradata/ORCL/DEV/undotbs01.dbf
input datafile file number=00013 name=/u01/app/oracle/oradata/ORCL/DEV/sysaux01.dbf
channel ORA_DISK_1: starting piece 1 at 02-SEP-19
channel ORA_DISK_1: finished piece 1 at 02-SEP-19
piece handle=/u01/Backup/Database-ORCL___DBID-1537518502___Date-20190902___Set-7324___Piece-1.BKP tag=TAG20190902T091109 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:03:55
channel ORA_DISK_1: throttle time: 0:02:44
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00003 name=/u01/app/oracle/oradata/ORCL/sysaux01.dbf
input datafile file number=00001 name=/u01/app/oracle/oradata/ORCL/system01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/ORCL/undotbs01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_DISK_1: starting piece 1 at 02-SEP-19
channel ORA_DISK_1: finished piece 1 at 02-SEP-19
piece handle=/u01/Backup/Database-ORCL___DBID-1537518502___Date-20190902___Set-7325___Piece-1.BKP tag=TAG20190902T091109 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:03:35
channel ORA_DISK_1: throttle time: 0:02:29
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00009 name=/u01/app/oracle/oradata/ORCL/CATALOGO/sysaux01.dbf
input datafile file number=00010 name=/u01/app/oracle/oradata/ORCL/CATALOGO/undotbs01.dbf
input datafile file number=00008 name=/u01/app/oracle/oradata/ORCL/CATALOGO/system01.dbf
input datafile file number=00033 name=/u01/app/oracle/oradata/ORCL/CATALOGO/tbs_catalogo_01.dbf
input datafile file number=00011 name=/u01/app/oracle/oradata/ORCL/CATALOGO/users01.dbf
channel ORA_DISK_1: starting piece 1 at 02-SEP-19
channel ORA_DISK_1: finished piece 1 at 02-SEP-19
piece handle=/u01/Backup/Database-ORCL___DBID-1537518502___Date-20190902___Set-7328___Piece-1.BKP tag=TAG20190902T091109 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:05
channel ORA_DISK_1: throttle time: 0:01:30
Finished backup at 02-SEP-19

Starting Control File and SPFILE Autobackup at 02-SEP-19
piece handle=/u01/Backup/ControlfileAutoBackup-c-1537518502-20190902-2a.BKP comment=NONE
Finished Control File and SPFILE Autobackup at 02-SEP-19

RMAN>

Durante o backup “devagar”, se você olhar as WAITs do seu banco de dados, às vezes verá essa abaixo. É quando o RMAN está “dando um tempo”.

09:20:19 SYS@ORCL> SELECT SID, EVENT, SECONDS_IN_WAIT FROM V$SESSION_wAIT WHERE WAIT_CLASS != 'Idle';

       SID EVENT                                                            SECONDS_IN_WAIT
---------- ---------------------------------------------------------------- ---------------
        44 Backup Restore Throttle sleep                                                  0

Decorreram: 00:00:00.01
09:20:37 SYS@ORCL>

E para remover o EXCLUDE, se a estratégia de BACKUP mudar:

RMAN> CONFIGURE EXCLUDE FOR TABLESPACE DEV:SOE CLEAR;

Tablespace DEV:SOE will be included in future whole database backups
old RMAN configuration parameters are successfully deleted

RMAN> CONFIGURE EXCLUDE FOR TABLESPACE DEV:SHSB CLEAR;

Tablespace DEV:SHSB will be included in future whole database backups
old RMAN configuration parameters are successfully deleted

RMAN>

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.