2013-05-07 27 views
5

Sık sık çöker (Zotero) bir programım var, yeniden başlatılmadan (ki gerçekten kaçınmak istiyorum) SQLite veritabanı kilitli ve yeniden başlatılan program tarafından kullanım için erişilemez. Yani bu (benim durumumda gerçek dosya yerine jenerik isim, db.sqlite kullanılarak zotero.sqlite) çalışmaz: bir cevap here dayanarakBir SQLite veritabanı etkin bir şekilde kilidini

sqlite3 db.sqlite 
sqlite> .backup main backup.sqlite 
Error: database is locked 

denedim:

echo ".dump" | sqlite3 db.sqlite | sqlite3 db.sqlite2 
mv db.sqlite2 db.sqlite 

db.sqlite2 olduğunu 0KB, bu açıkça işe yaramadı. another thread esinlenerek, ben de db.sqlite için dosya boyutuyla ilgili olarak biraz daha küçük db.sqlite2 yol açar

echo '.dump' | sqlite3 db.sqlite > db.dump 
cat db.dump | sqlite3 db.sqlite2 
mv db.sqlite2 db.sqlite 

çalıştı ve Zotero'nun (veritabanı gerektirir dosyası) içeriğini tanımak mümkün değildi.

Yani bu bunu yapmanın çok kaba kuvvet yolu gibi görünüyor, ama çalıştı:

cp -pv db.sqlite db.sqlite2 
rm -f db.sqlite 
mv db.sqlite2 db.sqlite 

bu çözüme herhangi sakınca varsa ve diğer yöntemler bu daha önce önerilmiştir merak ediyorum.

+2

Kilitlenen işlemin hala takılmadığından emin misiniz? –

+0

Eh, 'ps -aux | grep zotero' zombi süreci gibi görünen '' zotero-bin '' 'i verir ve ana süreci '1' dir, ben de onu öldüremem. Bu neden rm -f'ye sahip olduğumu açıklıyor? – hatmatrix

+0

'init' otomatik olarak zombileri toplar. Bu zotero sürecinin durumu (STAT) nedir? –

cevap

2

İşlem denetimi için zotero, eşzamanlı erişim sırasında veritabanı tutarsızlıklarını önlemek için masa tabanlı kilitleme kullanıyor olabilir. Bir kullanıcı veritabanını kullandığında, tabloları kilitler, böylece yalnızca onu kullanabilir ve veritabanını tutarsız bir durumda görmelerini engelleyebilir. Ancak çöktüğü zaman bu kilitleri serbest bırakmaz.

Kuyu kurulduktan sonra bir kurulum veritabanında, tutarsız bir durumda veya kilitli olan tablolarda bırakılmaları ve bunları el ile bırakmak zorunda kalmanız için işlemin geri alınması (geri alınmaz) ve kilitlerin serbest bırakılması gerekir.

Internet'te bir Ağ Dosya Sistemi üzerindeki veritabanını saklamanın, SQLites kilitleme mekanizmasına engel olabileceğini, veritabanı konumunu hiçbir ağ konumuyla değiştirerek, başka bir yerde olmadığı sürece bu sorunlardan kaçınmanız gerektiğini okudum.

başka bir yere ise senin veritabanının bir kopyasını yapmak ve denemek ve bu neden olabilir vb kurmak meydana gelebilecek eksiklikleri belirlemek ve bunları onarmak için zotero veritabanı onarımı aracını kullanarak öneriyoruz: Umarım https://www.zotero.org/utils/dbfix/

Bu yardımcı olur.

İlgili konular