Mostrando postagens com marcador Backup. Mostrar todas as postagens
Mostrando postagens com marcador Backup. Mostrar todas as postagens

terça-feira, 4 de fevereiro de 2025

[ORACLE] Useful scripts for the day-to-day life of a DBA (Part 1) - RMAN & SGA

Hello all 
 
Hope you're doing well!

I've created repository at GITHUB and I'm going to start sharing some scripts that I like to make and that help me in my day-to-day life as a DBA.
 

But some considerations are important:
  1. Some scripts are a compilation of several other scripts I've created.
  2. Some scripts are based on and adapted from existing scripts. Those that I found reference to the author I obviously identify in the script.
  3. So, if there's a script that you're the author of and I've adapted to my reality and it's not mentioned, please let me know and I'll be happy to reference it.
  4. Because they're my scripts, they have my logic and help me in my day-to-day work, it doesn't mean that they're the best or that they're always the most refined and concerned with good practices. They can help you, but that's all.
  5.  Feel free to make changes, but please keep the reference to the authors.
  6.  If you find any mistakes, please let me know.
The first scripts are for monitoring RMAN and one that combines various Advisors' results to suggest SGA tuning.

Remember that these are scripts that you can use and change at your own risk. They help me a lot, but may not be as functional for you.
 
 
Feel free to download and use.

Regards
Mario Barduchi

quinta-feira, 1 de setembro de 2022

Você sabe o que é o Block Change Tracking?

Fala pessoal, beleza?

Tenho falado com vários DBA's sobre backup's e políticas de melhores práticas e quase 100% deles tem comentado sobre a dificuldade em cumprir as janelas definidas já que temos bancos cada dia mais enormes.

E percebi que quase todos eles não usam uma opção muito legal que se chama Block Change Tracking (ou BCT) para os mais chegados, que poderia ajudar bastante nessa tarefa.

Basicamente e muito resumidamente falando, mesmo quando você faz um backup incremental, o Oracle precisa percorrer todos os blocos dos seus datafiles - sejam eles novos ou não, para saber o que foi alterado desde o último backup e inserir esses blocos em seus backup pieces.

É ai que mora a beleza do BCT. 

Se o BCT estiver ativo na sua produção ou em um StandBy físico, o Oracle vai registrar bitmaps que marcam as alterações nos datafiles entre os backups. Ele vai criar um índice (ou um arquivo de rastreamento como o próprio nome já diz) e vai registrar todos os blocos alterados ali. 

O RMAN então usará este rastreamento para identificar esses blocos alterados na execução dos backups incrementais, salvando muito tempo nessa operação e evitando a necessidade de leitura de todos os blocos dos datafiles.



O mais bacana é que o uso do BCT não altera os comandos usados ​​para realizar os backups incrementais. Além disso o BCT file não requer manutenção após a configuração inicial.

Outro ponto legal demais é que o DBA não precisa se preocupar com o gerenciamento desse arquivo. O Oracle gerencia automaticamente o espaço no BCT. 

Aqui temos um ponto de atenção quanto a retenção, como destacado no exemplo dado no manual:

É importante considerar o limite de oito bitmaps na sua estratégia de backup incremental. Por exemplo, se você fizer um backup nível 0 seguido por sete backups incrementais diferenciais, o BCT file chegará a 8 bitmaps. O próximo backup irá descartar o bitmap mais antigo

Então, se você fizer um backup incremental de nível 1 cumulativo na próxima operação, o RMAN não poderá otimizar o backup, porque o bitmap correspondente ao backup nível 0 será substituído. Então ess eé um ponto de atenção.


Para criar um BCT é mega fácil:

    SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+BCT/BCTrk.F'; 

Abaixo eu deixo 3 pontos ue devem ser considerados antes de adotar o que eu falei acima:

   1) Se você não passar onde o BCT deve ser criado, por default ele será inciado no DB_CREATE_FILE_DEST.

   2) Eu sempre crio um DG exclusivo para o BCT. Devido a ele ter uma gravação intensa, ele pode afetar a performance do banco de dados caso você o coloque juntamente com a área de FRA, por exemplo. Ou no seu DG de Redos.

   3) Infelizmente você só pode habilitar o BCT em um StandBy físico se você possuir a licença do Active Data Guard. 

Claro, antes de sair habilitando quaquer coisa em seu banco de dados, por favor, teste muito bem e veja se é adequado a seu ambiente. 

"Lembre-se que o que é bom para o meu ambiente pode não ser bom para o seu." - By Ricardo Portilho Proni

É ou não é show? Você acha que seu backup vai ser mais rápido com isso?

Mais informações aqui:

Backup and Recovery User's Guide

2 Day DBA

Grande abraço e espero que tenha ajudado.

Mario




sexta-feira, 27 de maio de 2022

DD Boost for Oracle

 Fala pessoal, beleza?

Coloquei mais um vídeo lá no canal.

Nesse vídeo vou falar como o DD Boost funciona e qual a diferença de uso dessa feature para uma Deduplicação típica.

O que vc vai ver por lá:

 - O que é o DD Boost e como ele funciona. 

O que você não vai ver lá:

 - Deep Dive técnico sobre o PowerProtect.

 - Recomendações para políticas de proteção de dados.

Lembrando que são apenas sugestões e que qualquer alteração de ambientes devem ser testadas e validadas pelo seu time.

Se quiserem conferir, fiquem a vontade!!!

Só clicar: O-Tips - DD Boost with PowerProtect

Qualquer dúvida, crítica ou sugestão será muito bem vinda!!!

Abraço

Mario


segunda-feira, 10 de outubro de 2016

Duplicate sem acessar o Target e o Catalog

Olá pessoal.

Manja quando te pedem para criar uma base nova para desenvolvimento, simulação, etc. Tranquilo.

Vamos fazer um duplicate e resolvemos o assunto, certo? 

Só que o cara da infra fala que o duplicate não vai ser possível (nem o "comum", nem o active) já que o processo vai trafegar muitos dados pela rede, e o backup fica em uma rede separada e vai sentar o link se fizer, e blá blá blá.

Ok, então vamos copiar o backup para a máquina de destino, e fazemos um restore pensa o pequeno gafanhoto, nosso DBA. 

Opa um restore também complica, poque essa máquina é usada para um DataGuard do cliente, e ele já tem uma base chamada "BANCO49" lá, que é o mesmo nome claro da sua base de produção.

Claro, poderíamos usar um workaround (nome bonito né) e colocar o nosso DB_UNIQUE_NAME com o nome da nossa nova base e manter o DB_NAME com o nome original para "burlar" a restrição dos nomes.

Porém isso não é recomendável e não é legal também. Para resolver esse problema, desde a versão 11g temos uma alternativa legal e que nem todo mundo conhece. 

Podemos fazer um duplicate sem acessar o target.

No note "RMAN 11GR2 : DUPLICATE Without Target And Recovery Catalog Connection (Doc ID 874352.1)" temos o procedimento descrito que é muito simples e eu descrevo abaixo para vocês, com alguns acertos feitos por mim.

Na verdade o procedimento é o mesmo de uma duplicate comum, com apenas alguns acertos.

1) Os backuppieces devem ser copiados para a máquina de destino. No nosso exemplo, irei copiar para "/nfbackup/rman/BANCO49".

2) O procedimento funciona com o "DB_FILE_NAME_CONVERT", porém eu gosto de ter um pouco mais de controle sobre o processo, por isso eu uso o "SET NEWNAME".

3) Podemos usar o OMF (Oracle Managed Files) para definição dos locais dos datafiles. Eu particularmente gosto disso e uso sempre o "SET NEWNAME TO NEW". Sendo assim, devemos configurar:
*.db_create_file_dest                 = '/BANCO49/oradata/banco49/'
*.db_create_online_log_dest_1 = '/BANCO49/oradata/banco49/'
*.db_create_online_log_dest_2 = '/BANCO49/oradata/banco49/'

4) Todos os outros procedimentos para o duplicate de uma base comum devem ser observados.

Tudo isso pronto, vamos ao duplicate. Só que antes, mais algumas observações importantes:

1) Repare que iremos nos conectar somente a base auxiliar ("rman AUXILIARY /").
2) Podemos alocar quantos canais precisarmos, mas não esqueça somente no EE.
3) Esse duplicate somente funciona com o "UNTIL TIME".
4) O comando de duplicate também é um pouquinho diferente. 
5) O pulo do gato está na cláusula "BACKUP LOCATION '/local/do/backup' "

Todas as mudanças estão listadas abaixo.

rman AUXILIARY / << EOF
RUN
{
ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK
                FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux2 DEVICE TYPE DISK
                FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux3 DEVICE TYPE DISK
                FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
ALLOCATE AUXILIARY CHANNEL aux4 DEVICE TYPE DISK
                FORMAT '/nfbackup/rman/BANCO49/%d_%Y%M%D_%U.dat';
set newname for datafile 1 to new;
set newname for datafile 2 to new;
set newname for datafile 3 to new;
set newname for datafile 4 to new;
set newname for datafile 5 to new;
set newname for datafile 6 to new;
set newname for datafile 7 to new;
set newname for tempfile 1 to new;
set newname for tempfile 2 to new;
DUPLICATE DATABASE TO banco49
UNTIL TIME "TO_DATE('02/10/2016 10:00:00','DD/MM/YYYY HH24:MI:SS')"
LOGFILE
GROUP 1 ('/BANCO49/oradata/sml49/redo01.log') SIZE 300M REUSE,
GROUP 2 ('/BANCO49/oradata/sml49/redo02.log') SIZE 300M REUSE,
GROUP 3 ('/BANCO49/oradata/sml49/redo03.log') SIZE 300M REUSE
BACKUP LOCATION '/nfbackup/rman/BANCO49';
}
EXIT;
EOF

É isso, agora basta criar um arquivo dup.sh e deixar rodando em nohup.

Pode parecer besteira, mas já quebrou alguns galhos....

Grande abraço.
Mario

quinta-feira, 20 de junho de 2013

Backup RMAN - Alguns scripts

Boa tarde jovens.

Vou postar aqui um script de backup (e suas variações) que está mais que testado e que me ajuda bastante quando preciso fazer algo rápido e manual.

==================
-- Backup
==================
rman target / << EOF
run {
    allocate channel d1 type disk MAXPIECESIZE 8G;
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    SQL 'ALTER SYSTEM CHECKPOINT';
    backup AS COMPRESSED BACKUPSET format '/backups/PROD/%d_%Y%M%D_%I_%s_%U.dat' database;
    sql 'alter system archive log current';
    backup AS COMPRESSED BACKUPSET format '/backups/PROD/%d_%Y%M%D_%I_%s_%U.dat' archivelog all;
    release channel d1;
}
exit;
EOF


==================
-- Backup deletando archives e backupsets
==================
rman target / <

run {
    allocate channel d1 type disk MAXPIECESIZE 8G;
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    SQL 'ALTER SYSTEM CHECKPOINT';
    backup AS COMPRESSED BACKUPSET format '/backups/PROD/%d_%Y%M%D_%I_%s_%U.dat' database;
    sql 'alter system archive log current';
    backup AS COMPRESSED BACKUPSET format '/backups/PROD/%d_%Y%M%D_%I_%s_%U.dat' archivelog all;
    DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-5';
    DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;
    release channel d1;
}
exit;
EOF

========================
-- Backup somente de archives
========================
rman target / <

run {
    allocate channel d1 type disk MAXPIECESIZE 8G;
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    SQL 'ALTER SYSTEM CHECKPOINT';
    backup AS COMPRESSED BACKUPSET format '/backups/PROD/%d_%Y%M%D_%I_%s_%U.dat' archivelog all;
    release channel d1;
}
exit;
EOF

Simples e objetivo caso precise rodar algo manualmente.

Abraço
Mario

Formatação de nome de backuppieces do RMAN

Olá pessoal.

Mais uma da séria "Vou postar aqui para não precisar pesquisar depois".

Strings utilizadas para identificar um backuppeace no RMAN.

Syntax:
  %c  The copy number of the backup piece within a set of duplexed backup pieces. If you did not duplex a backup, then this variable is 1 for backup sets and 0 for proxy copies. If one of these commands is enabled, then the variable shows the copy number. The maximum value for %c is 256.

  %d  The name of the database.

  %D  The current day of the month (in format DD)

  %F  Combination of DBID, day, month, year, and sequence into a unique and repeatable generated name.

  %M  The month (format MM)

  %n  The name of the database, padded on the right with x characters to a total length of eight characters. (AKA: Porn star alias name). For example, if the scott is the database name, %n= scottxxx.

  %p  The piece number within the backup set. This value starts at 1 for each backup set and is incremented by 1 as each backup piece is created. Note: If you specify PROXY, then the %p variable must be included in the FORMAT string either explicitly or implicitly within %U.

  %s  The backup set number. This number is a counter in the control file that is incremented for each backup set. The counter value starts at 1 and is unique for the lifetime of the control file. If you restore a backup         control file, then duplicate values can result. Also, CREATE CONTROLFILE initializes the counter back to 1.

  %t  The backup set time stamp, which is a 4-byte value derived as the number of seconds elapsed since a fixed reference time. The combination of %s and %t can be used to form a unique name for  the backup set.

  %T  The year, month, and day (YYYYMMDD)

  %u  An 8-character name constituted by compressed representations of the backup set number and the time the backup set was created.

  %U  A convenient shorthand for %u_%p_%c that guarantees uniqueness in generated backup filenames.
      If you do not specify a format, RMAN uses %U by default.

  %Y  The year (YYYY)

  %%  Specifies the '%' character. e.g. %%Y translates to %Y.

Eu geralmente utilizo: %d_%Y%M%D_%I_%s_%U.rman

Abraço
Mario

Postagem em destaque

[ORACLE] Useful scripts for the day-to-day life of a DBA (Part 3) - System metrics

Hello everyone.   Hope you're doing well! As I said here , I've created a repository on GITHUB to share some scripts that I like t...