ID do artigo: 109953 - Última revisão: quarta-feira, 23 de agosto de 2006 - Revisão: 2.1

ACC: Como solucionar problemas/reparar o Jet 3.0 e os bancos de dados anteriores danificados

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Iniciante: Requer conhecimento da interface do usuário em computadores com um único usuário.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Os fatores ambientais podem danificar o arquivo do banco de dados. Os sintomas de um banco de dados corrompido podem variar de #Excluído aparecendo em certos registros à incapacidade de abrir um dos objetos no banco de dados e à total incapacidade de não conseguir abrir o arquivo no Access. Os utilitários Reparar e compactar no Microsoft Access são ferramentas úteis para a recuperação e a otimização dos arquivos de banco de dados do Microsoft Access. Este artigo descreve estes utilitários e oferece alternativas adicionais para a recuperação dos bancos de dados danificados. Além disso, são fornecidas informações sobre o que é a possível causa da corrupção.

OBSERVAÇÃO: Este artigo apenas cobre os bancos de dados anteriores ao Access 97. Para obter informações adicionais sobre como solucionar problemas de bancos de dados em versões posteriores do Access, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
279334  (http://support.microsoft.com/kb/279334/PT-BR/ ) ACC97: Como reparar um banco de dados danificado do Jet 3.5
209137  (http://support.microsoft.com/kb/209137/PT-BR/ ) ACC2000: Como reparar um banco de dados danificado

Mais Informações

Embora as etapas descritas neste artigo geralmente tenham êxito na recuperação dos arquivos de banco de dados danificados, para proteger os dados é necessário criar uma cópia de backup do arquivo do banco de dados com a maior freqüência possível.

Os utilitários Reparar e compactar

O utilitário Reparar

O utilitário Reparar pode corrigir os bancos de dados com certos tipos de dano. Este utilitário tenta reparar apenas as tabelas, as consultas e os índices no banco de dados. Não tenta reparar formulários danificados, relatórios, macros ou módulos, mas faz uma cópia para o novo banco de dados reparado.

OBSERVAÇÃO: Execute o comando Repair Database apenas quando o mecanismo de banco de dados Microsoft Jet retorna uma mensagem de erro informando que Reparar deve ser executado. O comando Reparar banco de dados não deve ser executado em nenhuma outra circunstância.

O utilitário Compactar

O utilitário Compactar elimina espaços vazios em um banco de dados já existente. Este utilitário faz isto ao criar um novo banco de dados de destino e copiar cada objeto do antigo banco de dados para o novo. Se você escolher compactar o banco de dados para o nome do banco de dados original ao invés de um novo banco de dados, o utilitário Compactar cria um banco de dados temporário, exporta todos os objetos do banco de dados original para o banco de dados temporário, remove o banco de dados original e renomeia o banco de dados temporário para o nome do banco de dados original.

IMPORTANTE: Geralmente, a melhor forma de manutenção preventiva para um arquivo .mdb é compactar o banco de dados. A lista a seguir apresenta as ações executadas pelo utilitário Compactar.
  • Reorganiza as páginas da tabela para que fiquem em páginas do banco de dados adjacentes. Isto melhora o desempenho porque a tabela não fica mais fragmentada no banco de dados.
  • Recupera o espaço não usado criado por exclusões de objetos e registros. Quando os objetos ou os registros são excluídos a partir de banco de dados, o espaço que ocupavam é marcado como disponível para novas adições ao banco de dados. No entanto, o tamanho do banco de dados nunca diminui a menos que o banco de dados seja compactado. Para os bancos de dados nos quais os objetos e os registros são freqüentemente adicionados, excluídos e atualizados, é necessário compactar com freqüência.
  • Redefine incrementando os campos AutoNumeração para que o próximo valor alocado seja um a mais do que o valor mais alto nos registros remanescentes. Por exemplo, se todos os registros no banco de dados tiverem sido excluídos após você compactar o banco de dados, o valor no campo AutoNumeração será 1 quando o próximo registro for adicionado. Se o valor de AutoNumeração remanescente mais alto no banco de dados for 50, depois da compactação, o valor será 51 quando o próximo registro for adicionado. Observe que isto é verdadeiro mesmo que os registros contendo valores maiores que 50 tenham sido adicionados anteriormente mas foram excluídos antes da compactação.
  • Regenera as estatísticas de tabela usadas no processo de otimização da consulta. Com o tempo, estas estatísticas podem ficar desatualizadas, normalmente, quando as transações foram desfeitas ou, quando o banco de dados não foi fechado corretamente devido a uma queda de energia inesperada ou porque o programa, usando o Microsoft Jet não foi fechado completamente antes do computador ser desligado.
  • Sinaliza todas as consultas para que elas sejam recompiladas na próxima vez em que a consulta for executada. Isto é importante porque as estatísticas do banco de dados podem ser alteradas e uma consulta compilada anteriormente pode ter um plano de consulta impreciso.

Diretrizes importantes para compactar um banco de dados

Antes de compactar um banco de dados, as seguintes condições devem ser atingidas:

O usuário que compacta o banco de dados deve estar conectado, usando uma conta que tenha as permissões de segurança Modificar design ou Administrador para todas as tabelas no banco de dados. Para obter mais informações sobre a segurança do Microsoft Jet, consulte o Capítulo 10, "Gerenciando a segurança".

É necessário ter espaço suficiente em disco tanto para a versão original quanto para a compactada do banco de dados, mesmo que o banco de dados seja compactado pela interface do usuário do Microsoft Access usando o mesmo nome de arquivo. O banco de dados compactado é renomeado como o banco de dados original somente quando a compactação tiver êxito.

Outros usuários não devem ficar com o banco de dados aberto. Quando for compactado, um banco de dados precisa ser aberto exclusivamente pelo Microsoft Jet para impedir que qualquer usuário acesse e modifique o banco de dados durante o processo.

Como recuperar um banco de dados danificado

OBSERVAÇÃO: Se você tiver enfrentado os números de erro 3197, 3343 ou 3015 do Microsoft Jet 3.x, consulte também o seguinte artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
182867  (http://support.microsoft.com/kb/182867/PT-BR/ ) ACC: Mensagens de erro devido à corrupção do banco de dados do Jet Database Engine 3.x
As seguintes etapas descrevem um método geral para reparar um banco de dados danificado:
  1. Se você tiver o Microsoft Access versão 2.0, obtenha o Microsoft Access 2.0 Service Pack se estiver recebendo uma das seguintes mensagens de erro em um ambiente multiusuário:
    - Não foi possível abrir SYSTEM.MDA
    -ou-
    - <Database> está corrompido ou não é um arquivo do banco de dados. Tentar reparar?
    Além de corrigir o problema mencionado anteriormente, o Service Pack também inclui um utilitário Reparar avançado. Para obter mais informações sobre o Service Pack, leia os seguintes artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
    123589  (http://support.microsoft.com/kb/123589/PT-BR/ ) ACC2: Mensagem de erro "Não foi possível abrir SYSTEM.MDA"
    123823  (http://support.microsoft.com/kb/123823/PT-BR/ ) ACC2: Perguntas e respostas sobre o MS Access versão 2.0 Service Pack
    123588  (http://support.microsoft.com/kb/123588/PT-BR/ ) ACC2: Utilitário Reparar do Microsoft Access aprimorado
  2. Faça backup do arquivo do banco de dados (.mdb) danificado.
  3. Exclua o arquivo .ldb se ele estiver presente. O arquivo .mdb correspondente deve ser fechado antes da exclusão deste arquivo.

    O arquivo .ldb é usado para determinar quais registros estão bloqueados em um banco de dados compartilhados e por quem. Se um banco de dados estiver aberto para uso compartilhado, o arquivo .ldb é criado com o mesmo nome do banco de dados correspondente (.mdb). Por exemplo, se você abrir (para uso compartilhado) o banco de dados de exemplo Northwind.mdb na pasta c:\Msoffice\Access, um arquivo chamado Northwind.ldb será automaticamente criado na mesma pasta. No Microsoft Access 7.0 e 97, o arquivo .ldb é excluído automaticamente após o último usuário ter saído do banco de dados com duas exceções -- quando o último usuário não tiver permissões de exclusão na pasta que contém o arquivo .mdb ou quando o banco de dados estiver corrompido.

    Para obter mais informações sobre os arquivos .ldb, leia os seguintes artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
    136128  (http://support.microsoft.com/kb/136128/PT-BR/ ) ACC2: introdução aos arquivos .ldb (95/97)
    109957  (http://support.microsoft.com/kb/109957/PT-BR/ ) ACC: Introdução aos arquivos .ldb (1.x, 2.0)
  4. Execute o utilitário Compactar da seguinte forma:

    1. Se um banco de dados estiver aberto, feche o banco de dados.
    2. Aponte para Utilitários de banco de dados no menu Ferramentas e clique em Compactar banco de dados.

      No Microsoft Access 2.0 ou anterior, no menu Arquivo, clique em Compactar banco de dados.

    Neste ponto, verifique se o dano causado no banco de dados foi reparado. Se não foi, continue com as etapas remanescentes.
  5. Se o dano estiver em uma tabela, consulta ou índice, execute o utilitário Reparar da seguinte forma:

    1. Se um banco de dados estiver aberto, feche o banco de dados.
    2. Aponte para Utilitários de banco de dados no menu Ferramentas e clique em Reparar banco de dados.

      No Microsoft Access 2.0 ou anterior, no menu Arquivo, clique em Reparar banco de dados.
    3. Selecione o arquivo danificado na caixa de diálogo Reparar banco de dados e clique em Reparar.
    No Microsoft Access 2.0 ou anterior, insira o nome do arquivo danificado na caixa Nome de arquivo e clique em OK.

    Se o reparo tiver êxito, a seguinte mensagem será exibida:

    No Microsoft Access para Windows 95:
    O Microsoft Access reparou o banco de dados '<caminho><nome_do_banco_de_dados>' com êxito.

    No Microsoft Access 2.0 ou anterior:
    O reparo do banco de dados '<caminho><nome_do_banco_de_dados>' foi concluído com êxito.

    Se o reparo não tiver êxito, uma mensagem informando isto será exibida. Isto significa que o dano causado à tabela, à consulta ou ao índice é tão grave que não pode ser corrigido ou o dano está em um objeto que o utilitário Reparar não afeta.
  6. Se o dano estiver em uma tabela e as etapas anteriores não a recuperaram, tente o seguinte:

    1. No Microsoft Access, exporte a tabela para um arquivo ASCII (texto delimitado). Para obter mais informações sobre este tópico, pesquise pela frase "texto delimitado" e exiba o tópico "exportando dados do Access" usando o Índice da Ajuda do Microsoft Access.
    2. Exclua todos os relacionamentos associados a esta tabela e exclua a tabela a partir de banco de dados.
    3. Compacte o banco de dados.
    4. Recrie a tabela e todos os relacionamentos que ela tenha.
    5. Se você usar um processador de texto, examine o arquivo ASCII em busca de dados incorretos ou estranhos e remova estes registros. Salve o arquivo em um formato de arquivo de texto ASCII
    6. Importe de novo o arquivo ASCII para a nova tabela recriada. Para obter mais informações sobre este tópico, pesquise pela frase "texto delimitado" e exiba o tópico "importando ou vinculando" usando o Índice da Ajuda do Microsoft Access.
    7. Insira novamente os registros que você foi forçado a excluir.
  7. Se as etapas anteriores falharem na recuperação do banco de dados danificado, tente criar um novo banco de dados e importar os objetos, um por um, para o banco de dados novo a partir do banco de dados antigo. Recrie os relacionamentos. Esta técnica resolve problemas de tabelas de sistema danificadas no banco de dados.
  8. Se o dano estiver em um formulário ou relatório, ele pode estar tanto no formulário quanto no próprio relatório ou em um ou mais controles contidos no formulário ou no relatório. É possível excluir o formulário ou o relatório e importá-lo a partir da cópia de backup de banco de dados ou usar uma das seguintes opções:

    1. Se o dano estiver no formulário ou no próprio relatório, crie um novo formulário ou relatório e copie os controles a partir do formulário ou relatório original.
    2. Se o dano estiver num controle de formulário ou de relatório, crie um novo formulário ou relatório e recrie os controles no novo formulário ou relatório. É melhor recriar todos os controles, já que não há como informar quais controles estão danificados.
  9. Se estiver em uma macro ou módulo, o dano pode estar tanto na macro quanto no próprio módulo ou no conteúdo da macro ou do módulo. É possível excluir a macro ou o módulo e importá-lo a partir da cópia de backup do banco de dados ou usar uma das seguintes opções:

    1. Se o dano estiver na macro ou no próprio módulo, crie uma nova macro ou módulo e copie os conteúdos da macro ou módulo original.
    2. O dano pode envolver caracteres não ASCII incorporados ao módulo. Salve o módulo como um arquivo de texto, remova todos os dados incorretos ou estranhos e recarregue o arquivo de texto em um novo módulo.
    3. Se o dano estiver nos conteúdos da macro ou no próprio módulo, é necessário criar uma nova macro ou módulo e recriar os conteúdos da macro ou do módulo original.
OBSERVAÇÃO: Se você tiver o Microsoft Access 95, considere baixar o utilitário Jetcomp.exe. Em alguns casos, o Jetcomp.exe repara os bancos de dados irrecuperáveis. Para obter informações sobre o pré-requisito de software necessário para executar o jetcomp.exe e como obtê-lo, consulte o seguinte artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
172733  (http://support.microsoft.com/kb/172733/PT-BR/ ) Versão atualizada do Microsoft Jet 3.5 disponível para download
Se não puder reparar o banco de dados executando nestas etapas, é provável que o banco de dados danificado não possa ser reparado. Se este for o caso, restaure o último backup de banco de dados ou recrie o banco de dados.

Como uma alternativa final, alguns consultores podem fornecer um serviço de reparo do banco de dados do Microsoft Access. Como este é um serviço especializado, a maneira mais eficiente de localizar um consultor é publicar uma mensagem no grupo de notícias da Internet "Grupos de usuários e de terceiros" do Microsoft Access, que tem os seguintes endereços do grupo de notícias:
microsoft.public.access.3rdpartyusrgrp
Para obter mais informações sobre o grupo de notícias da Internet do Microsoft Access, leia o seguinte artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
150057  (http://support.microsoft.com/kb/150057/PT-BR/ ) ACC: Grupos de notícias do Microsoft Access disponíveis na Internet

Causas típicas de corrupção de arquivos mdb

A corrupção nos arquivos Access/Jet mdb tem três causas principais:

O banco de dados fica suspeito/corrompido devido à operação de gravação interrompida

É recomendado fechar o Access corretamente, clicando em Sair ou Fechar no menu Arquivo. No entanto, se um banco de dados estiver aberto e gravando dados quando o Access for fechado de modo anormal, o mecanismo de banco de dados Jet pode marcá-lo como suspeito/corrompido. Isto pode acontecer se o computador for desligado manualmente sem que o Windows seja desligado ou se a energia elétrica acabar. Outras situações podem não desligar o Access mas ainda podem interferir no Jet ao gravar dados no disco enquanto o banco de dados estiver aberto. Isto pode ocorrer, por exemplo, quando as redes experimentam a colisão de dados ou quando as unidades de disco funcionam mal. Se qualquer uma destas interrupções ocorrer, o Jet pode marcar o banco de dados como possivelmente corrompido.

Quando o Jet começa uma operação de gravação, o Jet define um sinalizador e o redefine quando a operação estiver concluída. Se uma operação de gravação for interrompida, o sinalizador permanece definido. Ao tentar abrir o banco de dados novamente, o Jet determina se o sinalizador está definido e relata que o banco de dados está corrompido. Na maioria dos casos, os dados no banco de dados não estão de fato corrompidos mas, o sinalizador de definição alerta o Jet de que pode ter ocorrido a corrupção. Em casos como este, compactar e/ou reparar o banco de dados geralmente pode restaurar o banco de dados. Felizmente, existem maneiras de se determinar qual usuário e estação de trabalho foram responsáveis por tornar o arquivo suspeito. Consulte a seção Métodos para determinar quais usuários e/ou estações de trabalho estão fazendo com que o arquivo seja marcado como suspeito, posteriormente neste artigo.

Hardware de rede com defeito

Neste caso, a corrupção do arquivo não envolve o mecanismo de banco de dados Jet. Na verdade, o arquivo está literalmente corrompido devido a alguma causa externa. A causa pode ser um ou mais vínculos na cadeia de hardware entre o computador em que o banco de dados reside e o computador que tem o banco de dados aberto. Esta lista inclui, mas não esta limitada a, placas de interface de rede, cabeamento da rede, roteadores e hubs.

A corrupção com base no hardware é normalmente indicada pelos arquivos .mdb que não podem ser restaurados por compactação, reparo ou Jetcomp. A corrupção de hardware normalmente repetirá até que o hardware responsável seja reparado ou substituído.

Como abrir e salvar o arquivo .mdb em um outro programa

Não há como recuperar um arquivo .mdb que foi aberto e em seguida salvo em um programa diferente. Por exemplo, o Microsoft Word irá permitir que você abra um banco de dados do Access e salve-o (A propósito, ele não serve para nada se você abrir um arquivo .mdb em um outro aplicativo, uma vez que a única coisa que está sendo exibida são os caracteres estendidos). Salvando desta forma, fará com que o arquivo .mdb solicite uma senha do banco de dados quando você estiver tentando abrir no Access -- mesmo que o arquivo nunca tenha sido protegido por uma senha no Access. A solicitação de senha ocorre em casos como este porque, é na primeira faixa de bytes verificada pelo Access quando o arquivo é aberto no local em que a senha do banco de dados estaria armazenada. Se este byte contiver dados corrompidos, o Access trata o arquivo como sendo protegido por senha. Mesmo se houvesse uma forma de contornar a solicitação de senha neste caso, o banco de dados ainda assim permaneceria irrecuperável porque a estrutura binária fica embaralhada e ilegível para o Access. A única solução neste caso é recuperar uma cópia de backup do arquivo. Para obter informações adicionais sobre este problema, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
223043  (http://support.microsoft.com/kb/223043/PT-BR/ ) ACC: A senha do banco de dados aparece embora nunca tenha sido definida

Possíveis etapas para evitar a corrupção

  • Evite queda de energia durante as gravações do banco de dados. A queda de energia pode deixar o banco de dados em estado corrompido.
  • Evite quedas de conexões de rede.
  • Evite a finalização inesperada das conexões do Microsoft Jet como queda de energia, desligamento manual, desligamento do aplicativo pelo Gerenciador de tarefas etc.
  • Ao programar, feche todos os objetos DAO e ADO que estiverem abertos. Os exemplos incluem os objetos Recordset, QueryDef, TableDef e Database.
  • Erros graves de sistema quase sempre causam a finalização inesperada. Se o banco de dados está propenso a erros graves, resolva-os antes que o banco de dados fique muito danificado para ser aberto ou recuperado. Para obter informações adicionais sobre os utilitários do Microsoft Jet, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
    148424  (http://support.microsoft.com/kb/148424/PT-BR/ ) ACC: Solucionando erros fatais no sistema no Microsoft Access 95 e 97
  • Compacte o banco de dados com freqüência.
  • Não execute IPX no NT Server no local em que os bancos de dados do Jet estão localizados na rede e o cliente é o Win95 com IPX/SPX. Ao invés, execute o TCP-IP no NT Server e uma pilha de protocolo dupla do IPX e TCP-IP no cliente Win95. (De NT para NT com IPX/SPX não irá causar o problema, nem o Novell para qualquer cliente.)
  • Evite um grande número de operações abrir e fechar em um loop (entre 40.000 e 1.000.000 de operações abrir/fechar consecutivas).

Referências

Para obter mais informações sobre como reparar os bancos de dados, clique em Conteúdo e Índice no menu Ajuda, clique na Ajuda do Access, digite o seguinte texto:

reparar

e clique duas vezes no texto selecionado para ir ao tópico Reparar um banco de dados danificado.

A informação contida neste artigo aplica-se a:
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 95 Standard Edition
Palavras-chave: 
kbhowto kbusage KB109953
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.