Olá terrestres. Neste artigo, vamos montar um esquema de backup de uma base de dados FireBird.
Backup sempre foi uma preocupação tanto da parte do desenvolvedor, quanto da parte do usuário.
Claro que nem sempre o usuário se preocupa em fazer backup, mas sempre o sistema é o culpado, se um dia, o banco corromper, não é verdade?
Então, vamos aprender como implementar um recurso de backup, simples, usando o FireDac.
Existem diversas maneiras. Alguns preferem usar o aplicativo WinRar, para este função, no qual, simplesmente, gera um arquivo compactado com o banco de dados. Outros somente fazem uma cópia da base de dados para um determinado local. E outros, geram o arquivo de backup que os próprios SGBDs oferecem. No caso do FireBird, o famoso "FBK".
Neste exemplo, trabalharemos com a geração do arquivo "FBK" que o próprio FireBird oferece, usando alguns componentes da paleta FireDac.
Com base neste exemplo, você poderá incrementar mais recursos, como por exemplo, opção de compactar, agendamentos, etc.
Crie um novo projeto em Delphi e adicione os componentes: FDIBBackup, FDPhysFBDriverLink, FDGUIxWaitCursor, Memo (name = mmoProgresso) e dois Button (name btnIniciar, btnFechar).
Selecione o componente FDIBBackup e ligue na propriedade "DriverLink" o componente FDPhysFBDriverLink.
Tente montar um layout parecido com este:
Obs: o componente ImageList (imgs16x16) está sendo utilizado apenas como repositório das imagens que estão sendo usadas nos botões.
Agora, vamos para as implementações. Declare os seguintes métodos na seção "Private" do formulário:
Vamos implementar primeiro o método "HabilitarBotoes", segue a implementação:
A única coisa que fazemos neste método, é atribuir para a propriedade "Enabled" dos botões o parâmetro da função, que por padrão é "True" conforme especificamos na declaração do método.
Este método será útil quando for iniciado o processo do backup, desabilitaremos os botões, e só habilitaremos novamente, no final do processo, ou caso, der erro e o processo não for concluído.
Agora, vamos implementar o método "GerarBackup". Segue implementação:
Neste método, toda implementação ficará dentro de um bloco de tratamento (try...except), caso ocorrer algum erro durante o processo, simplesmente emitiremos uma mensagem para o usuário.
No início do método, desabilitamos os botões, conforme dito anteriormente.
Alimentamos as propriedades do componente FDIBBackup, que dispensa comentários, visto que, na imagem acima, já está explicando o que significa cada propriedade.
Após chamar o método "Backup" do componente, o processo verdadeiramente se inicia. Se ocorrer tudo bem, uma mensagem é exibida para o usuário, informando que deu tudo certo, e em seguida, volta habilitar os botões. Como por padrão definimos no método "HabilitarBotoes" que seu valor é "True", por este motivo, não passamos nenhum valor para o parâmetro neste ponto do método.
Se por acaso, ocorrer algum erro, o método entrará no bloco de exceção, onde habilitamos os botões e mandamos uma mensagem de erro para o usuário, inclusive, com a mensagem capturada pela classe de exceção do bloco "Try...except".
Simples, prático e objetivo. Desta forma, temos o nosso backup, pronto, implementado. Porém, seria interessante, acompanharmos o processo não?
É exatamente por isso que colocamos um "memo" no projeto. Ele mostrará cada processo realizado.
Para isso, selecione o "memo" e na propriedade "ScrollBars", selecione a opção "ssVertical".
Legal, agora, vá até o evento "OnProgress" do componente "FDIBBackup" e implemente-o da seguinte forma:
A única coisa que fazemos é adicionar no "memo", as linhas de mensagens retornadas pelo serviço de backup do banco. Desta forma, conseguiremos visualizar o processo que está sendo realizado.
Ufa, chegamos ao fim deste artigo, ficou um tanto massante, porém, não tem como ficar com dúvida né? Mas se tiver dúvida, deixe seu comentário que ajudaremos com todo prazer.
Muito bem, agora basta chamar o método no botão. Para isso, de um duplo clique sobre o botão "Iniciar" e chame o método "GerarBackup", e no botão "Fechar", chame o comando "Close", conforme mostra a imagem:
Muito bem gente, algumas dicas que você pode incrementar, é que antes de começão o processo, você pode adicionar uma linha ao "memo" informando que o processo de backup está iniciando, e no final, outra linha informando que o backup foi concluído com sucesso, ou com o erro. Isso poderia substituir as mensagens que exibimos. Também é interessante trabalhar em cima do nome do arquivo de backup, colocando data e hora por exemplo. Fica a critério. Vocês são livres para personalizar da maneira que lhe convém. Abraços e até o próximo.
Download
- Download do código fonte do projeto;
Download
- Download do código fonte do projeto;
(Por ClipaTec Informática)
É possível construir as modificações para o bd MySQL?
ResponderExcluirSim. Só que você teria que trocar o componente "FDPhysFBDriverLink" pelo "FDPhysMySQLDriverLink". Abraço.
ExcluirComo poderia substituir o memo por um TGauge?
ResponderExcluirCremos que sim rsrsrs, só que não temos uma solução para isso ainda. Mas vamos procurar, e postaremos se encontrarmos. Abraço.
ExcluirOla, tudo bem? Para usar o MySQL, tentei fazer o q vcs sugeriram: "Sim. Só que você teria que trocar o componente "FDPhysFBDriverLink" pelo "FDPhysMySQLDriverLink". Abraço." porém não deu certo... APontei o DriverLink para este do MySQL mas diz que é Incompatível. Busquei no google e não achei nada a respeito. Obrigado.
ResponderExcluirCerto. Você tem o MySQL instalado? Vamos fazer um teste aqui também e postaremos o resultado. Abraço.
ExcluirOla. Quer dizer se tenho instalado no PC? Sim, mas seria o acesso a uma base MySQL online... O estranho é que o DriverLink não permite o apontamento para o componente FDPhysMySQLDriverLink. O pior é que na Web não encontro nada sobre isso...
ResponderExcluirOlá, quais são os componentes para quem usa o SQL Server?
ResponderExcluirAo invés de usar o componente "FDPhysFBDriverLink", use o "FDPhysMSSQLDriverLink", que é referente ao driver do SQL Server. Abraço.
ExcluirDesculpe, Mas acredito que você não tenha testado o comando com o Mysql.
ResponderExcluirPois os componentes de backup disponibilizados pelo Firedac não são compatíveis com o Mysql.
Em nenhum dos componentes de backup reconhece o link do Mysql.
Se alguém conseguiu me passa como pois nos meus testes não tive sucesso.
Não fizemos testes com o MySQL, porque trabalhamos com o FireBird, mas vamos tentar fazer alguns testes. Abraço.
ExcluirFiz o teste aqui e deu certo. O único probleminha é que eu faço o back-up a partir de um terminal e quero que o arquivo de back-up fique no terminal. Mas, está sendo gerado lá no servidor. Alguém já passou por isso? Se alguém souber o problema, me dá um toque. Obrigado!
ResponderExcluirMesmo passando um diretório local ele está gerando em outro?
ExcluirFiz o teste aqui e deu certo. O único probleminha é que eu faço o back-up a partir de um terminal e quero que o arquivo de back-up fique no terminal. Mas, está sendo gerado lá no servidor. Alguém já passou por isso? Se alguém souber o problema, me dá um toque. Obrigado!
ResponderExcluirNo caso sua função está implementada no servidor e você apenas a chama pelo client?
ResponderExcluire como restaurar
ResponderExcluirBom dia amigo, segue o link: http://www.clipatecinformatica.com.br/2016/10/restore-base-dados-delphi-firedac.html
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirNa rede não funcionou...
ResponderExcluirFDIBBackup1.Host := '192.168.25.178'; // local do servidor da base de dados
FDIBBackup1.Protocol := ipTCPIP; // protocolo de conexao com a base de dados
e não consegue conectar... alguma solução ?
Qual erro ocorre?
ExcluirRealmente não rede não funciona, dá erro como se o arquivo de destino não existisse...
Excluir---------------------------
Debugger Exception Notification
---------------------------
Project Sync.exe raised exception class EIBNativeException with message '[FireDAC][Phys][FB]cannot open backup file @1'.
---------------------------
Bom dia, realmente na rede não está funcionando... Configurei o host, mudei para TCP/ip. Dá a mensagem: [FireDAC][Phys][FB]cannot open backup file @1. Teria alguma dica? Obrigado.
ExcluirVocê está passando a extensão do arquivo juntamente com o nome?
Excluirdeu certo so que ele pega mesmo tamanho da base quando faz o bpk nao deveria ficar menor ?
ResponderExcluirachei ele criava um arquivo menor ou tem fazer algo.. porque quando uso o Gbak fica bem menor
Excluirou estou faltando mudar algo no componente
ExcluirVamos fazer alguns testes aqui pra verificar isso. Abraço.
ExcluirCaso dê erro para fazer o backup local... só mudar de ipTCPIP para ipLocal...
ResponderExcluirAconteceu comigo hehe.
Obrigado pela dica amigo. Abraço.
ExcluirQuando faço o backup a primeira vez da certo, mas se eu manter o programa aberto e executar novamente da um "Access Violation". O que fazer?
ResponderExcluirOlá Adailton, já vamos fazer alguns testes aqui e postaremos o resultado e como resolver este problema o mais rápido possível. Abraço.
ExcluirQuando executo a primeira vez funciona direitinho, mas se manter o programa aberto e tentar gerar novamente, da um erro de "Access Violation". Como resolver?
ResponderExcluirOlá amigo, fizemos os testes, não tivemos ocorrência de "Access Violation" em nosso projeto, apenas estava ocorrendo o seguinte erro ao tentar pela segunda vez: "Multiple sources or destinations specified". Para resolver este segundo erro, basta adicionar antes desta linha "FDIBBackup1.BackupFiles.Add('c:\cadcliente.fbk');" a seguinte linha: "FDIBBackup1.BackupFiles.Clear;", desta forma, antes de adicionar o destino ele limpa o que já está lá.
ExcluirO seu projeto está igual ao nosso? Já tentou debugar para saber em qual linha ocorre este erro de AV?
ExcluirTem com por uma ProgressBar ou Gauge para verificar o processo?
ResponderExcluirSim, é possível, essa implementação deve ser feita no evento "OnProgress".
ExcluirBoa noite ClipaTec Informática! que bom saber que ainda está na ativa.
ResponderExcluirMinha dúvida é a seguinte criei o sistema de backup e tá funcionando tudo ok na maquina local, mas quando quero fazer backup do bd q está em um servidor linux, ele até faz o backup. porém não salva o arquivo .fbk. pode me ajudar?
ResponderExcluir