2012-06-14 36 views
10

Tôi có nhiều lỗi với db postgresql của mình, kết quả sau khi tăng đột biến:Sửa lỗi Postgresql cơ sở dữ liệu bị hỏng

Tôi không thể truy cập hầu hết các bảng từ cơ sở dữ liệu của mình. Khi tôi cố gắng ví dụ select * from ac_cash_collection, tôi nhận được lỗi foolowing:

ERROR: missing chunk number 0 for toast value 118486855 in pg_toast_2619

khi tôi cố gắng pg_dump tôi nhận được lỗi sau:

 
Error message from server: ERROR: relation "public.st_stock_item_newlist" does not exist 
pg_dump: The command was: LOCK TABLE public.st_stock_item_newlist IN ACCESS SHARE MODE 

tôi đã đi trước và cố gắng chạy reindex của toàn bộ cơ sở dữ liệu, Tôi thực sự tôi để nó runnng, đi ngủ, và tôi thấy nó đã không làm bất cứ điều gì vào buổi sáng, vì vậy tôi đã phải hủy bỏ nó.

Tôi cần trợ giúp để khắc phục sự cố này sớm nhất có thể, Vui lòng trợ giúp.

+0

Tôi đoán lỗi nguồn bị hỏng ổ đĩa cứng bằng cách nào đó, bạn có thể cần phải khôi phục lại bản sao lưu của mình –

+0

Bạn đã cố gắng [Google] (https://www.google.com/webhp?q=postgresql%20ERROR% 3A% 20missing% 20chunk% 20number)? – lanzz

+0

Sự gia tăng sức mạnh bị hỏng các up trở lại quá ... –

Trả lời

3

Trước khi bạn làm mọi thứ khác, http://wiki.postgresql.org/wiki/Corruptionvà hành động theo hướng dẫn. Không làm như vậy rủi ro làm cho vấn đề tồi tệ hơn.


Có hai tham số cấu hình được liệt kê trong Fine Manual mà có thể được sử dụng: ignore_system_indexeszero_damaged_pages. Tôi chưa bao giờ sử dụng chúng, nhưng tôi sẽ nếu tôi là người khác ...

Tôi không biết liệu chúng có giúp chống lại bàn nướng không. Trong mọi trường hợp, nếu đặt chúng làm cho (các) cơ sở dữ liệu của bạn trở thành có thể sử dụng được, tôi sẽ {backup + drop + restore} để đưa tất cả các bảng và danh mục vào hình dạng sơ sinh một lần nữa. Sự thành công!

+2

Đã thêm cảnh báo về việc chụp một bản sao trước; nó rất quan trọng. 'zero_damaged_pages' * không * ảnh hưởng đến các bảng TOAST (và các chỉ mục và mọi thứ khác). Nó hoạt động bằng cách xóa * dữ liệu *, không phục hồi nó. Hãy suy nghĩ rất, rất cẩn thận trước khi bạn sử dụng nó, hoặc 'pg_resetxlog', hoặc bất kỳ công cụ khôi phục" búa lớn "nào khác. –

+0

Lời khuyên tuyệt vời, IMHO. Đọc lại OQ, có vẻ như cũng có những catalog bị hư hại liên quan. – wildplasser

+0

Sao lưu có thể không thực hiện được ở đây. Mong đợi 'pg_dump' thất bại với các lỗi như' dữ liệu nén bị hỏng' nếu các bảng của bạn sử dụng bộ nhớ mở rộng. – kontextify

4

Nếu bạn có bản sao lưu, chỉ cần khôi phục từ chúng.

Nếu không - bạn vừa mới biết lý do bạn cần sao lưu thường xuyên. Không có gì PostgreSQL có thể làm nếu phần cứng bị lỗi. Ngoài ra, nếu bạn gặp lại tình huống này lần nữa, trước tiên hãy dừng PostgreSQL và thực hiện sao lưu toàn bộ tập tin của tất cả mọi thứ - tất cả các không gian bảng, WAL vv. Bằng cách đó bạn có điểm khởi đầu đã biết.

Vì vậy - nếu bạn vẫn muốn khôi phục một số dữ liệu.

  1. Hãy thử đổ các bảng riêng lẻ. Nhận những gì bạn có thể theo cách này.
  2. Thả chỉ mục nếu chúng gây ra sự cố
  3. Dump phần bảng (id = 0..9999, 1000..19999 vv) - theo cách đó bạn có thể xác định nơi một số hàng có thể bị hỏng và đổ các phần nhỏ hơn để khôi phục những gì vẫn còn tốt.
  4. Hãy thử bán phá giá một số cột nhất định - giá trị văn bản lớn được lưu trữ ngoài dòng (trong bảng bánh mì nướng) để tránh chúng có thể lấy phần còn lại của dữ liệu của bạn.
  5. Nếu bạn đã có bảng hệ thống bị hỏng thì bạn đang tham gia rất nhiều công việc.

Đó là rất nhiều công việc, và sau đó bạn sẽ cần phải trải qua và kiểm tra những gì bạn đã khôi phục và cố gắng tìm ra những gì bị thiếu/không chính xác.

Có nhiều thứ bạn có thể làm (tạo khối trống trong một số trường hợp có thể cho phép bạn đổ một phần dữ liệu) nhưng chúng phức tạp hơn và khó sử dụng và trừ khi dữ liệu đặc biệt có giá trị không đáng để thử.

Thông điệp chính để loại bỏ điều này - đảm bảo bạn thực hiện sao lưu thường xuyên và đảm bảo chúng hoạt động.

+1

+1 Hôm nay tôi rất vui vì đã học được về CÁCH QUAN TRỌNG LÀ DO BACKUPS và tôi đã khôi phục thành công một cơ sở dữ liệu. – Claudix

1

Trước khi bạn làm bất cứ điều gì ELSE, hãy lấy một bản sao cấp hệ thống tệp hoàn chỉnh của cơ sở dữ liệu bị hỏng.

http://wiki.postgresql.org/wiki/Corruption

không làm như vậy phá hủy bằng chứng về những gì gây ra tham nhũng, và có nghĩa là nếu nỗ lực sửa chữa của bạn đi nặng nề và làm cho mọi việc tồi tệ hơn bạn không thể đánh bại được họ.

Sao chép nó bây giờ!

Các vấn đề liên quan