svn cleanup: sqlite: образ диска базы данных искажен


94

Я пытался сделать, svn cleanupпотому что не могу зафиксировать изменения в своей рабочей копии, и у меня возникла следующая ошибка:

sqllite: образ диска базы данных искажен

При очистке не удалось обработать следующие пути

Что я могу сделать прямо сейчас?

Ответы:


99

У меня такая же проблема. Следующее сообщение в блоге помогло мне решить эту проблему: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Вы выполняете проверку целостности базы данных sqlite, которая отслеживает репозиторий (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Это должно сообщить о некоторых ошибках.

Тогда вы сможете очистить их, выполнив:

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

Если после этого ошибки по-прежнему возникают, у вас все равно есть возможность извлечь новую копию репозитория во временную папку и скопировать папку .svn из новой копии в старую. Тогда старая копия должна снова заработать, и вы сможете удалить временную папку.


6
это действительно решило мою проблему. Спасибо большое.
Эрдоган Куртур

17
Что делать, если по-прежнему появляется ошибка: образ диска базы данных искажен?
j будет

3
@jwill У меня также возникла ошибка после реализации решения, приведенного выше ... Но то, что я пробовал, - это просто проверить новую копию вашего репозитория, а затем перезаписать папку .svn новой копии проверки на старую ... Я решил свою проблему вот так ...
Рушаб Шах

6
Странно, я понимаюError: unable to identify the object to be reindexed
Pacerier

4
Ссылка polak.ro/…, кажется, постоянно не работает.
MadMike

21

Проверка целостности

sqlite3 .svn/wc.db "pragma integrity_check"

Очистить

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

Альтернативно

Вы можете сбросить содержимое базы данных, которое можно прочитать, в файл резервной копии, а затем вернуть его обратно в новый файл базы данных:

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
Это помогло с ошибкой, которая у меня была с другим программным обеспечением, так что спасибо, сэр!
Azirius

Для меня команда "переиндексировать узлы" не удалась, но мне помог альтернативный обходной путь (воссоздание базы данных из дампа)! Спасибо.
EvAlex

1
Я не выкинул все, но этого было достаточно. Прокрутил файл sql и изменил последний ROLLBACK;на COMMIT;перед закрытием .read dump_all.sql.
Ян Кэтиньш

2
Этот подход теперь, похоже, не работает с ошибкой 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), однако здесь есть обходной путь: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

Правильное исправление ошибки утверждения: 1. запустить sqlite3 .svn/wc.db 'PRAGMA user_version;'против исходной базы данных, чтобы получить правильный номер. 2. запустить sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'восстановленную версию с правильным номером.
Chronial

19

Очистка SVN не сработала. Папка SVN в моей локальной системе была повреждена. Поэтому я просто удалил папку, воссоздал новую и обновился из SVN. Это решило проблему!


1
Это, безусловно, самое простое решение. Получите новую рабочую копию и работайте с ней: svn co URL.
Jahmic

16

После отключения электроэнергии я обнаружил, что образ диска базы данных - ошибка неправильного формата, и предложенная команда переиндексации узлов не устранила все проблемы из-за нарушенных ограничений. Также процедура, описанная в http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E , не решила проблему.

Решение в моем случае:

  • Снова извлеките репозиторий svn во временную папку
  • Скопируйте, т.е. замените файл ".svn / wc.db" из новой кассы на поврежденный

Это может быть полезно, если исходная проверка svn содержит много измененных или неверсированных файлов, и вы не хотите переключаться на новую проверку svn.


13

Я скопировал папку .svn из каталога моего коллеги, и это устранило проблему.


Здесь мы также можем проверить новую рабочую копию только в той же системе, а затем заменить старую папку .svn новой папкой .svn, и таким образом мы также можем решить эту проблему ...
Рушаб Шах

3
  1. проверить этот svn в другом месте
  2. показать скрытый файл .svn
  3. заменить файл wc

это работает для меня!


2

Возможно, могло бы быть решение:

  1. щелкните правой кнопкой мыши по проекту
  2. команда -> отключить
  3. Выбрать: Также удалить ...

Теперь снова подключитесь:

  1. щелкните правой кнопкой мыши по проекту
  2. команда -> Поделиться проектом
  3. выберите свой repositorie: мой SVN(другой случай: git и т. д.)
  4. выберите вашу repositorieпапку

Заметка:

В моем случае я сделал резервную копию своих файлов. (безопасное возвращение: P)

Редактировать:

Я говорю о SVNплагине Eclipse:)


1

Вы видели этот пост на сайте подрывной деятельности? Вы также можете попробовать проверить и «исправить» базу данных напрямую, как описано здесь . (Учтите, что я не эксперт, я просто провел быстрый поиск в Google. Возможно, это вообще не связано с вашими проблемами).

Лично я бы попробовал еще раз проверить репо и повторно применить ваши изменения. Не уверены, возможно ли это в вашем случае?


Спасибо, позвольте мне увидеть ваше предложение.
Рубенс Мариуццо

повторная проверка - это то, чем я закончил, определенно самое простое решение (в зависимости от изменений, которые нужно применить повторно ^^)
elgui

В моем случае это не решило проблему, а также вызвало намного больше ошибок в Tortoise SVN, просто предупреждаю.
komorra

1

В ходе своих исследований я нашел 2 жизнеспособных решения.

  1. Если вы используете какой-либо тип подключений, ssh, samba, монтирование, отключение / размонтирование и повторное подключение / повторное подключение. Попробуйте еще раз, это часто решало проблему для меня. После этого вы можете выполнить очистку svn или просто продолжить работу в обычном режиме (в зависимости от того, когда возникла проблема). Перезагрузка моего компьютера также решила проблему один раз ... да, это глупо, я знаю!

  2. Иногда все, что нужно сделать, - это выполнить команду rm -rf для ваших файлов (или, если вы не знакомы с этим термином, просто удалить папку svn) и еще раз перепроверить репозиторий svn. Обратите внимание, что это не всегда решает проблему, и у вас также могут быть изменения, которые вы не хотите терять. Вот почему я использую его как второй вариант.

Надеюсь, это поможет вам, ребята!


1

Я решил проблему с визуальным повреждением файла svn server rep-cache.db.

Их два решения.

Остановите службу Visual SVN Server.

Загрузите оболочку sqllite3.exe с веб-сайта sqllite и скопируйте ее в папку db репо.

Введите следующие команды в командной строке в папке db репозитория.

- Первое решение -

sqlite3 rep-cache.db

.clone rep-cache-new.db

нажмите ctrl + c, чтобы выйти из sqllite.

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

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

- 2-е решение -

Удалите файл rep-cache.db

del rep-cache.db

он будет создан автоматически.


Спасибо, Мухаммад - просто подсказка, в которой я нуждался! Необходимо определить, связана ли проблема с sqlite db в вашей рабочей копии или с той, что находится на сервере. Попробуйте выполнить фиксацию в командной строке - если файл успешно передан и ошибка возникает при выполнении операции «Выполнение транзакции», то проблема, вероятно, на стороне сервера. Решение Мухаммеда здесь действует как заклинание. В этом старом архиве listserve
Powderflask 01

1

Я исправил это для случая, когда это происходило со мной, удалив скрытую папку .svn, а затем выполнив проверку папки по тому же URL-адресу.

Это не перезаписало ни один из моих измененных файлов, а просто обновило версии всех существующих файлов вместо получения свежих копий с сервера.


1

Не тратьте время на checking integrityудаление данных изwork queue таблицы, потому что это временные решения, и через некоторое время они вам вернутся.

Просто сделайте еще один checkoutи замените существующую папку .svn на новую. Сделайте это, updateи тогда все должно пройти гладко.


0

Если вы устанавливаете Tortoise SVN, перейдите в диспетчер задач и остановите его. Затем попробуйте удалить папку. это будет работать


0

Отмеченный ответ может быть правильным, согласно очистке подрывной деятельности. Но это определенно общая ошибка, которая привела меня сюда, на страницу с вопросами.

В нашем проекте есть зависимость System.Data.SQLite, и сообщение об ошибке было таким же:

образ диска базы данных искажен

В моем случае я выполнил следующий сценарий проверки и последующие через SQLiteStudio 3.1.1 .

pragma integrity_check

(Не знаю, поможет ли эта статистика, но я все равно ею поделюсь ...)

Файл DataBase используется для повседневного использования в течение 1,5 года через режим журнала подключений в памяти, и его размер составляет около 750 МБ. На одну таблицу приходилось примерно 140 000 записей, и 6 таблиц были такого размера.

После выполнения сценария проверки целостности через 30 минут выполнения было возвращено 11 строк.

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...

Все результаты касались индексов. После восстановления каждого индекса моя проблема была решена.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

После переиндексации проверка целостности дала «ок».

У меня была эта ошибка в прошлом году, и я восстановил БД из резервной копии, а затем повторно зафиксировал все изменения, что было настоящим кошмаром ...


-1

не нужно беспокоиться о парнях блокировки каталога.

Просто вам нужно сделать следующее: если sqllite3 не установлен, введите команду ниже,

>sudo apt-get install sqlite3

Откройте базу данных SVN, набрав эту команду,

>sqlite3 .svn/wc.db 

Теперь вам нужно только удалить записи о блокировках из SVN DB.

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

Процесс завершен. Вы можете работать со своим репозиторием SVN, выполнять операции фиксации, обновления, добавления и удаления без проблем.

:-)


-2

Во время разработки приложения я обнаружил, что сообщения приходят от частых и массовых операций INSERT и UPDATE. Не забудьте ВСТАВИТЬ и ОБНОВИТЬ несколько строк или данных за одну операцию.

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)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.