потерянная история python - база данных заблокирована - PullRequest
0 голосов
/ 24 марта 2020

Играл с командами истории i python, экспериментировал с комбинацией -l и -g для поиска ограниченного количества истории и использовал -n, чтобы увидеть, из какого сеанса пришла команда.

Внезапно я получил ошибку (у меня sh у меня все еще был точный текст на моем экране) ... что-то о потоке истории, которое встретилось, и ошибка остановилась, и история больше не будет сохранена. И это также говорит о «блокировке базы данных». После того, как это произошло,% history не будет вызывать какую-либо историю.

Так что я остановился и перезапустил i python и обнаружил, что у него есть история только с недавно перезапущенной сессии. Я остановился и снова перезапустился, и даже попытался закрыть и снова открыть окно WSL-Ubuntu, но безуспешно. Похоже, я потерял месяцы и месяцы истории.

Тогда я решил поискать файл истории i python и нашел этот маленький драгоценный камень:

dino@DINO:~$ ls -l $( ipython locate profile default )
total 14132
drwxrwxrwx 1 dino dino      512 Jul 17  2019 db
-rw-r--r-- 1 dino dino 14442496 Mar 24 14:16 history-corrupt-2020-03-24T14.17.27.480963.sqlite
-rw-r--r-- 1 dino dino    28672 Mar 24 14:24 history.sqlite
drwxrwxrwx 1 dino dino      512 Mar 18  2019 log
drwx------ 1 dino dino      512 Mar 18  2019 pid
drwx------ 1 dino dino      512 Mar 18  2019 security
drwxrwxrwx 1 dino dino      512 Mar 18  2019 startup

Вау ! Посмотри на это! 14442496 Mar 24 14:16 history-corrupt-2020-03-24T14.17.27.480963.sqlite Похоже, я python действительно сохранил всю эту историю! Теперь вопрос в том, есть ли у кого-нибудь идеи, как я могу найти и удалить повреждение из файла sqlite и восстановить всю или, возможно, большую часть моей истории ??

1 Ответ

0 голосов
/ 25 марта 2020

Да, я исправил это! Итак, вот что я сделал. С некоторым поиском я обнаружил эту программу под названием «sqlitebrowser» и нашел эту другую страницу с разделом под названием «Как восстановить базу данных SQLite?» , в котором объясняется, что иногда можно исправить SQLite базы данных путем экспорта базы данных в файл SQL, а затем импорта файла SQL для создания новой версии базы данных.

Так что я попытался, но когда я импортировал в файле SQL я получил сообщение о том, что произошел сбой из-за УНИКАЛЬНОГО ограничения на таблицу «сессий» и что он отменял транзакцию.

К сожалению, когда я выполнил экспортируя в SQL, я выбрал опцию, чтобы сгруппировать вставки в как можно меньшее количество SQL команд, чтобы развернуть и развернуть всю таблицу «сессий». Позже я понял, что, если бы я не сгруппировал вставки, возможно, что импорт исправил бы базу данных (просто сбой в тех транзакциях, которые содержали повторяющиеся сеансы).

Однако в то время я еще не был уверен, что происходит, и не думал go возвращаться и реэкспортировать, чтобы восстановить SQL с большим количеством отдельных вставок.

Вместо этого я решил просмотреть файл SQL на наличие дубликатов вставок в таблице «сессий». Действительно, с некоторыми командами sed и sort (sort против sort -u, за которыми следует diff), я смог определить, что сеансы с 227 по 236 были где-то дважды!

Поэтому я удалил дубликаты из файла SQL, а затем снова использовал sqlitebrowser , чтобы импортировать файл SQL и заново создать IPython history.sqlite файл. Затем я запустил i python и обнаружил, что% history magi c снова смог получить доступ ко всей моей истории.

Пожалуйста, дайте мне знать с комментарием и / или проголосуйте, если этот ответ кому-нибудь пригодится. Всего наилучшего.

...