очистка SVN: sqlite: образ диска базы данных искажен

78

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

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

Изображение 26

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

Теги:
svn
tortoisesvn

14 ответов

81
Лучший ответ

У меня была та же проблема. Следующее сообщение в блоге помогло мне решить эту проблему: 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
    это фактически решило мою проблему. большое спасибо вам.
  • 14
    Что делать, если вы все еще получаете сообщение об ошибке: образ диска базы данных искажен?
Показать ещё 14 комментариев
16

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

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
    Это помогло с ошибкой, которую я имел с другим программным обеспечением, так что спасибо, сэр!
  • 0
    Для меня команда "reindex node" не удалась, но альтернативный обходной путь (воссоздание БД из дампа) помог мне! Благодарю.
Показать ещё 2 комментария
16

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

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

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

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

После отключения электроэнергии я столкнулся с ошибкой в ​​образе диска базы данных, и предлагаемая команда узлов реиндекса не устранила все проблемы из-за нарушенных ограничений. Также процедура, описанная в http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%[email protected]%3E, не решила проблему.

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

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

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

2

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

  • щелчок правой кнопкой мыши по проекту
  • команда → отключить
  • Выбрать: Также удалить...

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

  • щелчок правой кнопкой мыши по проекту
  • команда → Поделиться проектом
  • выберите repositorie: mine SVN (в другом случае: git и т.д.)
  • выберите папку repositorie

Примечание:

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

Изменить:

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

1

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

Это два решения.

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

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

Введите в командной строке в папке repo 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

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

  • 0
    Спасибо Мухаммеду - просто ключ, который мне был нужен! Необходимо определить, связана ли проблема с базой данных sqlite в вашей рабочей копии или на сервере. Попробуйте выполнить коммит в командной строке - если файл успешно передан и ошибка возникает во время «фиксации транзакции», то проблема, вероятно, на стороне сервера. Резолюция Мухаммеда здесь работает как очарование. Этот старый архив listserve имеет больше деталей: svn.haxx.se/users/archive-2010-12/0257.shtml
1

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

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

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

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

1

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

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

  • 0
    Спасибо, позвольте мне увидеть ваше предложение.
  • 0
    проверка снова - это то, что я в итоге сделал, определенно самое простое решение (в зависимости от изменений, чтобы повторно применить ^^)
Показать ещё 3 комментария
0

Во время разработки приложения я обнаружил, что сообщения поступают из частых и массивных операций INSERT и UPDATE. Убедитесь, что 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)
0
  • проверить это svn в другом месте
  • показать скрытый файл .svn
  • заменить файл wc

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

0

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

Просто вам нужно сделать, Если 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, выполнять, обновлять, добавлять, удалять операции без проблем.

: -)

0

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

-3

cd в папку, содержащую .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
  • 0
    Это прекрасно работает в SVN 1.7 и выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню