svn temizleme: sqlite: veritabanı disk görüntüsü bozuk


96

Bir yapmaya çalışıyordum svn cleanupçünkü çalışma kopyamdaki değişiklikleri uygulayamıyorum ve aşağıdaki hatayı aldım:

sqllite: veritabanı disk görüntüsü bozuk

Temizleme, aşağıdaki yolları işleyemedi

Şimdi ne yapabilirim

Yanıtlar:


101

İlk olarak, depo kök dizininde command/ terminaldizininde açın (alt klasör olan .svnklasör):

cd /path/to/repository

sqlite3Yürütülebilir dosyayı indirin ve sqlite3klasörün köküne koyun .

Depoyu ( /path/to/repository/.svn/wc.db) takip eden sqlite veritabanında bir bütünlük kontrolü yaparsınız :

sqlite3 .svn/wc.db "pragma integrity_check"

Bu, bazı hataları bildirmelidir.

Ardından şunları yaparak bunları temizleyebilirsiniz:

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

Bundan sonra hala hatalar varsa, deponun yeni bir kopyasını geçici bir klasöre teslim alma ve .svn klasörünü yeni kopyadan eskisine kopyalama seçeneğiniz vardır. Daha sonra eski kopya tekrar çalışmalıdır ve geçici klasörü silebilirsiniz.


6
bu aslında sorunumu çözdü. çok teşekkür ederim.
Erdoğan Kurtur

17
Hala Hata alıyorsanız ne yaparsınız: veritabanı disk görüntüsü bozuk?
j,

3
@jwill, yukarıda verilen çözümü uyguladıktan sonra da hata aldım ... Ama denediğim şey, deponuzun yeni kopyasını kontrol etmek ve ardından yeni ödeme kopyasının .svn klasörünün üzerine eski olana yazmak ... sorunumu böyle çözdüm ...
Rushabh Şah

6
Garip, anladımError: unable to identify the object to be reindexed
Pacerier

4
Polak.ro/… Bağlantısı kalıcı olarak kapalı görünüyor.
MadMike

22

Bütünlük denetimi

sqlite3 .svn/wc.db "pragma integrity_check"

Temizlemek

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

Alternatif olarak

Bir yedekleme dosyasına okunabilen veritabanı içeriğini dökebilir, ardından onu yeni bir veritabanı dosyasına geri ekleyebilirsiniz:

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
Bu, farklı yazılımlarda yaşadığım bir hataya yardımcı oldu, bu yüzden teşekkürler efendim!
Azirius

Benim için "reindex düğümleri" komutu başarısız oldu, ancak alternatif bir çözüm (db'yi dökümden yeniden oluşturma) bana yardımcı oldu! Teşekkürler.
EvAlex

1
Her şeyi bir kenara atmadım ama yeterliydi. Sql dosyası üzerinden kaydırılan ve son değişmiş ROLLBACK;için COMMIT;Doung önce .read dump_all.sql.
Jan Katins

2
Bu yaklaşım şimdi hata nedeniyle başarısız görünüyor 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), ancak burada bir çözüm var: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

1
Onaylama hatası için doğru düzeltme şudur: 1. sqlite3 .svn/wc.db 'PRAGMA user_version;'Doğru sayıyı elde etmek için orijinal veritabanına karşı çalıştırın . 2. sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'doğru numaraya sahip geri yüklenen sürümle çalıştırın .
Chronial

20

SVN temizleme işe yaramadı. Yerel sistemimdeki SVN klasörü bozuldu. Bu yüzden klasörü sildim, yenisini oluşturdum ve SVN'den güncelledim. Bu sorunu çözdü!


1
Bu, açık ara en kolay çözümdür. Yeni bir çalışma kopyası alın ve bununla çalışın: svn co URL.
Jahmic

16

Bir güç kesintisinden sonra, veritabanı disk görüntüsüne rastladım hatalı biçimlendirilmiş bir hata ve önerilen yeniden dizin düğümleri komutu ihlal edilen kısıtlamalar nedeniyle tüm sorunları çözmedi. Ayrıca http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E'de açıklanan prosedür de sorunu çözmedi.

Benim durumumdaki çözüm:

  • Svn deposunu geçici bir klasöre tekrar kontrol edin
  • Yeni kullanıma alma işleminden bozuk olana ".svn / wc.db" dosyasını kopyalayın, yani değiştirin

Orijinal svn satın alma işleminiz birçok değiştirilmiş veya dönüştürülmemiş dosya içeriyorsa ve yeni bir svn denetimine geçmek istemiyorsanız, bu yararlı olabilir.


13

Meslektaşımın dizininden .svn klasörünü kopyaladım ve bu sorunu çözdü.


Burada sadece aynı sistemdeki yeni çalışma kopyasını kontrol edebilir ve sonra eski .svn klasörünü yeni .svn klasörüyle değiştirebiliriz ve bu yolla da bu sorunu çözebiliriz ...
Rushabh Shah

3
  1. bu svn'yi başka bir yerde kontrol edin
  2. gizli .svn dosyasını göster
  3. wc dosyasını değiştir

bu benim için çalışıyor!


2

Belki bir çözüm olabilir:

  1. proje üzerine fareyle sağ tıklayın
  2. takım -> bağlantıyı kes
  3. Seçin: Ayrıca sil ...

Şimdi tekrar bağlanın:

  1. proje üzerine fareyle sağ tıklayın
  2. ekip -> Projeyi paylaş
  3. senin repositorie: benimkini seç SVN(diğer durum: git, vb.)
  4. repositorieklasörünüzü seçin

Not:

Benim durumumda dosyalarımın yedeğini aldım. (güvenli geri dön: P)

Düzenle:

Ancak bahsettiğimiz SVNüzerinde eklentisi Eclipse:)


1

Bu gönderiyi yıkım sitesinde gördünüz mü ? Ayrıca, potansiyel olarak veritabanını doğrudan burada açıklandığı gibi doğrulamayı ve "düzeltmeyi" deneyebilirsiniz . (Uzman olmadığımı unutmayın, Google'da hızlı bir arama yaptım. Sorunlarınızla hiç ilgili olmayabilir).

Şahsen, depoyu tekrar kontrol etmeyi ve değişikliklerinizi yeniden uygulamayı deneyeceğim. Sizin durumunuzda bunun mümkün olup olmadığından emin değil misiniz?


Teşekkürler, önerinizi görmeme izin verin.
Rubens Mariuzzo

tekrar kontrol etmek en sonunda yaptığım şeydi, kesinlikle en kolay çözüm (yeniden uygulama değişikliklerine bağlı olarak ^^)
elgui

Benim durumum bu sorunu çözmedi, ayrıca Tortoise SVN'de çok daha fazla hataya neden oldu, sadece uyar.
komorra

1

Araştırmalarım boyunca 2 uygulanabilir çözüm buldum.

  1. Herhangi bir tür bağlantı kullanıyorsanız, ssh, samba, takma, bağlantıyı kesme / ayırma ve yeniden bağlama / yeniden bağlama. Tekrar deneyin, bu genellikle benim için sorunu çözdü. Bundan sonra svn temizliği yapabilir veya normal şekilde çalışmaya devam edebilirsiniz (sorunun ne zaman ortaya çıktığına bağlı olarak). Bilgisayarımı yeniden başlatmak da sorunu bir kez çözdü ... evet aptalca biliyorum!

  2. Bazen tek yapmanız gereken dosyalarınızı rm -rf (veya terime aşina değilseniz, svn klasörünüzü silin) ​​ve svn deponuzu bir kez daha kontrol etmektir. Lütfen bunun her zaman sorunu çözmediğini ve kaybetmek istemediğiniz değişikliklerin olabileceğini unutmayın. Bu yüzden ikinci seçenek olarak kullanıyorum.

Umarım bu size yardımcı olur!


1

Görsel svn sunucusu rep-cache.db bozulması sorunumu çözdüm.

İki çözüm var.

Visual SVN Server hizmetini durdurun.

Sqllite3.exe kabuğunu sqllite web sitesinden indirin ve bunu repo'nun db klasörüne kopyalayın.

Deponun db klasöründeki komut istemine aşağıdaki komutları yazın.

- İlk Çözüm -

sqlite3 rep-cache.db

.clone rep-cache-new.db

sqllite'dan çıkmak için ctrl + c tuşlarına basın.

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

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

- 2. Çözüm -

Rep-cache.db dosyasını silin

del rep-cache.db

otomatik olarak oluşturulacaktır.


Teşekkürler Muhammed - tam da ihtiyacım olan ipucu! Sorunun çalışan kopyanızdaki sqlite db (ler) ile mi yoksa sunucudaki mi olduğunu belirlemek gerekir. Kaydetmenizi komut satırında deneyin - dosya başarıyla aktarılırsa ve hata "İşlem Yapılırken" meydana gelirse, sorun muhtemelen sunucu tarafındadır. Muhammed'in buradaki kararı bir cazibe gibi çalışıyor. Bu eski listerve
powderflask

1

Bunu, gizli .svn klasörünü silerek ve ardından klasörde aynı URL'ye bir ödeme yaparak başıma gelen bir örnek için düzelttim.

Bu, değiştirilmiş dosyalarımın hiçbirinin üzerine yazmadı ve sunucudan yeni kopyalar almak yerine mevcut tüm dosyaların sürümlerini değiştirdi.


1

Tablodaki checking integrityverileri silerek ya da üzerinde zaman kaybetmeyin work queueçünkü bunlar geçici çözümlerdir ve bir süre sonra size geri dönecektir.

Başka bir tane yapın checkoutve mevcut .svn klasörünü yenisiyle değiştirin. Bir yapın updateve sonra düzgün gitmeli.


0

Tortoise SVN'yi kurarsanız, lütfen görev yöneticisine gidin ve durdurun. Ardından klasörü silmeyi deneyin. Çalışacak


0

Yıkım temizlemesine göre işaretli cevap doğru cevap olabilir. Ancak hata kesinlikle genel bir hata, bu da beni buraya, bu soru sayfasına yönlendirdi.

Projemiz System.Data.SQLite bağımlılığına sahip ve hata mesajı aynıydı:

veritabanı disk görüntüsü bozuk

Benim durumumda, aşağıdaki kontrol betiğini ve aşağıdakileri SQLiteStudio 3.1.1 ile çalıştırdım .

pragma integrity_check

(Bu istatistiklerin yardımcı olup olmayacağı konusunda hiçbir fikrim yok ama yine de paylaşacağım ...)

DataBase dosyası, Bellek üzerindeki bağlantı günlük modu aracılığıyla 1,5 yıldır günlük kullanımda kullanılıyor ve yaklaşık 750 MB büyüklüğündeydi. Tablo başına yaklaşık 140 bin kayıt vardı ve 6 tablo bu büyüklükteydi.

Yürütülmesi sonra Bütünlük Denetimi komut, 11 satır yürütme zamanı 30 dakika sonra iade edildi.

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

Tüm sonuçlar dizinlerle ilgiliydi. Her bir dizinin yeniden oluşturulmasının ardından sorunum çözüldü.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Yeniden indekslemeden sonra bütünlük kontrolü "tamam" sonucunu verdi.

Geçen yıl bu hatayı aldım ve DB'yi yedeklemeden geri yükledim ve ardından tüm değişiklikleri yeniden yaptım, bu gerçek bir kabustu ...


-1

bir dizin kilidi için endişelenmenize gerek yok çocuklar.

Sadece yapmanız gereken, sqllite3 kurulu değilse aşağıdaki komutu yazınız,

>sudo apt-get install sqlite3

Bu komutu yazarak SVN veritabanını açın,

>sqlite3 .svn/wc.db 

Şimdi yapmanız gereken, SVN DB'den kilit girişlerini kaldırmaktır.

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

İşlem tamamlandı. SVN deponuz üzerinde çalışabilir, işlemlerinizi gerçekleştirebilir, güncelleyebilir, ekleyebilir, kaldırabilirsiniz.

:-)


-2

Uygulama geliştirme sırasında mesajların sık ve büyük INSERT ve UPDATE işlemlerinden geldiğini fark ettim. Tek bir işlemle birden çok satırı veya veriyi EKLEYİN ve GÜNCELLEŞTİRDİĞİNİZDEN emin olun.

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 içeren klasöre cd

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.