Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Sistema completo para Backup/Restore com Firebird - Parte II

Veja como implementar no seu sistema a opção para a execução de backup/restore sem a necessidade de usar um programa de terceiro.

Sistema completo para Backup/Restore com Firebird

Parte II - Restore

Na primeira parte deste artigo (http://www.devmedia.com.br/articles/viewcomp.asp?comp=4885), você viu como usar o componente TIBBackupService para criar uma aplicação com a opção de fazer o backup internamente sem a necessidade de usar um segundo programa para isso.

O que eu mostrarei agora, é como executar o restore do backup que a sua aplicação criou. O componente a ser usado agora é TIBRestoreService que também é nativo do Delphi 7 e pode ser encontrado na paleta interbase admin. A codificação não muda muito, veja.

 

procedure TFRestaurarBackup.BTRestaurarBackupClick(Sender: TObject);
begin
  try
    if not OpenDialog1.Execute then//se não selecionar o arquivo de backup
      Exit;                        //cancela o procedimento
    Memo1.Clear;
    BTRestaurarBackup.Enabled:=False;
    Memo1.Lines.Add('Preparando para restaurar o backup...');
    Memo1.Lines.Add('');

    with IBRestoreService1 do
    begin
      DMBanco.IBDB.Connected:=False;//desconecta da base
      DatabaseName.Clear;
      DatabaseName.Add(FPrincipal.EBase.Text);//caminho da base
      ServerName:=FPrincipal.EServ.Text;//nome do servidor
      BackupFile.Clear;
      BackupFile.Add(OpenDialog1.FileName);//caminho do arquivo de backup
      Protocol:=TCP;//protocolo de conexão
      Params.Clear;
      Params.Add('user_name=SYSDBA');//nome de usuário
      Params.Add('password=masterkey');//senha do usuário

      Options:=[];
      Options:=[CreateNewDB];

      {o bloco de if abaixo esta adicionando as opções de restauração de acordo com o que o usuário escolheu. Após esta listagem você encontra um link para um outro artigo onde você encontra mais informações sobre essas e outras opções de restauração}
      if CBDesativarIndices.Checked then
        Options:=Options+[DeactivateIndexes];
      if CBSemShadow.Checked then
        Options:=Options+[NoShadow];
      if CBSemValidar.Checked then
        Options:=Options+[NoValidityCheck];
      if CBUmaTabela.Checked then
        Options:=Options+[OneRelationAtATime];
      if CBSubstituir.Checked then
        Options:=Options+[Replace];

      {a propriedade verbose do TIBRestoreService especifica
      se durante o processo de restauração será retornado para a
      aplicação o detalhamento da execução}
      Verbose:=CBDetalhes.Checked;

      Memo1.Lines.Add('  Desativar indices: '+BoolToStr(CBDesativarIndices.Checked));
      Memo1.Lines.Add('  Restaurar arquivo espelho: '+BoolToStr(not CBSemShadow.Checked));
      Memo1.Lines.Add('  Validar regras de integridade: '+BoolToStr(not CBSemValidar.Checked));
      Memo1.Lines.Add('  Restaurar uma tabela por vez: '+BoolToStr(CBUmaTabela.Checked));
      Memo1.Lines.Add('  Nome do servidor: '+ServerName);
      Memo1.Lines.Add('');
      Active:=True;//ativa o servico de restauração, mais ainda nao inicia.
      Memo1.Lines.Add('');
      Memo1.Lines.Add('/***INICIO***\');
      Application.ProcessMessages;
      Memo1.Lines.Add('');

      try
        ServiceStart;//inicia o restore
        while not Eof do
        begin

          {assim como no backup, conforme a restauração vai sendo executada os detalhes da execução podem ser lidos através da função GetNextLine}
          Memo1.Lines.Add(GetNextLine);
        end;
      finally
      end;
      Active:=False;//desativa o serviço de restore
      Memo1.Lines.Add('');
      Memo1.Lines.Add('/****FIM****\');
   
end;
    Memo1.Lines.Add(''); Memo1.Lines.Add('');
    Memo1.Lines.Add('Backup restaurado com sucesso.');
    DMBanco.IBDB.Connected:=True;//conecta o sistema na base de dados
    BTRestaurarBackup.Enabled:=True;
  except
    on E: Exception do
    begin
      Memo1.Lines.Add('Ocorreu um erro inesperado. O restore não foi concluído.');
      Memo1.Lines.Add('Informações da exceção:');
      Memo1.Lines.Add('  '+E.Message);
      DMBanco.IBDB.Connected:=True;//conecta o sistema na base de dados

      BTRestaurarBackup.Enabled:=True;
    end;

  end;

end;

Listagem 1 – Restaurando o backup da base de dados

Você pode obter mais informações sobre o que são todas as opções de restauração utilizadas neste artigo e também as opções de backup, neste artigo: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4877.

No arquivo de download você vai encontrar o exemplo completo incluindo o backup, feito na primeira parte do artigo.

Você viu que não há segredos para a execução de backup/restore. A codificação é simples e você ainda pode dar mais garantia de segurança para o seu cliente.





    2 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Diogo Moraes Antunes
Bom dia,
Baixei os fontes para realização do backup e identifiquei o mesmo erro que tenho aqui no meu projeto.
Quando faço o backup de uma base de dados em um servidor salvando o fbk em um terminal, este bakup não salva.
E não da nenhum erro, simplismente não salva o arquivo.

Vocês ja viram isso acontecer?
Tem alguma Solução?

Sds

Diogo


em 4/10/2011 09:44 - Responder

 

[Comentário do autor]   Rafael Stavarengo
Diogo,
Usar a API de serviços, como foi feito neste post, tem uma grande desvantagem: você não consegue salvar o FBK na máquina que executou o backup. Com a API de serviços o arquivo FBK sempre será salvo na máquina onde o banco de dados está, ou seja, no servidor.

Por tanto ao definir o caminho de origem do arquivo FBK você deve definir um caminho que exista no servidor, pois o FBK será salvo lá.

Leia este artigo para saber como criar backups cujo FBK pode ser salvo em qualquer máquina: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4877


em 5/10/2011 07:39 - Responder
 



[Este post ainda não foi associado a uma sequência]
Autor
Rafael Stavarengo

Programador de sistemas da Cheina Informática com 9 anos de experiência, integrante da equipe editorial da revista Clube Delphi. Domínio em Java, PHP e UML. Sólido conhecimento em Design Patterns e metodologias ágeis. Graduado em Análise e Desenvolvimento de Sistemas pela UNIPAR. Blog: http://stava...


Space do autor
Estatísticas #
Favorito:
Comentários:
Feedback:
Utilidade:
3   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03