Artigo: 209137 - Última revisão: quinta-feira, 26 de Janeiro de 2006 - Revisão: 4.1

Como detectar e resolver problemas de uma base de dados Jet 4.0 danificada no Access 2000

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.
Este artigo foi publicado anteriormente em PT209137
Principiante: requer conhecimentos sobre a interface de utilizador em computadores individuais.

Este artigo aplica-se apenas a bases de dados do Microsoft Access (.mdb).

Para obter uma versão deste artigo relativa ao Microsoft Access 2002 ou Access 2003, consulte 283849  (http://support.microsoft.com/kb/283849/ ) .

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Existem factores ambientais que poderão provocar danos no ficheiro de base de dados. Os sintomas que apontam para a possibilidade de uma base de dados danificada variam desde a apresentação do termo "#Deleted" em determinados registos, passando pela incapacidade de abrir um dos objectos existentes na base de dados, até à total impossibilidade de abrir o ficheiro no Access. O utilitário Compactar e reparar do Microsoft Access é uma ferramenta útil para recuperar e optimizar ficheiros de base de dados do Microsoft Access 2000. Este artigo descreve este utilitário do Access 2000 e fornece outras alternativas para reparar bases de dados danificadas. Além disso, são fornecidas informações sobre as possíveis causas dos danos provocados.

Mais Informação

Apesar de os passos descritos neste artigo serem, normalmente, utilizados com sucesso na recuperação de ficheiros de base de dados danificados, para proteger os dados deverá criar uma cópia de segurança do ficheiro de base de dados com a maior frequência possível.

Utilitário 'Compactar e reparar'

O utilitário Compactar elimina o espaço vazio numa base de dados existente. Para tal, cria uma nova base de dados de destino e copia cada um dos objectos existentes na base de dados antiga para a nova base de dados. Se optar por compactar a base de dados com o nome de base de dados original, em vez de o fazer com o de uma base de dados nova, o utilitário Compactar criará uma base de dados temporária, exportará todos os objectos da base de dados original para a base de dados temporária, removerá a base de dados original e alterará o nome da base de dados temporária para o nome da base de dados original.

O utilitário Reparar tenta reparar apenas as tabelas, consultas e índices existentes na base de dados. Não faz qualquer tentativa no sentido de reparar formulários, relatórios, macros ou módulos danificados.

Segue-se uma lista de acções efectuadas pelo utilitário Compactar:
  • Reorganiza as páginas de uma tabela de forma a que residam em páginas adjacentes da base de dados.

    Este procedimento melhora o desempenho, uma vez que a tabela deixa de estar fragmentada na base de dados.
  • Recupera o espaço não utilizado criado pelas eliminações de objectos e de registos.

    Quando são eliminados objectos ou registos da base de dados, o espaço que ocupavam é assinalado como estando disponível para novas adições à base de dados. No entanto, o tamanho da base de dados nunca diminui, excepto se a base de dados for compactada. Deverá proceder frequentemente à compactação de bases de dados cujos objectos e registos sejam adicionados, eliminados e actualizados com frequência.
  • Repõe o processo de incrementação de campos de numeração automática, para que o próximo valor atribuído seja superior (em uma unidade) ao valor mais elevado dos restantes registos.

    Por exemplo, se todos os registos da base de dados tiverem sido eliminados depois de compactada a base de dados, o valor do campo de numeração automática será igual a 1 quando for adicionado o próximo registo. Se o valor mais alto do campo de numeração automática da base de dados for igual a 50 depois da compactação, o valor passará a ser igual a 51 quando for adicionado o próximo registo. De realçar que isso também se verifica mesmo que anteriormente tenham sido adicionados registos com valores superiores a 50 que, no entanto, tenham sido eliminados antes de a compactação ser efectuada.
  • Volta a gerar as estatísticas das tabelas utilizadas no processo de optimização de consultas.

    Com o tempo, estas estatísticas podem ficar desactualizadas. Isto acontece normalmente no caso de terem sido anuladas transacções ou de a base de dados não ter sido fechada correctamente devido a uma falha de energia ou à impossibilidade de encerrar completamente o programa através do Microsoft Jet antes de o computador ser desligado.
  • Assinala todas as consultas para que sejam novamente compiladas da próxima vez que a consulta for executada.

    Trata-se de um aspecto importante, uma vez que as estatísticas da base de dados podem mudar, sendo possível que uma consulta compilada anteriormente tenha um plano de consulta incorrecto.

Directrizes importantes para a execução do utilitário 'Compactar e reparar'

Para poder executar o utilitário Compactar e reparar numa base de dados, as condições que se seguem devem ser respeitadas:
  • O utilizador deverá ter iniciado sessão utilizando uma conta que tenha permissões de segurança Modificar estrutura ou Administrar para todas as tabelas da base de dados.
  • Deve existir espaço suficiente no disco para as versões original e compactada da base de dados, mesmo que a base de dados esteja a ser compactada através da interface de utilizador do Microsoft Access 2000 com o mesmo nome de ficheiro.

    O nome da base de dados reparada ou compactada só será alterado para o nome da base de dados original quando a compactação tiver sido efectuada com sucesso.
  • A base de dados não poderá estar aberta por outros utilizadores.

    Quando uma base de dados está a ser compactada só deverá ser aberta exclusivamente pelo Microsoft Jet, de modo a impedir que outros utilizadores acedam e modifiquem a base de dados durante o processo.

Recuperar uma base de dados danificada

Os passos que se seguem descrevem um método geral para a reparação de uma base de dados danificada:
  1. Instale o mais recente Service Pack do Microsoft Jet.

    Este procedimento serve para garantir que tem as mais recentes correcções do Microsoft Jet. Para obter mais informações sobre como transferir o mais recente Service Pack do Jet 4.0, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
    239114  (http://support.microsoft.com/kb/239114/ ) Como: obter o Service Pack mais recente para o motor de bases de dados Microsoft Jet 4.0
    Se trabalhar num ambiente de rede, terá que instalar o mais recente Service Pack do Microsoft Jet em todos os computadores clientes. Não é necessário instalar o Service Pack do Microsoft Jet no servidor de ficheiros da rede, a menos que o servidor também execute uma ou várias aplicações que utilizem o Microsoft Jet.
  2. Crie uma cópia de segurança do ficheiro de base de dados (.mdb) danificado.
  3. Elimine o ficheiro .ldb, se existir. Deverá fechar o ficheiro .mdb correspondente antes de eliminar este ficheiro.

    O ficheiro .ldb é utilizado para determinar que registos estão bloqueados numa base de dados partilhada, e por quem. Se uma base de dados estiver aberta para utilização partilhada, será criado um ficheiro .ldb com o mesmo nome que a base de dados correspondente (.mdb). Por exemplo, se abrir (para utilização partilhada) a base de dados de exemplo Adamastor.mdb existente na pasta c:\Msoffice\Access, será automaticamente criado um ficheiro Adamastor.ldb na mesma pasta. O ficheiro .ldb será automaticamente eliminado depois de o último utilizador ter saído da base de dados, com duas excepções:

    • quando o último utilizador não tiver permissões de eliminação na pasta que contém o ficheiro .mdb
    • quando a base de dados estiver danificada
    O ficheiro .ldb contém uma lista dos utilizadores que têm a base de dados aberta.

    Em alguns casos, durante a resolução dos problemas que estão na origem dos erros da base de dados, poderá ser necessário verificar quais são os utilizadores que têm sessão iniciada na base de dados. Com o Microsoft Visual Basic for Applications no Access 2000, poderá imprimir uma lista dos utilizadores que têm sessão iniciada numa base de dados específica. Para obter mais informações sobre como efectuar este procedimento e criar código de exemplo, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
    198755  (http://support.microsoft.com/kb/198755/PT/ ) ACC2000: Verificar quem iniciou sessão na base de dados com o Jet UserRoster
  4. Execute o utilitário Compactar e reparar do seguinte modo:
    1. Se a base de dados estiver aberta, feche-a.
    2. No menu Ferramentas, aponte para Utilitários de base de dados e clique em Compactar e reparar a base de dados.
    3. Na caixa de diálogo Compactar base de dados de, seleccione o ficheiro que pretende compactar e clique em Compactar.
    4. Na caixa de diálogo Compactar base de dados para, introduza um novo nome de ficheiro e clique em Guardar.

      Se a compactação e reparação não tiver sido bem sucedida, será apresentada uma mensagem que o informará do ocorrido. Tal significa que os danos são de tal forma graves que não é possível corrigi-los.
  5. Se com os passos anteriores não for possível recuperar a base de dados danificada, tente criar uma nova base de dados e importar os objectos, um a um, da base de dados antiga para a nova. Em seguida, volte a criar as relações. Esta técnica resolve os problemas detectados nas tabelas de sistema danificadas existentes na base de dados.

    Repare que não é possível importar páginas de acesso a dados com o assistente de importação. Em vez disso, será necessário abrir uma página de acesso a dados existente na base de dados nova. Para o fazer, siga estes passos:
    1. Na janela da base de dados, clique em Páginas, sob Objectos.
    2. Clique no botão Novo.
    3. Na caixa de diálogo Nova página de acesso a dados, clique em Página Web existente e clique em OK.
  6. Se os danos estiverem localizados numa tabela e os passos anteriores não foram suficientes para recuperá-la, tente efectuar o seguinte procedimento:

    1. No Microsoft Access 2000, exporte a tabela para um ficheiro ASCII (texto delimitado). Para obter mais informações sobre este tópico, efectue uma procura pela expressão "texto delimitado" e visualize o tópico "exportar dados do Access" utilizando o índice remissivo da ajuda do Microsoft Access.
    2. Elimine todas as relações associadas a esta tabela e, em seguida, elimine a tabela da base de dados.
    3. Compacte a base de dados.
    4. Crie novamente a tabela e as relações desta.
    5. Utilizando um processador de texto é possível examinar o ficheiro ASCII para verificar se existem dados danificados ou estranhos, e remover esses registos. Guarde o ficheiro num formato de ficheiro de texto ASCII.
    6. Volte a importar o ficheiro ASCII para a tabela que acabou de recriar. Para obter mais informações sobre este tópico, efectue uma procura pela expressão "texto delimitado" e visualize o tópico "importar ou ligar" utilizando o índice remissivo da ajuda do Microsoft Access.
    7. Volte a criar todos os registos que tenha sido forçado a eliminar.
  7. Se os danos se verificarem num formulário ou relatório, podem estar no formulário ou no relatório propriamente dito ou num ou mais controlos existentes no mesmo. Poderá eliminar o formulário ou relatório e importá-lo a partir da cópia de segurança da base de dados, ou utilizar uma das seguintes opções:
    • Se os danos estiverem localizados no formulário ou relatório propriamente dito, é possível criar um novo formulário ou relatório e copiar os controlos do formulário ou relatório original.
    • Se os danos se verificarem num controlo existente no formulário ou relatório, é possível criar um formulário ou relatório novo e voltar a criar os controlos no novo formulário ou relatório. Será necessário voltar a criar todos os controlos, uma vez que não existe nenhuma forma de identificar os controlos danificados.
  8. Se os danos se verificarem numa macro ou num módulo, podem estar na macro ou no módulo propriamente dito ou no respectivo conteúdo. É possível eliminar a macro ou o módulo e importá-lo a partir da cópia de segurança da base de dados, ou utilizar uma das seguintes opções:
    • Se os danos estiverem localizados na macro ou no módulo propriamente dito, é possível criar uma nova macro ou módulo e copiar o conteúdo da macro ou módulo original.
    • Os danos podem envolver caracteres não ASCII incorporados no módulo. Guarde o módulo como um ficheiro de texto, remova todos os dados danificados ou estranhos e volte a carregar o ficheiro de texto num módulo novo.
    • Se os danos ocorrerem no conteúdo da macro ou do módulo, será necessário criar uma macro ou um módulo novo e voltar a criar o conteúdo da macro ou do módulo original.
Se não conseguir reparar a base de dados através destes passos, é provável que não seja possível efectuar a reparação dos danos. Se for esse o caso, deverá restaurar a última cópia de segurança da base de dados ou voltar a criar a base de dados.

Como opção final, alguns consultores poderão fornecer um serviço de reparação de bases de dados do Microsoft Access. Visto tratar-se de um serviço especializado, o modo mais eficaz de localizar um consultor consiste em publicar uma mensagem no newsgroup Third Party and User Groups do Microsoft Access na Internet, cujo endereço é o seguinte:
microsoft.public.access.3rdpartyusrgrp
Para obter mais informações sobre os newsgroups do Microsoft Access na Internet, clique no seguinte número de artigo para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
150057  (http://support.microsoft.com/kb/150057/PT/ ) ACC: Microsoft Access Newsgroups Available on the Internet

Causas normais na origem dos danos do ficheiro .mdb

Os danos verificados nos ficheiros .mdb do Access/Jet têm origem em quatro causas principais.

A base de dados é suspeita ou está danificada devido a uma operação de escrita interrompida

Recomenda-se vivamente a realização de um encerramento efectuado de forma correcta, clicando em Sair ou Fechar no menu Ficheiro. No entanto, se uma base de dados estiver aberta e estiverem a ser escritos dados no momento em que o Access é encerrado incorrectamente, o motor de base de dados Jet poderá assinalar o ficheiro como sendo suspeito ou como estando danificado. Tal poderá acontecer se o computador for desligado manualmente sem que o Windows tenha sido encerrado primeiro, ou se houver uma falha de energia. Outras situações poderão não provocar o encerramento do Access mas, ainda assim, poderão interferir no processo de escrita de dados do Jet no disco enquanto a base de dados estiver aberta. Isto poderá acontecer, por exemplo, quando as redes sofrerem conflitos entre os dados ou quando ocorrerem falhas de funcionamento das unidades de disco. Caso ocorra uma destas interrupções, o Jet poderá assinalar a base de dados como podendo estar danificada.

Quando o Jet inicia uma operação de escrita, define um sinalizador que será reposto depois de concluída a operação. Se a operação de escrita for interrompida, o sinalizador permanecerá definido. Quando tentar abrir novamente essa base de dados, o Jet determinará que o sinalizador está definido e comunicará que a base de dados está danificada. Na maior parte dos casos, os dados contidos na base de dados não estão, de facto, danificados; no entanto, o sinalizador definido alerta o Jet de que poderão ter ocorrido danos. Nestes casos, normalmente a compactação e/ou reparação restaura a base de dados. Felizmente, existem meios para determinar o utilizador e a estação de trabalho responsáveis pela marcação do ficheiro como suspeito. Consulte o tópico "Como determinar quais são os utilizadores/estações de trabalho que estão fazer com que o ficheiro seja assinalado como sendo suspeito" mais abaixo neste artigo para determinar que utilizadores e/ou estações de trabalho podem estar a fazer com que o Jet marque o ficheiro como suspeito.

Hardware de rede com erros

Neste caso, o ficheiro danificado não envolve o motor Jet. Ao invés, o ficheiro é literalmente danificado por uma causa externa. A causa poderá residir num ou mais elos da cadeia de hardware entre o computador em que a base de dados reside e o computador que tem a base de dados aberta. Esta lista inclui, entre outros, placas de interface de rede, cabos de rede, routers e concentradores.

Normalmente, os danos ao nível do hardware são indicados por ficheiros .mdb que não é possível restaurar através da utilização de ferramentas de compactação, de reparação ou do Jetcomp. Em geral, os danos em hardware continuarão a ocorrer até que o hardware responsável seja reparado ou substituído.

Abrir e guardar o ficheiro mdb noutro programa

Não existe qualquer método que permita a recuperação de um ficheiro .mdb que tenha sido aberto e guardado noutro programa. Por exemplo, o Microsoft Word permite abrir uma base de dados do Access e, em seguida, guardá-la. (Não serve de nada abrir um ficheiro .mdb noutra aplicação, uma vez que só verá caracteres expandidos.) Guardar o ficheiro desta forma fará com que o ficheiro .mdb solicite uma palavra-passe de base de dados quando o tentar abrir no Access. Isto ocorre mesmo que o ficheiro nunca tenha estado protegido por palavra-passe no Access. O pedido de palavra-passe acontecerá nestes casos uma vez que o primeiro intervalo de bytes verificado pelo Access ao abrir um ficheiro corresponde ao local onde a palavra-passe da base de dados estaria guardada. Se esse byte contiver dados danificados, o Access processará o ficheiro como se este estivesse protegido por palavra-passe. Neste caso, mesmo que existisse uma forma de contornar o pedido de palavra-passe, continuaria a não ser possível recuperar a base de dados, visto que a estrutura binária estaria danificada e, por isso, o Access não conseguiria decifrá-la. Assim, neste caso, a única solução reside na recuperação de uma cópia de segurança do ficheiro. Para obter informações adicionais sobre este problema, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
243895  (http://support.microsoft.com/kb/243895/PT/ ) ACC2000: Apresentação de palavra-passe da base de dados apesar de esta nunca ter sido definida

Versões diferentes do motor de bases de dados Jet

Se executar diferentes versões do motor de bases de dados Jet no seu ambiente, poderá provocar danos numa base de dados do Access. Versões diferentes do Jet escrevem na base de dados de modos diferentes, podendo assim ser a causa dos danos numa base de dados.

Como determinar quais são os utilizadores/estações de trabalho que estão fazer com que o ficheiro seja assinalado como sendo suspeito

Em alguns casos, durante a resolução dos problemas que estão na origem dos erros da base de dados, poderá ser necessário verificar quais são os utilizadores que têm sessão iniciada na base de dados. Com o Microsoft Visual Basic for Applications no Access 2000, poderá imprimir uma lista dos utilizadores que têm sessão iniciada numa base de dados específica.

Para obter mais informações sobre como efectuar este procedimento e criar código de exemplo, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
198755  (http://support.microsoft.com/kb/198755/PT/ ) ACC2000: Verificar quem iniciou sessão na base de dados com o Jet UserRoster

Métodos de prevenção da ocorrência de danos

  • Evite falhas de energia durante os procedimentos de escrita na base de dados. As falhas de energia durante os procedimentos de escrita na base de dados podem fazer com que a mesma fique num estado suspeito.
  • Evite interromper as ligações de rede.
  • Evite que as ligações do Microsoft Jet sejam terminadas de forma incorrecta, como por exemplo devido a falhas de energia, encerramento manual ou encerramento da aplicação através do Gestor de tarefas.
  • Quando estiver a programar, feche todos os objectos DAO e ADO que tenha aberto. Os exemplos incluem objectos Recordset, QueryDef, TableDef e Database.
  • Os erros de sistema fatais provocam, quase sempre, um encerramento incorrecto. Se a base de dados tiver tendência para registar erros fatais, deverá resolver os erros antes que a base de dados fique demasiado danificada ao ponto de não ser possível abri-la ou recuperá-la.Para obter mais informações sobre erros fatais do sistema, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
    208488  (http://support.microsoft.com/kb/208488/PT/ ) ACC2000: Como resolver problemas de falhas de página inválida no Microsoft Access 2000
  • Compacte a base de dados com frequência.
  • Não execute o IPX num servidor baseado no Windows NT quando as bases de dados Jet estiverem localizadas na rede e o cliente for o Microsoft Windows 95 com IPX/SPX (Internet Packet Exchange/Sequenced Packet Exchange). Em vez disso, execute o protocolo TCP/IP no servidor baseado no Windows NT e uma pilha de protocolos dupla IPX e TCP/IP no cliente Win95. (O problema não será causado pelo procedimento Windows NT para Windows NT com IPX/SPX, nem pelo procedimento Novell para qualquer outro cliente.)
  • Evite um elevado número de operações de abertura e de fecho num ciclo (de 40.000 operações de abertura/fecho sucessivas a mais de 1.000.000).
  • Verifique se o mais recente Service Pack do Microsoft Jet está instalado em todos os computadores clientes que acedam ao ficheiro de base de dados.

Referências

Para mais informações sobre como reparar bases de dados, clique em Ajuda do Microsoft Access no menu Ajuda, escreva reparar no Assistente do Office ou no Assistente de respostas e clique em Procurar para visualizar o tópico.

Para obter mais informações sobre um utilitário transferível que também poderá ter capacidade para reparar uma base de dados danificada, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
273956  (http://support.microsoft.com/kb/273956/PT/ ) ACC2000: Utilitário de compactação Jet disponível no centro de transferências
Para obter mais informações sobre como resolver problemas de bases de dados em versões anteriores do Access, clique nos números de artigo seguintes para visualizar os artigos na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
279334  (http://support.microsoft.com/kb/279334/PT/ ) ACC97: Como reparar uma base de dados Jet 3.5 danificada
109953  (http://support.microsoft.com/kb/109953/PT/ ) ACC: Como resolver problemas/reparar bases de dados danificadas Jet 3.0 e versões anteriores

A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbcorrupt kbrepair kbtshoot kbdatabase kbhowto KB209137