SVNクリーンアップ:sqlite:データベースディスクイメージの形式が正しくありません


93

私がやろうとしたsvn cleanup私は、私の作業コピーの変更をコミットすることはできませんので、私は次のエラーを得ました:

sqllite:データベースディスクイメージの形式が正しくありません

クリーンアップで次のパスを処理できませんでした

今何ができますか?

回答:


98

私も同じ問題を抱えていました。次のブログ投稿が解決に役立ちました:http : //www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

リポジトリ(/.svn/wc.db)を追跡するsqliteデータベースで整合性チェックを実行します。

sqlite3 .svn/wc.db "pragma integrity_check"

それはいくつかのエラーを報告するはずです。

次に、次のようにしてそれらをクリーンアップできる場合があります。

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

その後もエラーが発生する場合は、リポジトリの新しいコピーを一時フォルダーにチェックアウトし、.svnフォルダーを新しいコピーから古いフォルダーにコピーするオプションがあります。その後、古いコピーが再び機能し、一時フォルダーを削除できます。


6
これは実際に私の問題を解決しました。どうもありがとうございました。
Erdogan Kurtur 2013年

17
それでもエラーが発生する場合はどうしますか:データベースディスクイメージの形式が間違っていますか?
jは14

3
@jwill上記の解決策を実行した後もエラーが発生しました...しかし、私が試したのは、リポジトリの新しいコピーをチェックアウトし、新しいチェックアウトコピーの.svnフォルダを古いものに上書きすることです..このように私の問題を解決しました...
Rushabh Shah 2015

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 2016年

1
すべてを捨てたわけではありませんが、それで十分でした。sqlファイルをスクロールして、ファイナルROLLBACK;COMMIT;beforeに変更しました.read dump_all.sql
Jan Katins

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;'正しい番号で復元されたバージョンに対して実行します。
クロニアル

18

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フォルダーに置き換えることもできます。これにより、この問題も解決できます...
Rushabh Shah

3
  1. 別の場所でこのSVNをチェックしてください
  2. 非表示の.svnファイルを表示
  3. wcファイルを置き換える

これは私のために働く!


2

多分、解決策になる可能性があります:

  1. プロジェクトを右クリック
  2. チーム->切断
  3. 選択:次も削除...

次に、再度接続します。

  1. プロジェクトを右クリック
  2. チーム->プロジェクトの共有
  3. あなたを選択してくださいrepositorie:私のものSVNの場合:gitなど)
  4. repositorieフォルダを選択してください

注意:

私の場合、ファイルのバックアップを作成しました。(安全ウルバック:P)

編集:

私はSVN上のプラグインについて話しているEclipse:)


1

この投稿をsubversionサイトで見ましたか?ここで説明されているように、データベースを直接検証して「修正」することもできます。。(私は専門家ではないことに注意してください、私は簡単なグーグル検索をしました。あなたの問題に全く関係がないかもしれません)。

個人的には、もう一度リポジトリをチェックアウトして、変更を再適用してみます。あなたの場合でもこれが可能かどうかわかりませんか?


よろしくお願いします。
Rubens Mariuzzo

もう一度チェックアウトするのが私がやったことで、間違いなく最も簡単な解決策です(再適用する変更に応じて^^)
elgui

私の場合、これで問題は解決しませんでしたが、Tortoise SVNでさらに多くのエラーが発生しました。警告します。
komorra 2013

1

私の研究を通じて、私は2つの実行可能な解決策を見つけました。

  1. ssh、samba、マウント、切断/アンマウント、再接続/再マウントのいずれかのタイプの接続を使用している場合。再試行してください。これで問題が解決することがよくあります。その後、svnクリーンアップを実行するか、通常どおり作業を続けることができます(問題がいつ発生したかによります)。コンピュータを再起動すると、問題が1回修正されました...

  2. 場合によっては、ファイルをrm -rfする(または、用語に慣れていない場合は、svnフォルダーを削除する)だけで、svnリポジトリをもう一度チェックアウトすることもあります。これは必ずしも問題を解決するわけではなく、失うことを望まない変更がある可能性があることに注意してください。これが、2番目のオプションとして使用する理由です。

これが皆さんのお役に立てば幸いです!


1

ビジュアルsvnサーバーのrep-cache.db破損の問題を解決しました。

それらは2つのソリューションです。

Visual SVN Serverサービスを停止します。

sqlliteウェブサイトからsqllite3.exeシェルをダウンロードし、それをrepoの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にあるのか、サーバーにあるのかを判断する必要があります。コマンドラインでコミットを試してください-ファイルが正常に転送され、「トランザクションのコミット」中にエラーが発生する場合、問題はおそらくサーバー側にあります。ここでのムハンマドの決議は魅力のように機能します。この古いリストサーブアーカイブの詳細は次のとおり
powderflask

1

非表示の.svnフォルダーを削除してから、フォルダーで同じURLへのチェックアウトを実行することで、この問題が発生した場合の問題を修正しました。

これにより、変更されたファイルは上書きされず、サーバーから新しいコピーを取得する代わりに、既存のファイルのすべてにバージョンが付けられました。


1

これらは一時的な解決策であり、しばらくすると元に戻るため、時間を無駄にしchecking integrityたり、work queueテーブルからデータを削除したりしないでください。

別の操作をcheckout行い、既存の.svnフォルダーを新しいフォルダーに置き換えます。実行するupdateと、スムーズになります。


0

Tortoise SVNをインストールする場合は、タスクマネージャに移動して停止してください。次に、フォルダを削除してみます。それが動作します


0

Subversionのクリーンアップによると、マークされた答えは正しいものである可能性があります。しかし、間違いは間違いなく一般的なものであり、この質問ページに私を導きました。

私たちのプロジェクトには依存関係System.Data.SQLiteがあり、エラーメッセージは同じでした。

データベースディスクイメージの形式が正しくありません

私の場合、SQLiteStudio 3.1.1を介して次のチェックスクリプトと次のスクリプトを実行しました。

pragma integrity_check

(これらの統計が役立つかどうかはわかりませんが、とにかくそれらを共有します...)

データベースファイルは、メモリの接続ジャーナルモードを介して、1.5年間毎日使用され、約750 MBのサイズでした。テーブルごとに約140Kのレコードがあり、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;

インデックスを再作成した後、整合性チェックは「OK」となりました。

昨年このエラーが発生し、バックアップからDBを復元し、すべての変更を再コミットしました。これは本当に悪夢でした...

この答えが何らかの形で役立つことを願っています。


-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操作から送信されていることがわかりました。1つの操作で複数の行またはデータを挿入および更新してください。

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

.svnを含むフォルダーにcd

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.