Posso "liberar e bloquear" um banco de dados Oracle para fazer um backup do sistema de arquivos?

2

Estou usando o ZFS para tirar instantâneos dos contêineres OpenVZ em execução.

Para bancos de dados MySQL, posso usar flush tables with read lock para colocá-los em um & estado bloqueado. Isso colocará os arquivos subjacentes em um estado consistente e manterá as consultas recebidas até que eu conclua as capturas instantâneas, o que leva no máximo alguns segundos.

Aqui está um exemplo de script, sem verificação de erros e outro código de manutenção:

vz_root=/var/lib/vz/root/$veid
mysql_locked=/var/run/mysql_locked

# flush & lock MySQL, touch mysql_locked, and wait until it is removed
vzctl exec $veid mysql -NB <<-EOF &
    flush tables with read lock;
    delimiter ;;
    system touch $mysql_locked
    system while test -e $mysql_locked; do sleep 1; done
    exit
EOF

# wait for the preceding command to touch mysql_locked
while ! test -e $vz_root$mysql_locked; do sleep 1; done

# take a snapshot of the VZ filesystem, while MySQL is being held locked
zfs snapshot zpool/private/$veid@$(date +"%Y-%m-%d_%H:%M")

# unlock MySQL
rm -f $vz_root$mysql_locked

Posso fazer o mesmo para um banco de dados Oracle?

Existe um comando que irá liberar seus tablespaces, colocá-los em um estado consistente, adequado para backup e manter qualquer atividade até que eu o desbloqueie?

Eu prefiro evitar ter que reconfigurar o Oracle para usar o ZFS diretamente como um back-end de armazenamento, porque recipientes simples do OpenVZ me servem muito bem. Na verdade, eu prefiro ter alguma técnica de baixa manutenção, sem qualquer configuração complexa do Oracle, se houver alguma.

    
por Tobia 04.06.2015 / 14:48

1 resposta

0

Não há como impedir que o Oracle funcione. Até os backups são processos não bloqueantes em segundo plano. Use o RMAN para backups (que é reiniciado).

O outro jeito seria usar a abordagem da velha escola.

  • cria controlfile standby para backup (ele criará uma cópia de backup do arquivo de controle do Oracle - tendo algum SCN antigo nele)
  • execute alter database begin backup . Isso NÃO interromperá as operações de E / S contra os arquivos de dados. Apenas o SCN não será escrito neles
  • agora você pode criar um instantâneo.
  • execute alter database end backup
  • Agora você também fez backup de todos os redologs de arquivo gerados pelo banco de dados

A restauração funciona como:

  • copie o arquivo de controle de backup para o lugar certo
  • copiar arquivos de dados (ou usar o instantâneo)
  • tente iniciar o banco de dados. o banco de dados reconhecerá que os SCNs diferem e os arquivos de dados estão em estado inconsistente. Por isso, irá reaplicar todas as alterações dos redologs.
  • então você pode ABRIR o banco de dados

Todo o procedimento é mais complicado e você deve ler algo sobre isso. Existem vários artigos na internet. Isso realmente requer algum conhecimento.

IMHO - seu pedido não faz muito sentido. O MySQL não tem nenhum suporte razoável para backups e as pessoas tendem a ignorar essa limitação por vários hacks. Os bancos de dados comerciais têm suporte nativo embutido para backups e oferecem mais recursos do que o sistema de arquivos ZFS. Por exemplo, você pode achar o PITR (point-in-time-recovery) muito útil. Então, eu realmente recomendo que você use os backups do RMAN para Oracle, especialmente se você não estiver familiarizado com a arquitetura Oracle.

PS: SCN significa número de alteração do sistema. Esse número aumenta sempre que algo é alterado no banco de dados e é gravado em todos os arquivos de dados do Oracle.

PPS: Se você quiser reverter o estado do banco de dados, você pode usar o comando FLASHBACK DATABASE.

    
por 04.06.2015 / 15:36