svn cleanup: sqlite: hình ảnh đĩa cơ sở dữ liệu bị sai định dạng


93

Tôi đã cố gắng thực hiện svn cleanupvì tôi không thể thực hiện các thay đổi trong bản sao làm việc của mình và tôi gặp lỗi sau:

sqllite: hình ảnh đĩa cơ sở dữ liệu không đúng định dạng

Dọn dẹp không xử lý được các đường dẫn sau

Tôi có thể làm gì ngay bây giờ?

Câu trả lời:


98

Tôi đã từng gặp vấn đề tương tự. Bài đăng trên blog sau đã giúp tôi giải quyết vấn đề này: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Bạn kiểm tra tính toàn vẹn trên cơ sở dữ liệu sqlite theo dõi kho lưu trữ (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Điều đó sẽ báo cáo một số lỗi.

Sau đó, bạn có thể làm sạch chúng bằng cách thực hiện:

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

Nếu vẫn còn lỗi sau đó, bạn vẫn có tùy chọn kiểm tra bản sao mới của kho lưu trữ vào thư mục tạm thời và sao chép thư mục .svn từ bản sao mới sang bản cũ. Sau đó, bản sao cũ sẽ hoạt động trở lại và bạn có thể xóa thư mục tạm thời.


6
điều này thực sự đã giải quyết được vấn đề của tôi. Cảm ơn rât nhiều.
Erdogan Kurtur

17
Bạn phải làm gì nếu bạn vẫn nhận được Lỗi: hình ảnh đĩa cơ sở dữ liệu không đúng định dạng?
j sẽ

3
@jwill Tôi cũng gặp lỗi sau khi thực hiện giải pháp được đưa ra ở trên ... Nhưng những gì tôi đã thử chỉ đơn giản là kiểm tra bản sao mới của kho lưu trữ của bạn và sau đó ghi đè thư mục .svn của bản sao kiểm tra mới thành bản cũ. Tôi đã giải quyết được vấn đề của mình như thế này ...
Rushabh Shah

6
Weird, tôi nhận đượcError: unable to identify the object to be reindexed
Pacerier

4
Liên kết polak.ro/… dường như đã ngừng hoạt động vĩnh viễn.
MadMike

21

Kiểm tra tính toàn vẹn

sqlite3 .svn/wc.db "pragma integrity_check"

Dọn dẹp

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

Ngoài ra

Bạn có thể kết xuất nội dung của cơ sở dữ liệu có thể đọc vào tệp sao lưu, sau đó chuyển nó trở lại tệp cơ sở dữ liệu mới:

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
Điều này đã giải quyết được lỗi mà tôi gặp phải với các phần mềm khác nhau, vì vậy cảm ơn bạn!
Azirius

Đối với tôi, lệnh "reindex node" không thành công, nhưng giải pháp thay thế (tạo lại db từ kết xuất) đã giúp tôi! Cảm ơn.
EvAlex

1
Tôi không làm mọi thứ đổ bể, nhưng như vậy là đủ. Cuộn qua tệp sql và thay đổi tệp cuối cùng ROLLBACK;thành COMMIT;trước khi doung .read dump_all.sql.
Jan Katins

2
Cách tiếp cận này hiện có vẻ không thành công với lỗi này 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), tuy nhiên có một cách giải quyết ở đây: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

Cách khắc phục thích hợp cho lỗi xác nhận là: 1. chạy sqlite3 .svn/wc.db 'PRAGMA user_version;'ngược lại với db ban đầu để có được số chính xác. 2. chạy sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'với phiên bản khôi phục với số lượng chính xác.
Chronial

19

Quá trình dọn dẹp SVN không hoạt động. Thư mục SVN trên hệ thống cục bộ của tôi bị hỏng. Vì vậy, tôi vừa xóa thư mục, tạo lại một thư mục mới và cập nhật từ SVN. Điều đó đã giải quyết vấn đề!


1
Đây là giải pháp dễ dàng nhất. Nhận một bản sao làm việc mới và làm việc với URL đó: svn co.
Jahmic

16

Sau khi mất điện, tôi gặp phải hình ảnh đĩa cơ sở dữ liệu bị lỗi không đúng định dạng và lệnh các nút lập chỉ mục được đề xuất không khắc phục được tất cả các vấn đề do các ràng buộc bị vi phạm. Ngoài ra, quy trình được mô tả trong http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E đã không giải quyết được sự cố.

Giải pháp trong trường hợp của tôi:

  • Kiểm tra lại kho lưu trữ svn vào một thư mục tạm thời
  • Sao chép, tức là thay thế, tệp ".svn / wc.db" từ kiểm tra mới vào tệp bị hỏng

Điều này có thể hữu ích, nếu kiểm tra svn ban đầu của bạn chứa nhiều tệp đã sửa đổi hoặc chưa được phiên bản và bạn không muốn chuyển sang kiểm tra svn mới.


13

Tôi đã sao chép qua thư mục .svn từ thư mục của nhân viên ngang hàng của mình và điều đó đã khắc phục được sự cố.


Ở đây chúng ta cũng có thể kiểm tra bản sao làm việc mới trong cùng một hệ thống duy nhất và sau đó thay thế thư mục svn cũ với thư mục svn mới và thông qua cách này chúng ta cũng có thể giải quyết vấn đề này ...
Rushabh Shah

3
  1. kiểm tra svn này ở một nơi khác
  2. hiển thị tệp .svn ẩn
  3. thay thế tệp wc

điều này làm việc cho tôi!


2

Có thể, có thể là một giải pháp:

  1. nhấp chuột phải qua dự án
  2. đội -> ngắt kết nối
  3. Chọn: Cũng xóa ...

Bây giờ, hãy kết nối lại một lần nữa:

  1. nhấp chuột phải qua dự án
  2. nhóm -> Chia sẻ dự án
  3. chọn của bạn repositorie: của tôi SVN(trường hợp khác: git, v.v.)
  4. chọn repositoriethư mục của bạn

Ghi chú:

Trong trường hợp của tôi, tôi đã sao lưu các tệp của mình. (bạn an toàn trở lại: P)

Biên tập:

Tôi đang nói về SVNplugin trên Eclipse:)


1

Bạn đã thấy bài đăng này trên trang lật đổ chưa? Bạn cũng có thể thử xác thực và "sửa" cơ sở dữ liệu trực tiếp như được mô tả ở đây . (Lưu ý rằng tôi không phải là chuyên gia, tôi chỉ tìm kiếm nhanh trên google. Có thể không liên quan đến vấn đề của bạn chút nào).

Về mặt cá nhân, tôi sẽ thử kiểm tra lại bản repo và áp dụng lại các thay đổi của bạn. Không chắc chắn nếu điều này là có thể mặc dù trong trường hợp của bạn?


Cảm ơn, hãy cho tôi xem gợi ý của bạn.
Rubens Mariuzzo

kiểm tra lại là những gì tôi đã kết thúc, chắc chắn là giải pháp dễ dàng nhất (tùy thuộc vào các thay đổi để đăng ký lại ^^)
elgui

Tôi trường hợp này không giải quyết được vấn đề, còn gây ra nhiều lỗi hơn trong Tortoise SVN, chỉ cần cảnh báo.
komorra

1

Trong suốt quá trình nghiên cứu của mình, tôi đã tìm thấy 2 giải pháp khả thi.

  1. Nếu bạn đang sử dụng bất kỳ loại kết nối nào, hãy ssh, samba, mounting, ngắt kết nối / ngắt kết nối và kết nối lại / nối lại. Hãy thử lại, điều này thường giải quyết được vấn đề cho tôi. Sau đó, bạn có thể dọn dẹp svn hoặc tiếp tục hoạt động bình thường (tùy thuộc vào thời điểm sự cố xuất hiện). Khởi động lại máy tính của tôi cũng đã khắc phục được sự cố một lần ... vâng, tôi biết thật là ngu ngốc!

  2. Đôi khi, tất cả những gì cần làm là rm -rf các tệp của bạn (hoặc nếu bạn không quen với thuật ngữ này, chỉ cần xóa thư mục svn của bạn) và kiểm tra lại kho lưu trữ svn của bạn một lần nữa. Xin lưu ý rằng điều này không phải lúc nào cũng giải quyết được vấn đề và bạn cũng có thể có những thay đổi mà bạn không muốn mất. Đó là lý do tại sao tôi sử dụng nó như là tùy chọn thứ hai.

Hy vọng điều này sẽ giúp các bạn!


1

Tôi đã giải quyết được vấn đề hỏng máy chủ svn trực quan rep-cache.db.

Họ là hai giải pháp.

Dừng dịch vụ Máy chủ Visual SVN.

Tải xuống trình bao sqllite3.exe từ trang web sqllite và sao chép nó vào thư mục db của repo.

Nhập các lệnh sau tại dấu nhắc lệnh trong thư mục db của repo.

- Giải pháp đầu tiên -

sqlite3 rep-cache.db

.clone rep-cache-new.db

nhấn ctrl + c để thoát sqllite.

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

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

- Giải pháp thứ 2 -

Xóa rep-cache.db

del rep-cache.db

nó sẽ được tạo tự động.


Cảm ơn Muhammad - chỉ là manh mối mà tôi cần! Người ta cần xác định xem vấn đề là với (các) sqlite db trong bản sao làm việc của bạn hay bản sao trên máy chủ. Hãy thử cam kết của bạn trên dòng lệnh - nếu tệp được chuyển thành công và lỗi xảy ra trong khi "Đang thực hiện giao dịch", thì có thể sự cố nằm ở phía máy chủ. Cách giải quyết của Muhammad ở đây hoạt động như một sự quyến rũ. Kho lưu trữ listerve
powderflask

1

Tôi đã sửa lỗi này cho một trường hợp của nó xảy ra với tôi bằng cách xóa thư mục .svn ẩn và sau đó thực hiện kiểm tra thư mục đến cùng một URL.

Điều này không ghi đè lên bất kỳ tệp nào đã sửa đổi của tôi và chỉ tạo phiên bản cho tất cả các tệp hiện có thay vì lấy các bản sao mới từ máy chủ.


1

Đừng lãng phí thời gian của bạn vào checking integrityhoặc xóa dữ liệu khỏiwork queue bảng vì đây là những giải pháp tạm thời và nó sẽ quay trở lại bạn sau một thời gian.

Chỉ cần thực hiện một thao tác khác checkoutvà thay thế thư mục .svn hiện có bằng thư mục mới. Làm một updatevà sau đó nó sẽ trôi chảy.


0

Nếu bạn cài đặt Tortoise SVN, Vui lòng chuyển đến trình quản lý tác vụ và dừng nó. Sau đó, cố gắng xóa thư mục. nó sẽ hoạt động


0

Câu trả lời được đánh dấu có thể là câu đúng, theo dọn dẹp lật đổ. Nhưng lỗi chắc chắn là một lỗi chung chung, dẫn tôi đến đây, trang câu hỏi này.

Dự án của chúng tôi có System.Data.SQLite phụ thuộc và thông báo lỗi giống nhau:

hình ảnh đĩa cơ sở dữ liệu không đúng định dạng

Trong trường hợp của tôi, tôi đã thực thi tập lệnh kiểm tra sau và những điều sau thông qua SQLiteStudio 3.1.1 .

pragma integrity_check

(Tôi không biết liệu những thống kê này có giúp ích được gì không, nhưng dù sao thì tôi cũng sẽ chia sẻ chúng ...)

Tệp DataBase đang được sử dụng hàng ngày trong 1,5 năm, thông qua chế độ nhật ký kết nối trên Bộ nhớ và có dung lượng khoảng 750 MB. Có khoảng 140 nghìn bản ghi cho mỗi bảng và 6 bảng lớn như vậy.

Sau khi thực thi tập lệnh Kiểm tra tính toàn vẹn , 11 hàng đã được trả lại sau 30 phút thời gian thực thi.

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ất cả các kết quả là về các chỉ mục. Sau khi xây dựng lại từng chỉ mục, vấn đề của tôi đã được giải quyết.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Sau khi lập chỉ mục lại, kết quả kiểm tra tính toàn vẹn là "ok".

Tôi đã gặp lỗi này vào năm ngoái và tôi đã được khôi phục DB từ bản sao lưu, sau đó thực hiện lại tất cả các thay đổi, đó là một cơn ác mộng thực sự ...


-1

không cần phải lo lắng cho một khóa thư mục guys.

Bạn chỉ cần làm là, Nếu sqllite3 chưa được cài đặt, hãy nhập lệnh dưới đây,

>sudo apt-get install sqlite3

Mở cơ sở dữ liệu SVN bằng cách gõ lệnh này,

>sqlite3 .svn/wc.db 

Bây giờ bạn chỉ cần làm là xóa các mục khóa khỏi SVN DB.

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

Quá trình đã hoàn tất. Bạn có thể làm việc trên kho lưu trữ SVN của mình, thực hiện các hoạt động cam kết, cập nhật, thêm, xóa mà không gặp vấn đề gì.

:-)


-2

Trong quá trình phát triển ứng dụng, tôi nhận thấy rằng các thông báo đến từ các hoạt động INSERT và UPDATE thường xuyên và lớn. Đảm bảo CHÈN và CẬP NHẬT nhiều hàng hoặc dữ liệu trong một thao tác duy nhất.

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

cd vào thư mục chứa .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.