svn cleanup: sqlite: a imagem do disco do banco de dados está malformada


93

Eu estava tentando fazer um svn cleanupporque não consigo enviar as alterações em minha cópia de trabalho e recebi o seguinte erro:

sqllite: a imagem do disco do banco de dados está malformada

A limpeza falhou ao processar os seguintes caminhos

O que posso fazer agora?

Respostas:


98

Eu tive o mesmo problema. A seguinte postagem do blog me ajudou a resolver isso: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Você faz uma verificação de integridade no banco de dados sqlite que rastreia o repositório (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Isso deve relatar alguns erros.

Então você poderá limpá-los fazendo:

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

Se ainda houver erros depois disso, você ainda terá a opção de fazer o check-out de uma nova cópia do repositório para uma pasta temporária e copiar a pasta .svn da nova cópia para a antiga. Em seguida, a cópia antiga deve funcionar novamente e você pode excluir a pasta temporária.


6
isso realmente resolveu meu problema. Muito obrigado.
Erdogan Kurtur

17
O que você faz se ainda obtiver Erro: a imagem do disco do banco de dados está malformada?
j será

3
@jwill Eu também recebi um erro após implementar a solução fornecida acima ... Mas o que eu tentei é simplesmente fazer o checkout de uma cópia nova do seu repositório e então sobrescrever a pasta .svn da nova cópia de checkout para a antiga ... resolvi meu problema assim ...
Rushabh Shah

6
Estranho, entendiError: unable to identify the object to be reindexed
Pacerier

4
O link polak.ro/… parece estar permanentemente fora do ar.
MadMike

21

Verificação de integridade

sqlite3 .svn/wc.db "pragma integrity_check"

Limpar

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

alternativamente

Você pode despejar o conteúdo do banco de dados que pode ser lido em um arquivo de backup e, em seguida, colocá-lo de volta em um novo arquivo de banco de dados:

sqlite3 .svn/wc.db

sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

mv .svn/wc.db .svn/wc-corrupt.db
sqlite3 .svn/wc.db

sqlite> .read dump_all.sql
sqlite> .exit

2
Isso ajudou com um erro que estava tendo com um software diferente, então, obrigado, senhor!
Azirius

Para mim, o comando "reindex nodes" falhou, mas uma solução alternativa (recriar o banco de dados do dump) me ajudou! Obrigado.
EvAlex

1
Não mandei esvaziar tudo, mas foi o suficiente. Percorreu o arquivo sql e mudou o final ROLLBACK;para COMMIT;antes de doung o .read dump_all.sql.
Jan Katins,

2
Esta abordagem agora parece falhar com o erro svn: E235000: In file 'D:\Development\SVN\Releases\TortoiseSVN-1.9.7\ext\subversion\subversion\libsvn_wc\wc_db_wcroot.c' line 311: assertion failed (format >= 1), no entanto, há uma solução alternativa aqui: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

A correção adequada para o erro de asserção é: 1. execute sqlite3 .svn/wc.db 'PRAGMA user_version;'no banco de dados original para obter o número correto. 2. executar sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'contra a versão restaurada com o número correto.
Crônico de

19

A limpeza do SVN não funcionou. A pasta SVN em meu sistema local foi corrompida. Então, acabei de excluir a pasta, recriei uma nova e atualizei do SVN. Isso resolveu o problema!


1
Esta é de longe a solução mais fácil. Obtenha uma nova cópia de trabalho e trabalhe com: svn co URL.
Jahmic de

16

Após um apagão de energia, encontrei a imagem do disco do banco de dados com um erro malformado e o comando de nós de reindexação sugerido não corrigiu todos os problemas devido a restrições violadas. Além disso, o procedimento descrito em http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E não resolveu o problema.

Solução no meu caso:

  • Faça check-out do repositório svn novamente em uma pasta temporária
  • Copie, ou seja, substitua o arquivo ".svn / wc.db" do novo checkout para o corrompido

Isso pode ser útil, se o seu svn checkout original contém muitos arquivos modificados ou não versionados e você não deseja mudar para um svn checkout novo.


13

Copiei a pasta .svn do diretório do meu colega de trabalho e isso corrigiu o problema.


Aqui também podemos verificar a nova cópia de trabalho no mesmo sistema e, em seguida, substituir a pasta .svn antiga pela nova pasta .svn e, dessa forma, também podemos resolver este problema ...
Rushabh Shah

3
  1. verifique este svn em outro lugar
  2. mostrar arquivo .svn oculto
  3. substituir arquivo wc

isso funciona para mim!


2

Talvez, poderia ser uma solução:

  1. clique com o botão direito do mouse sobre o projeto
  2. equipe -> desconectar
  3. Selecione: Excluir também ...

Agora, reconecte-se novamente:

  1. clique com o botão direito do mouse sobre o projeto
  2. equipe -> Compartilhar projeto
  3. selecione seu repositorie: meu SVN(outro caso: git, etc)
  4. selecione sua repositoriepasta

Nota:

No meu caso, fiz um backup dos meus arquivos. (seguro de volta: P)

Editar:

Estou falando sobre SVNplugin no Eclipse:)


1

Você viu esta postagem no site do Subversion? Você também pode tentar validar e "consertar" o banco de dados diretamente, conforme descrito aqui . (Observe que não sou especialista, acabei de fazer uma pesquisa rápida no Google. Pode não estar relacionado aos seus problemas de forma alguma).

Pessoalmente, eu tentaria verificar o repositório novamente e reaplicar suas alterações. Não tem certeza se isso é possível no seu caso?


Obrigado, deixe-me ver sua sugestão.
Rubens Mariuzzo

verificar novamente foi o que acabei fazendo, definitivamente a solução mais fácil (dependendo das mudanças para reaplicar ^^)
elgui

No meu caso isso não resolveu o problema, também causou muito mais erros no Tortoise SVN, só avisar.
komorra

1

Ao longo das minhas pesquisas, encontrei 2 soluções viáveis.

  1. Se você estiver usando qualquer tipo de conexão, ssh, samba, montagem, desconectar / desmontar e reconectar / remontar. Tente novamente, isso geralmente resolve o problema para mim. Depois disso, você pode executar o svn cleanup ou apenas continuar trabalhando normalmente (dependendo de quando o problema apareceu). Reinicializar meu computador também resolveu o problema uma vez ... sim, é burro, eu sei!

  2. Algumas vezes, tudo o que há a fazer é rm -rf seus arquivos (ou se você não estiver familiarizado com o termo, apenas exclua sua pasta svn), e verifique novamente seu repositório svn. Observe que isso nem sempre resolve o problema e você também pode ter alterações que não deseja perder. É por isso que o uso como segunda opção.

Espero que isso ajude vocês!


1

Resolvi meu problema de corrupção de rep-cache.db do servidor svn visual.

São duas soluções.

Pare o serviço do Visual SVN Server.

Baixe o shell sqllite3.exe do site sqllite e copie-o para a pasta db do repo.

Digite os seguintes comandos no prompt de comando na pasta db do repo.

- Primeira Solução -

sqlite3 rep-cache.db

.clone rep-cache-new.db

pressione ctrl + c para sair do sqllite.

ren rep-cache.db rep-cache-old.db

ren re-cache-new.db rep-cache.db

- 2ª Solução -

Exclua o rep-cache.db

del rep-cache.db

ele será criado automaticamente.


Obrigado Muhammad - apenas a pista de que eu precisava! É necessário determinar se o problema é com o (s) banco de dados sqlite (s) em sua cópia de trabalho ou no servidor. Tente seu commit na linha de comando - se o arquivo for transferido com sucesso e o erro ocorrer durante o "Committing Transaction", então o problema provavelmente está no lado do servidor. A resolução de Muhammad aqui funciona perfeitamente. Este antigo arquivo de listserve tem mais detalhes: svn.haxx.se/users/archive-2010-12/0257.shtml
powderflask

1

Corrigi isso para uma instância em que acontecia comigo, excluindo a pasta oculta .svn e, em seguida, realizando uma verificação na pasta para o mesmo URL.

Isso não substituiu nenhum dos meus arquivos modificados e apenas modificou a versão de todos os arquivos existentes em vez de obter novas cópias do servidor.


1

Não perca seu tempo checking integrityexcluindo dados da work queuetabela, porque essas são soluções temporárias e você receberá uma resposta após um tempo.

Basta fazer outro checkoute substituir a pasta .svn existente pela nova. Faça um updatee então deve ficar bom.


0

Se você instalar o Tortoise SVN, vá para o gerenciador de tarefas e pare-o. Em seguida, tente excluir a pasta. vai funcionar


0

A resposta marcada pode ser a correta, de acordo com a limpeza do Subversion. Mas o erro é definitivamente genérico, o que me trouxe até aqui, esta página de perguntas.

Nosso projeto possui a dependência System.Data.SQLite e a mensagem de erro era a mesma:

a imagem do disco do banco de dados está malformada

No meu caso, executei o seguinte script de verificação e os seguintes via SQLiteStudio 3.1.1 .

pragma integrity_check

(Não tenho ideia se essas estatísticas ajudariam, mas vou compartilhá-las de qualquer maneira ...)

O arquivo DataBase está sendo usado diariamente por 1,5 ano, por meio do modo de diário de conexão na memória, e tinha cerca de 750 MB. Havia aproximadamente 140 mil registros por tabela e 6 tabelas eram desse tamanho.

Após a execução do script de verificação de integridade , 11 linhas foram retornadas após 30 minutos do tempo de execução.

wrong # of entries in index sqlite_autoindex_MyTableName_1
wrong # of entries in index MyOtherTableAndOrIndexName_1
wrong # of entries in index sqlite_autoindex_MyOtherTableAndOrIndexName_2
etc...

Todos os resultados foram sobre os índices. Acompanhando a reconstrução de cada índice, meu problema foi resolvido.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Após a reindexação, a verificação de integridade resultou "ok".

Eu recebi esse erro no ano passado e restaurei o banco de dados do backup e, em seguida, re-commitado todas as alterações, o que foi um verdadeiro pesadelo ...


-1

não há necessidade de se preocupar com um bloqueio de diretório pessoal.

Só o que você precisa fazer é, se sqllite3 não estiver instalado, digite o comando abaixo,

>sudo apt-get install sqlite3

Abra o banco de dados SVN digitando este comando,

>sqlite3 .svn/wc.db 

Agora, tudo o que você precisa fazer é remover as entradas de bloqueios do banco de dados SVN.

sqlite>  select * from wc_lock;
1|-1           
sqlite>  delete from wc_lock;
sqlite>  select * from wc_lock;
sqlite>  .q

Processo completo. Você pode trabalhar em seu repositório SVN, submeter, atualizar, adicionar e remover operações sem problemas.

:-)


-2

Durante o desenvolvimento do aplicativo, descobri que as mensagens vêm das operações INSERT e UPDATE frequentes e massivas. Certifique-se de inserir e ATUALIZAR várias linhas ou dados em uma única operação.

var updateStatementString : String! = ""

for item in cardids {

let newstring = "UPDATE "+TABLE_NAME+" SET pendingImages = '\(pendingImage)\' WHERE cardId = '\(item)\';"
            updateStatementString.append(newstring)

        }


        print(updateStatementString)
        let results = dbManager.sharedInstance.update(updateStatementString: updateStatementString)

        return Int64(results)

-4

cd para pasta contendo .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.