очищення svn: sqlite: образ диска бази даних неправильний


93

Я намагався зробити це, svn cleanupтому що не можу зафіксувати зміни в моїй робочій копії, і я отримав таку помилку:

sqllite: образ диска бази даних неправильний

Під час очищення не вдалося обробити такі шляхи

Що я можу зробити зараз?

Відповіді:


98

У мене була та сама проблема. Наступна публікація в блозі допомогла мені її вирішити: 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 нової копії замовлення на стару .. я вирішив свою проблему так ...
Rushabh Shah

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
Це допомогло з помилкою, яку я мав із різним програмним забезпеченням, тож спасибі сер!
Азіріус

Для мене команда "reindex nodes" не вдалася, але мені допоміг альтернативний обхідний шлях (відтворення db зі звалища)! Дякую.
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;'відновлену версію з правильним номером.
Хроніаль

19

Очищення SVN не спрацювало. Папка SVN у моїй локальній системі пошкоджена. Тож я просто видалив папку, відтворив нову та оновив із SVN. Це вирішило проблему!


1
Це, безумовно, найпростіше рішення. Отримайте нову робочу копію та працюйте з цим: svn co URL.
Яхміч

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 і за допомогою цього способу ми також можемо вирішити цю проблему ...
Rushabh Shah

3
  1. перегляньте цей svn в іншому місці
  2. показати прихований файл .svn
  3. замінити файл wc - -

це працює для мене!


2

Можливо, може бути рішенням:

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

Тепер знову підключіться знову:

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

Примітка:

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

Редагувати:

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


1

Ви бачили цю публікацію на сайті диверсій? Ви також можете спробувати перевірити та "виправити" базу даних безпосередньо, як описано тут . (Зауважте, що я не фахівець, я просто зробив швидкий пошук у Google. Можливо, це взагалі не пов’язано з вашими проблемами).

Особисто я спробую ще раз перевірити репо та повторно застосувати ваші зміни. Не впевнені, чи можливо це у вашому випадку?


Дякую, дозвольте побачити вашу пропозицію.
Рубенс Маріуццо

перевірка ще раз - це те, що я закінчив робити, безумовно, найлегше рішення (залежно від змін для повторного
подання

У моєму випадку це не вирішило проблему, а також спричинило набагато більше помилок у Tortoise SVN, просто попереджую.
коморра

1

Протягом своїх досліджень я знайшов 2 життєздатних рішення.

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

  2. Інколи все, що потрібно зробити, - це rm -rf ваші файли (або якщо ви не знайомі з цим терміном, просто видаліть свою папку svn) і ще раз перегляньте свій репозиторій svn. Зверніть увагу, що це не завжди вирішує проблему, і у вас також можуть бути зміни, які ви не хочете втратити. Саме тому я використовую його як другий варіант.

Сподіваюся, це допоможе вам, хлопці!


1

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

Їх два рішення.

Зупиніть службу Visual SVN Server.

Завантажте оболонку sqllite3.exe з веб-сайту sqllite і скопіюйте її в папку 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

він буде автоматично створений.


Дякую Мухаммеде - просто підказка, яка мені потрібна! Потрібно визначити, чи проблема пов’язана з базами даних sqlite у вашій робочій копії чи з сервером. Спробуйте здійснити фіксацію в командному рядку - якщо файл передано успішно, і помилка трапляється під час "Фіксація транзакції", то проблема, ймовірно, на стороні сервера. Резолюція Мухаммеда тут діє як шарм. Цей старий архів listserve
powderflask

1

Я виправив це для випадку, коли це сталося зі мною, видаливши приховану папку .svn, а потім здійснивши перевірку папки на ту саму URL-адресу.

Це не перезаписало жоден з моїх модифікованих файлів, а лише переглянуло версію всіх існуючих файлів, замість того, щоб захоплювати свіжі копії з сервера.


1

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

Просто зробіть інше checkoutі замініть існуючу папку .svn на нову. Зробіть, updateі тоді воно повинно пройти гладко.


0

Якщо ви встановлюєте Tornoise SVN, будь ласка, перейдіть до диспетчера завдань і зупиніть його. Потім спробуйте видалити папку. це спрацює


0

Позначена відповідь може бути правильною, згідно з очищенням диверсії. Але помилка, безумовно, є загальною, що призвело мене сюди, на цю сторінку запитань.

Наш проект має залежність System.Data.SQLite, і повідомлення про помилку було однаковим:

образ диска бази даних неправильний

У моєму випадку я виконав наступний сценарій перевірки та наступні дії через SQLiteStudio 3.1.1 .

pragma integrity_check

(Я не маю уявлення, чи допоможе ця статистика, але я все одно поділюсь ними ...)

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

Після виконання сценарію перевірки цілісності 11 рядків було повернуто через 30 хвилин часу виконання.

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)

-4

cd до папки, що містить .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.