Manutenção e Sistema de Backup com Barra de Progresso

Assim que se iniciam as atividades de um Banco de Dados é de fundamental importância implementar um esquema de backup, que garanta o pronto restabelecimento dos dados, em qualquer situação de emergência.

Para garantir a qualidade das cópias de segurança, você deve realizar manutenções regulares e preventivas do seu Banco de Dados.  Veremos então, como proceder para realizar a manutenção:

O que leva uma Banco de Dados a ter problemas ?

Um hardware defeituoso , queda de energia, sistema de rede precário (fiação, conectores, hub e switch de péssima qualidade), um projeto mal estruturado e o Access sem as devidas atualizações, são os maiores vilões para acarretarem problemas.

E quais os problemas que costumam ocorrer em um Banco de Dados?

Lentidão, surgimento de caracteres estranhos, não conseguir abrir um determinado formulário ou relatório, perda de dados e a pior de todas as situações: ele se corromper,  a ponto de ficar inutilizado. 

Existem programas oferecidos pela internet que conseguem, em algumas situações, recuperar um banco corrompido, como por exemplo o JetComp.  Também existem firmas especializadas e que cobram bem caro por esse serviço de recuperação. 

Vale lembrar que o reparador do Access atua somente sobre  tabelas, consultas e índices.  Se houver problemas em formulários, relatórios, macros e módulos, provavelmente terá que substituir estes objetos pelos de um backup.

Como se prevenir de problemas deste tipo ?

Use o compactar e o reparar do Access, com regularidade.   Isso reduz consideravelmente as chances de  pequenos problemas resultarem em um problema maior.

Mantenha as atualizações do Access em dia.  Se o Office 2007 for original, configure o Windows para realizar atualizações de forma automática ou baixe diretamente do site da Microsoft o último pacote de atualizações.   Acesse aqui o pacote SP2

Sempre que realizar alterações no código, use o compilador do VBA para sanar de imediato quaisquer erros de sintaxe e/ou comandos.  Isto é fundamental para que o seu aplicativo não apresente tais erros no momento de execução e evite um bug do Access 2007 ao compactar e reparar, que causa a destruição do banco de dados.   Veja em  meu artigo  como proceder, se este bug do compactar e reparar surgir para você.

Para compilar o código, clique no menu Depurar e clique em compilar, conforme figura abaixo:

Depurador do VBA

 

Divida o aplicativo em dois: um contendo as tabelas (back-end) e o outro contendo os restantes dos objetos (front-end).  O back-end é colocado numa pasta compartilhada e o front-end deverá ser copiado para cada um dos micros.  Cada front-end deve ser configurado para acessar o back-end compartilhado.   Esta é a forma estrutural mais empregada e facilita muito a manutenção da aplicação.   

Decompile o seu front-end sempre que fizer alterações significativas na programação.  Esse procedimento retira o lixo do código compilado, diminui o tamanho do banco e melhora o seu rendimento.  Crie um atalho no desktop do seu front-end e use o comando decompile no final da linha. Exemplo:

"C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE" c:\maestro\maestro.accdb /decompile

Sempre que for fazer uma modificação, seja no back-end, seja no front-end, crie o hábito de fazer uma copia de segurança.  Acredite, já me salvou muitas vezes de erros que cometi.  Pode acontecer, por exemplo, de você mandar compactar e reparar o banco de Dados e o Access, na tentativa de consertar uma falha, inutilizar de vez, o banco.  Tendo a cópia, você pode adotar medidas diferentes para tentar recuperar o banco, como por exemplo a cópia simples dos objetos (tabelas, consultas, formulários, ...) para um novo arquivo ACCDB.

Não realize backup sobrepostos

Depois do que você já leu aqui, deu para perceber que realizar uma cópia, sobrepondo a anterior pode não lhe servir de nada.  Realizando então cópias sucessivas, aumenta as suas chances de recuperar dados e objetos de um dos backups que não tenha sofrido o dano.

Quantas cópias devo guardar?

A quantidade excessiva de cópias não tem sentido.  O que vale é você ter a certeza de que as cópias estão livres de problemas.  Testar então periodicamente as cópias faz muito mais sentido do que ter mil cópias sem serem previamente avaliadas. 

O que costumo fazer: 

Realizo backups automáticos diários.  A quantidade de vezes por dia depende do volume de dados do cliente.   Tenho clientes que realizo até quatro backup num dia. 

Um dia por semana testo o último backup do dia e destruo o restante.  No final do mês fico com quatro backups devidamente testados.  

No final do ano fico com o último backup testado de cada mês.  Passo pro meu cliente levar pra casa um cd com os 12 backups do ano.  Bom, dá trabalho mas eu cobro bem por isso. 

Já tive casos em que o backup foi utilizado para recuperar informações que haviam sido deletadas por alguma razão.  Por isso é que costumo guardar os 12 do ano.

Backup manual do back-end

Em todos os meus projetos incluí um sistema de backup para o usuário administrador utilizar.

Tem clientes que não fecham contrato de manutenção comigo. Quando o projeto termina fica a critério do cliente a realização do backup. 

Backup automático do back-end

Tenho um script bem simples que utilizo com o Agendador de Tarefas do Windows, que aciona um aplicativo em Access, para realizar os backups diários.  Vou lhe fornecer este script e lhe mostrar em vídeo como configurar o Agendador de Tarefas do Windows Vista.

Backup do front-end

O front-end não precisa ser submetido à backups constantes, apenas quando você realiza alterações na sua estrutura.  Agora, na prática, costumo deixar uma cópia de segurança numa pasta acessível da rede, para o caso de uma rápida substituição, se o front-end do usuário se danificar.

Qual é o código utilizado para montar um sistema de backup?

No access 2007/2010 temos a classe FileSystem, que possui o método FileCopy mas este tem um problema de não funcionar se o arquivo a ser copiado estiver em uso.   A solução então é usar o método CopyFlie do Windows Scripting.  Veja o exemplo abaixo como é simples:

Dim objfs as object
Set objfs = CreateObject("Scripting.FileSystemObject")
objfs.CopyFile Origem, Destino

Basta indicar a origem do back-end e o local de destino de cópia.

Falei da questão primordial de se testar a integridade da cópia.  O próprio Access tem como nos dar uma ajudinha neste teste.  Se você abrir o help do VBA e procurar a respeito de compactar e reparar, irá notar que ele gera um arquivo de log, caso tenha ocorrido uma reparação do banco de dados no processo. 

Então o que faço é pegar a cópia, já realizada pelo código acima e executo o compactar e reparar sobre esta cópia, gerando uma nova cópia reparada e compactada, no próprio local de destino.

Dim booResultado as boolean
booResultado = Application.CompactRepair(Destino, DestinoNovo, True)

O valor true no último argumento confirma que você deseja que ele gere o arquivo log, caso tenha ocorrido uma reparação.

A variável booResultado retorna true se o processo de compactação e reparação ocorreu sem falhas.

Um grande desafio que tive, foi como inserir a senha do back-end, exigida no processo de compactação e reparação, sem a intervenção do usuário.  Resolvi através do uso do SendKeys.  Utilizei o SendKeys do Windows Scripting , pois o do Access acarreta numa alteração do estado da tecla NumLock.

If fncProtegido = True Then
  Dim objws As Object
  Set objws = CreateObject("wscript.shell")
  objws.SendKeys fncCapturaSenha, True
  objws.SendKeys "{ENTER}"
End If
booResultado = Application.CompactRepair(Destino,DestinoNovo), True)

Pode parecer estranho o sendkeys está passando a senha ANTES de se abrir o compactar e reparar.  O segredinho aqui é que a velocidade de processamento das linhas de código é muito mais rápida do que o envio da seqüência dos caracteres pelo sendkeys.   Então a janela da solicitação de senha já estará aberta e com o foco, ANTES do envio dos caracteres.

Excluo a cópia não compactada e reparada do local de destino.

If booResultado = True Then FileSystem.Kill Destino

Se o usuário optar pelo uso do WinRAR para compactação , é utilizado o comando shell para executar o programa.

Dim compri
compri = Shell("C:\Arquivos de programas\Winrar\WinRAR.EXE a " & _
Replace(DestinoNovo, ".accdb", "") & ".rar " & DestinoNovo, vbHide)

E por último, verifico se o arquivo de log foi gerado, comunicando o problema ocorrido.

If Len(Dir(Left(LocalDestino, InStrRev(LocalDestino, "\")) & "*.log", vbArchive) & "") > 0 Then
    MsgBox "Foi detectado problemas no arquivo de backup." & vbCrLf & _
    vbCrLf & "Entre em contato imediatamente com o administrador do Banco de Dados", vbCritical, "Aviso"
End If

Faltava algo primordial, ao meu ver, que era uma indicação visual de todo o processo.  Então criei uma barra de progresso para o usuário ficar com um indicativo. 

Observe a barra de progresso no processo de backup:

Backup

 

O código completo e comentado está disponível no aplicativo Maestro, que disponibilizo abaixo para download.

 

E qual é o código usado para o backup automático?

O Agendador de Tarefas do Windows não permite abrir direto um arquivo de Access.  Então gerei um pequeno script, que pode ser disparado pelo agendador.

Dim strlocal
Dim objws

on error resume next

Set objws = CreateObject("wscript.shell")

strlocal = "c:\maestro\backup\backup_at.accdb"

strlocal = Chr(34) & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & strlocal & Chr(34)

ObjWS.Run strlocal, 0,"false"

Este pequeno script, ao ser executado, abrirá o aplicativo backup_at.accdb no modo oculto.  A macro Autoexec do backup_at.accdb dispara na inicialização, a função, com os códigos necessários para copiar, compactar e reparar a base de dados, conforme descrevi acima.

O backup_at.accdb, contém no código, a senha da base de dados.    Recomendo, então, que você transforme este accdb em accde, impedindo com isso o acesso ao código fonte.  Altere também a extensão para accde, na linha strlocal do script acima.

Exemplo para você baixar e usar nos seus aplicativos livremente

Inseri o sistema de backup no arquivo exemplo Maestro, usado no artigo sobre Controle de Acesso de Usuários.

Para entrar no modo estrutura do aplicativo Maestro, segure a tecla shift ao carregá-lo.

Senha dos usuários do formulário de Login:

Usuário admin  > admin
Usuário Avelino > 1234

O arquivo zipado abaixo, contém os seguintes arquivos: 

Maestro.accdb - front-end
Maestro_be.accdb - back-end (possui a senha: a1234)
Backup_at.accdb - Contém o código para realizar o backup pelo Agendador de Tarefas
Backuk_at.vbs - Script usado no Agendador de Tarefas do Windows para disparar o backup_at.accdb

Vídeo-aula

Verá como compilar e decompilar um aplicativo.

Farei uma breve demonstração de uso do sistema de backup, do exemplo Maestro.

Vou ensinar a configurar o Agendador de Tarefas do Windows Vista para implementar o backup automático.

Como EXIBIR a vídeo-aula em tela cheia?

1. clique na seta executar da tela abaixo para iniciar a exibição do vídeo;

2. dê dois cliques rápidos na tela, quando o vídeo começar a ser exibido.

 

 


7 comentários

Luís Augusto   11/5/2010 22:51:56

Que belo trabalho Avelino. Como sempre muito claro. Este artigo veio a esclarecer muitas dúvidas que pairavam sobre o Assunto. Muito Obrigado.
Parabéns!

STELLA MARIS   13/5/2010 16:47:08

Avelino, seu trabalho está fantástico.
É muito bom ter alguém que está sempre ensinando aqueles que quase nunca sabem !
Essa Manutenção e Sistema e backup somente podem ser utilizadas no Windows Vista?
Tenho o XP e outra maquina com o windows 2007 e gostaria de saber se posso aplicar.
Sucesso

Avelino Sampaio   14/5/2010 04:20:39

Luís e Stella,

fico feliz em poder ajudar.

Stella,

pode ser usado no Windows Xp sem problemas. Se tiver alguma dificuldade, volte a entrar em contato.

Luiz Roberto   19/6/2010 14:14:37

Avelino, boa tarde.

Quero agradecer pela dica dada no Forum do access outro dia, quando eu tentava gerar um arquivo extensão .PDF e não aparecia as opções do mesmo no computador do meu cliente, foi quando você me informou para atualizar com SP2, e deu certo.

Você realmente está de parabéns, e eu fico contente por ter pessoas assim no mundo que prestam informações precisas.

Um abraço.

William Paiva   6/7/2010 23:22:59

Uma Dica simples que pode evitar problemas absurdos !!! Parabéns amigo abraço...

Rui Gonçalves   19/8/2010 10:05:44

Olá Avelino
Em primeiro lugar queria dar-lhe os parabéns, está excelente.
Não tem a parte do backup para o access 2003?
Cumprimentos
Rui

Avelino Sampaio   20/8/2010 10:37:41

Rui,

peço desculpas , não tenho não.

grato


Envie seu comentário: