quinta-feira, 18 de junho de 2009

Troubleshooting XE – Parte III – Backup / Restore

Continuando a série troubleshooting, nesta terceira parte vou falar sobre Backup / Restore.

Antes, um comentário muito particular:

Acho incrível a comunidade que adota bancos de dados “livres” ainda não ter migrado para o Oracle XE! Não bastasse o XE ser um produto da líder mundial em soluções para bancos de dados, ele ainda conta com uma poderosa ferramenta para backup/Restore muito poderosa: O RMAN (Recovery Manager). O mesmo RMAN presente nas versões pagas do Oracle. Nenhum outro servidor de banco de dados da categoria “livre” oferece coisa semelhante!

Graças ao RMAN, você pode fazer backups “inteligentes” e depois recuperar o backup de forma também “inteligente”, garantindo a mais completa e absoluta integridade dos dados. Os outros servidores de banco de dados da categoria “livre” oferecem também ferramentas de backup. Mas considero muito grosseiras, pois um “restore” implica sempre em perda de dados. Com o RMAN, é possível recuperar um backup e deixar o banco de dados na situação em que se encontrava no exato segundo anterior ao “crash”, graças ao poderoso recurso de “archive log” do Oracle.

O Backup

Fazer um backup no Oracle XE é incrivelmente simples: basta digitar algo como backup!

Como funciona o backup do XE

Quando você instala o XE, o RMAN é instalado também. O RMAN é a ferramenta de backup recomendada pela Oracle. Junto com o RMAN, o XE também instala um script para a realização do backup, de forma simplificada. No windows o script é chamada de backup.bat e no linux é chamado de backup.sh. Este script facilita muito a realização do backup e livra o DBA iniciante de detalhes muito técnicos do RMAN. Claro que, neste caso, você fica limitado às configurações do script.

No windows, backup.bat fica na pasta ORACLE_HOME\bin e no linux, backup.sh fica na pasta ORACLE_HOME/config/scripts.

Para saber onde é ORACLE_HOME, no linux digite echo $ORACLE_HOME e no Windows echo &ORACLE_HOME. Pode ser que no Windows esta variável de ambiente não esteja setada. Então você deverá procurar no arquivo de registro pela chave [HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ KEY_XE] . Nela você poderá ver a variável ORACLE_HOME e o caminho que ela aponta.

O backup no Linux


Para fazer um backup no linux, basta abrir um terminal e abrir uma sessão como o usuário oracle (su – oracle) e digitar

oracle@SuSE111:~> $ORACLE_HOME/config/scripts/backup.sh
Warning: Log archiving (ARCHIVELOG mode) is currently disabled. If you restore the database from this backup, any transactions that take place between this backup and the next backup will be lost. It is recommended that you enable ARCHIVELOG mode before proceeding so that all transactions can be recovered upon restore. See the section 'Enabling ARCHIVELOG Mode...' in the online help for instructions. Backup with log archiving disabled will shut down and restart the database. Are you sure [Y/N]? Y
Backup in progress...
Backup of the database succeeded.
Log file is at /usr/lib/oracle/xe/oxe_backup_current.log.
Press ENTER key to exit
oracle@SuSE111:~>

O backup no Windows

Para fazer um backup no windows, basta abrir um “Prompt de Comando” e digitar

C:\>backup
Warning: Log archiving (ARCHIVELOG mode) is currently disabled. If you restore the database from this backup, any transactions that take place between this backup and the next backup will be lost. It is recommended that you enable ARCHIVELOG mode before proceeding so that all transactions can be recovered upon restore. See the section 'Enabling ARCHIVELOG Mode...' in the online help for instructions. Backup with log archiving disabled will shut down and restart the database. Are you sure [Y/N]? Y

Gerenciador de Recuperação: Release 10.2.0.1.0 - Production on Seg Jun 15 19:52:13 2009

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

Windows XP Version V5.1 Service Pack 3
CPU : 1 - type 586, 1 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:230M/639M, Ph+PgF:160M/602M, VA:2003M/2047M
Starting with debugging turned off

conectado ao banco de dados de destino: XE (DBID=2569805002)

RMAN> set echo on;

(SEGUE-SE UMA INFINIDADE DE INFORMAÇÕES NA TELA!!! ATÉ QUE)

a política de retenção RMAN será aplicada ao comando
a política de retenção RMAN está definida para a redundância 2
utilizando o canal ORA_DISK_1
nenhum backup obsoleto encontrado

Recovery Manager completo.


Onde e como é feito o Backup?!


O backup é feito na pasta XE, que fica dentro da pasta flash_recovery_area.
Esta pasta pode ser localizada dentro do diretório de instalação do XE. Abaixo, sua localização no windows e no linux.

Windows: ORACLE_BASE\app\oracle\flash_recovery_area
Linux: ORACLE_BASE/app/oracle/flash_recovery_area

ORACLE_BASE é uma variável de ambiente, que serve como referência para os aplicativos Oracle. No caso do XE, seu valor aponta para lugares ligeiramente diferentes, dependendo se está instalado no windows ou no linux. Abaixo uma descrição.

ORACLE_BASE:
Windows → C:\OracleXE
Linux → /usr/lib/oracle/xe


O script de backup vai criar e manter sempre dois “sets” de backup. Assim, você poderá fazer um restore para a situação de até dois backups anteriores. Esta “lógica” é mantida dentro das pastas autobackup e backupset. A pasta autobackup armazena algumas informações de cada “set” e a pasta backupset armazena os backups propriamente ditos.

O Restore

Feito o backup, o restore é igualmente simples. Basta digitar algo como restore!

O script de restore encontra-se no mesmo lugar que o script de backup. E tudo o que ele faz é restaurar o banco de dados para a situação em que se encontrava imediatamente antes do último backup. Simples assim!

Para executar o restore, basta fazer o mesmo procedimento que adotado para o backup. Mas desta vez chamando o script restore.bat, no windows ou restore.sh, no linux.

As situações em que um restore se faz necessário são as mais diversas possíveis: varia de um erro de usuário, que apagou inadvertidamente uma série muito grande de dados; até um procedimento incomum, onde alguém apagou uma tabela do banco de dados; e, pior ainda, exclusão acidental de arquivos essenciais para o funcionamento do próprio Oracle XE.

Cuidados adicionais

Um ponto que acho vulnerável no Oracle XE, é o fato de, por default, ele fazer o backup no mesmo disco onde está instalado e ainda dentro de uma pasta hierarquicamente “subordinada” à ele.

Acho recomendável depois de feito o(s) backup(s), copiar estes arquivos para outro lugar. Outro disco, por exemplo, ou para uma midia de DVD regravável. Assim, mesmo que aconteça uma catástrofe no servidor, como perda total do HD ou até da própria máquina, basta instalar o XE novamente, copiar de volta a pasta XE para dentro da pasta flash_recovery_area, e executar um restore.

ARCHIVELOG mode

Os mais atentos observaram e leram o alerta que o script de backup faz, assim que é chamado:

Warning: Log archiving (ARCHIVELOG mode) is currently disabled. If you restore the database from this backup, any transactions that take place between this backup and the next backup will be lost. It is recommended that you enable ARCHIVELOG mode before proceeding so that all transactions can be recovered upon restore. See the section 'Enabling ARCHIVELOG Mode...' in the online help for instructions. Backup with log archiving disabled will shut down and restart the database. Are you sure [Y/N] ?

Primeiro vou explicar o que isto significa!

Simplesmente, o alerta informa que todas as operações realizadas no banco de dados após o último backup serão perdidas na ocasião de um restore. Exemplo:

Você agenda os backups todos os dias, à meia noite. Se durante o dia seguinte acontecer um “crash”, e você precisar recuperar o backup feito na noite anterior, todos as operações realizadas sobre o banco de dados durante o dia estarão perdidas.

Uma forma de contornar isto seria fazer backups intermediários durante o dia: um às 10:00h e outro às 15:00h. Assim, em caso de “crash”, um restore faria perder meio expediente de trabalho, digamos assim. Mas isto tem o inconveniente de ter que parar o banco de dados enquanto durar o backup (alguns segundos, diga-se de passagem).

O que é ARCHIVELOG mode?

Archive log mode ou Modo de Registro de Arquivamento é um dos recursos que fazem do Oracle o melhor servidor de banco de dados do mundo!

Neste modo, em intervalos de tempo regular, todas as operações realizadas no banco de dados são gravadas dentro de arquivos especiais. Assim, em caso de um “crash”, você tem registrado em algum lugar não só a situação em que o banco de dados se encontrava segundos antes do “crash”, mas a situação em que se encontrava ao longo de um tempo determinado, que pode ser segundos, minutos, horas, dias, semanas ou até mesmo meses!

Qual o significado disto?

Simples! Ao ser feito um restore, o RMAN busca nestes arquivos de registro de arquivamento todas as operações que foram realizadas no banco de dados após o backup sendo restaurado e as aplica de volta no banco de dados. Isto quer dizer que mesmo que o backup tenha sido feito dias antes, todas as operações realizadas sobre o banco de dados serão restauradas dos arquivos de registro de arquivamento.

Além disso, se o archivelog mode estiver ativo, você nem precisa restaurar todo um backup por causa de uma simples exclusão ou alteração indevida em uma tabela. Através de comandos apropriados via SQL, você pode olhar o passado do banco de dados; pode restaurar a informação de um campo ou tabela para a situação em que se encontrava no passado; etc.

Mais uma vantagem: com o archivelog ativado, os backups podem ser feitos "on-line", ou seja, não é preciso parar o banco de dados para a realização do backup. As pessoas podem continuar trabalhando sobre o banco de dados, enquanto o backup se processa em background.

Uau! Vamos correndo ativar o archive log...

...calma! Muita calma nesta hora!

Como sempre, tudo tem um preço. Se você não tomar os cuidados necessários, se não estudar o bastante, e se não conhecer certos detalhes do modo de registro de arquivamento, você tornará impraticável o uso do banco de dados! Em poucos minutos, você poderá “explodir” o HD, abarrotando-o de giga bytes e giga bytes de arquivos de log e o servidor irá parar!

ARCHIVELOG é um recurso incrível, mas que precisa de um certo planejamento e cuidado, antes de ser usado. Precisa ver a relação custo/benefício. Se o benefício de poder restaurar o banco de dados para qualquer situação anterior a segundos, em pouco tempo, justificar o custo de ocupar mais espaço em disco e uma dedicação maior para monitoramento do servidor, então faça!

A boa notícia é que está disponível no XE e pode ser habilitado. Mas como o tiro pode sair pela culatra, a Oracle optou em deixar este modo desabilitado por default, no XE.

Para aprender como colocar o XE no ARCHIVELOG mode, leia este outro artigo.

--X--

Nenhum comentário:

Postar um comentário