svn cleanup: sqlite: อิมเมจดิสก์ฐานข้อมูลผิดรูปแบบ


94

ฉันพยายามทำsvn cleanupเนื่องจากฉันไม่สามารถยอมรับการเปลี่ยนแปลงในสำเนาการทำงานของฉันและฉันได้รับข้อผิดพลาดต่อไปนี้:

sqllite: อิมเมจดิสก์ฐานข้อมูลผิดรูปแบบ

การล้างข้อมูลไม่สามารถประมวลผลเส้นทางต่อไปนี้

ตอนนี้ฉันทำอะไรได้บ้าง?

คำตอบ:


99

ผมมีปัญหาเหมือนกัน. บล็อกโพสต์ต่อไปนี้ช่วยฉันแก้ไขได้: 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
นี่ช่วยแก้ปัญหาของฉันได้จริง ขอบคุณมาก.
Erdogan Kurtur

17
คุณจะทำอย่างไรหากคุณยังคงได้รับข้อผิดพลาด: อิมเมจดิสก์ฐานข้อมูลผิดรูปแบบ?
จะ

3
ฉันยังได้รับข้อผิดพลาดหลังจากใช้โซลูชันที่ให้ไว้ข้างต้น ... แต่สิ่งที่ฉันลองคือเพียงแค่ชำระเงินสำเนาใหม่ของที่เก็บของคุณจากนั้นเขียนทับโฟลเดอร์. svn ของสำเนาเช็คเอาต์ใหม่เป็นไฟล์เก่า ... ฉันแก้ไขปัญหาของฉันเช่นนี้ ...
Rushabh Shah

6
แปลกฉันเข้าใจError: unable to identify the object to be reindexed
Pacerier

4
ดูเหมือนว่าLink 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

สำหรับฉันคำสั่ง "reindex nodes" ล้มเหลว แต่วิธีแก้ปัญหาทางเลือก (การสร้างฐานข้อมูลใหม่จากการถ่ายโอนข้อมูล) ช่วยฉันได้! ขอบคุณ.
EvAlex

1
ฉันไม่ได้ทิ้งทุกอย่าง แต่ก็เพียงพอแล้ว เลื่อนผ่านไฟล์ sql และเปลี่ยนไฟล์สุดท้ายROLLBACK;เป็นCOMMIT;ก่อนที่จะดำเนินการไฟล์.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;'กับเวอร์ชันที่กู้คืนด้วยหมายเลขที่ถูกต้อง
ตาม

19

การล้างข้อมูล SVN ไม่ทำงาน โฟลเดอร์ SVN ในระบบภายในของฉันเสียหาย ดังนั้นฉันเพิ่งลบโฟลเดอร์สร้างโฟลเดอร์ใหม่และอัปเดตจาก SVN ที่แก้ปัญหา!


1
นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุด รับสำเนาที่ใช้งานได้ใหม่และทำงานกับสิ่งนั้น: svn co URL
Jahmic

16

หลังจากไฟดับฉันพบข้อผิดพลาดในดิสก์อิมเมจฐานข้อมูลผิดรูปแบบและคำสั่ง reindex nodes ที่แนะนำไม่ได้แก้ไขปัญหาทั้งหมดเนื่องจากข้อ จำกัด ที่ละเมิด นอกจากนี้ขั้นตอนที่อธิบายไว้ใน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

คุณเคยเห็นโพสต์นี้ในไซต์การโค่นล้มหรือไม่? คุณยังสามารถลองตรวจสอบที่อาจเกิดขึ้นและ "แก้ไข" ฐานข้อมูลโดยตรงตามที่อธิบายไว้ที่นี่ (โปรดทราบว่าฉันไม่ใช่ผู้เชี่ยวชาญฉันเพิ่งค้นหาโดย Google อย่างรวดเร็วอาจไม่เกี่ยวข้องกับปัญหาของคุณเลย)

ส่วนตัวฉันจะลองตรวจสอบ repo อีกครั้งและใช้การเปลี่ยนแปลงของคุณอีกครั้ง ไม่แน่ใจว่าเป็นไปได้หรือไม่ในกรณีของคุณ


ขอบคุณขอดูคำแนะนำของคุณ
Rubens Mariuzzo

ตรวจสอบอีกครั้งคือสิ่งที่ฉันทำแน่นอนวิธีแก้ที่ง่ายที่สุด (ขึ้นอยู่กับการเปลี่ยนแปลงในการสมัครใหม่ ^^)
elgui

กรณีของฉันไม่สามารถแก้ปัญหาได้และทำให้เกิดข้อผิดพลาดมากขึ้นใน Tortoise SVN เพียงแค่เตือน
komorra

1

ตลอดการวิจัยของฉันฉันได้พบวิธีแก้ปัญหาที่ใช้ได้ 2 วิธี

  1. หากคุณใช้การเชื่อมต่อประเภทใดก็ได้ ssh, samba, การติดตั้ง, ตัดการเชื่อมต่อ / ยกเลิกการต่อเชื่อมและเชื่อมต่อ / เชื่อมต่อใหม่ ลองอีกครั้งวิธีนี้มักจะแก้ปัญหาให้ฉันได้ หลังจากนั้นคุณสามารถทำการล้างข้อมูล svn หรือใช้งานได้ตามปกติ (ขึ้นอยู่กับว่าปัญหาเกิดขึ้นเมื่อใด) การรีบูตเครื่องคอมพิวเตอร์ของฉันยังช่วยแก้ปัญหาได้อีกด้วย ... ใช่มันโง่ฉันรู้!

  2. บางครั้งสิ่งที่ต้องทำคือ rm -rf ไฟล์ของคุณ (หรือหากคุณไม่คุ้นเคยกับคำนี้เพียงแค่ลบโฟลเดอร์ svn ของคุณ) และชำระเงินที่เก็บ svn ของคุณอีกครั้ง โปรดทราบว่าวิธีนี้ไม่สามารถแก้ปัญหาได้เสมอไปและคุณอาจมีการเปลี่ยนแปลงที่คุณไม่ต้องการเสียไปด้วย นี่คือเหตุผลที่ฉันใช้เป็นตัวเลือกที่สอง

หวังว่านี่จะช่วยพวกคุณได้!


1

ฉันแก้ไขปัญหาความเสียหายของเซิร์ฟเวอร์ Visual svn rep-cache.db

มีสองวิธีแก้ปัญหา

หยุดบริการ Visual SVN Server

ดาวน์โหลด sqllite3.exe shell จากเว็บไซต์ sqllite และคัดลอกลงในโฟลเดอร์ db ของ repo

พิมพ์คำสั่งต่อไปนี้ที่ command prompt ในโฟลเดอร์ db ของ repo

- โซลูชันแรก -

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 ในสำเนาการทำงานของคุณหรือปัญหาบนเซิร์ฟเวอร์ ลองคอมมิตในบรรทัดคำสั่ง - หากโอนไฟล์สำเร็จและเกิดข้อผิดพลาดขณะ "Committing Transaction" แสดงว่าปัญหาน่าจะเกิดที่ฝั่งเซิร์ฟเวอร์ ความละเอียดของมูฮัมหมัดที่นี่ทำงานได้อย่างมีเสน่ห์ ไฟล์เก็บถาวรลิสต์เก่านี้มีรายละเอียดเพิ่มเติม: svn.haxx.se/users/archive-2010-12/0257.shtml
powderflask

1

ฉันแก้ไขสิ่งนี้สำหรับกรณีที่เกิดขึ้นกับฉันโดยการลบโฟลเดอร์. svn ที่ซ่อนอยู่จากนั้นดำเนินการชำระเงินในโฟลเดอร์ไปยัง URL เดียวกัน

สิ่งนี้ไม่ได้เขียนทับไฟล์ที่แก้ไขใด ๆ ของฉันและเพียงแค่กำหนดเวอร์ชันของไฟล์ที่มีอยู่ทั้งหมดแทนที่จะดึงสำเนาใหม่จากเซิร์ฟเวอร์


1

อย่าเสียเวลาไปกับการchecking integrityลบหรือลบข้อมูลwork queueตารางเพราะนี่เป็นวิธีแก้ปัญหาชั่วคราวและหลังจากนั้นไม่นาน

เพียงแค่ทำอย่างอื่นcheckoutและแทนที่โฟลเดอร์. svn ที่มีอยู่ด้วยโฟลเดอร์ใหม่ ทำupdateแล้วมันควรจะราบรื่น


0

หากคุณติดตั้ง Tortoise SVN โปรดไปที่ตัวจัดการงานและหยุดมัน จากนั้นลองลบโฟลเดอร์ มันจะทำงาน


0

คำตอบที่ทำเครื่องหมายไว้อาจเป็นคำตอบที่ถูกต้องตามการล้างข้อมูลการโค่นล้ม แต่ข้อผิดพลาดนั้นเป็นข้อผิดพลาดทั่วไปซึ่งทำให้ฉันมาที่นี่หน้าคำถามนี้

โครงการของเรามีการพึ่งพา System.Data.SQLite และข้อความแสดงข้อผิดพลาดเหมือนกัน:

อิมเมจดิสก์ฐานข้อมูลผิดรูปแบบ

ในกรณีของฉันฉันได้ดำเนินการดังต่อไปนี้สคริปต์การตรวจสอบและต่อไปนี้ผ่านทางSQLiteStudio 3.1.1

pragma integrity_check

(ฉันไม่รู้ว่าสถิติเหล่านี้จะช่วยได้หรือไม่ แต่ฉันจะแบ่งปันต่อไป ... )

ไฟล์ DataBase ถูกใช้ในการใช้งานในชีวิตประจำวันเป็นเวลา 1.5 ปีผ่านโหมดบันทึกการเชื่อมต่อบนหน่วยความจำและมีขนาดใหญ่ประมาณ 750 MB มีระเบียนประมาณ 140,000 รายการต่อตารางและ 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)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.