2012-01-10 15 views
28

Khi tôi tải lên máy chủ postgres (v9.0.1) tôi nhận được một hoảng loạn có thể ngăn chặn nó từ bắt đầu:lỗi postgresql Panic: không thể xác định vị trí một kỷ lục trạm kiểm soát hợp lệ

Panic: không thể xác định vị trí một trạm kiểm soát hợp lệ record

Làm cách nào để khắc phục điều này?

+0

Vui lòng không đăng giải pháp trong chính câu hỏi đó. Trả lời câu hỏi của riêng bạn không được khuyến khích, nhưng bạn nên đăng các giải pháp như câu trả lời. Tôi đã chỉnh sửa giải pháp trong câu hỏi lần này. Cảm thấy tự do để đăng nó như là một câu trả lời một cách thuận tiện. –

+0

Tôi thực sự tò mò câu trả lời là gì trước khi Anna chỉnh sửa :-) – filiprem

+0

Nếu đây là trên máy chủ phụ/đọc và bạn đã khởi động sau khi sao chép qua bản sao lưu cơ sở, hãy đảm bảo rằng bạn có tệp nhãn được tạo khi tạo bản sao lưu cơ sở trong thư mục dữ liệu cục bộ. –

Trả lời

55

Tìm kiếm bản ghi điểm kiểm tra trong nhật ký giao dịch có thể không tồn tại hoặc bị hỏng. Bạn có thể xác định xem đây là trường hợp của chạy:

pg_resetxlog DATADIR 

Nếu nhật ký giao dịch bị hỏng, bạn sẽ thấy một thông báo như:

Các máy chủ cơ sở dữ liệu đã không được đóng cửa sạch sẽ. Đặt lại nhật ký giao dịch có thể khiến dữ liệu bị mất. Nếu bạn vẫn muốn tiến hành , hãy sử dụng -f để buộc đặt lại.

Sau đó bạn có thể làm theo các hướng dẫn và chạy với -f để buộc các cập nhật:

pg_resetxlog -f DATADIR 

Điều đó sẽ thiết lập lại nhật ký giao dịch, tuy nhiên nó có thể rời khỏi cơ sở dữ liệu của bạn trong tình trạng không xác định như được giải thích trong PostgreSQL documentation on pg_resetxlog :

Nếu pg_resetxlog than phiền rằng nó không thể xác định dữ liệu hợp lệ cho pg_control, bạn có thể buộc nó tiếp tục bằng cách chỉ định -f (lực) s phù thủy. Trong trường hợp này các giá trị hợp lý sẽ được thay thế cho dữ liệu bị thiếu. Hầu hết các trường có thể được mong đợi để phù hợp, nhưng hỗ trợ thủ công có thể cần cho OID tiếp theo, ID giao dịch tiếp theo và kỷ nguyên, ID đa chiều tiếp theo và bù đắp, và các trường địa chỉ bắt đầu WAL. Các trường này có thể được đặt bằng các công tắc được thảo luận bên dưới. Nếu bạn không thể xác định các giá trị chính xác cho tất cả các trường này, -f vẫn có thể được sử dụng, nhưng cơ sở dữ liệu đã phục hồi phải được xử lý thậm chí còn nghi ngờ hơn bình thường: bãi chứa ngay lập tức và tải lại là bắt buộc. Không thực hiện bất kỳ hoạt động sửa đổi dữ liệu nào trong cơ sở dữ liệu trước khi bạn đổ, vì bất kỳ hành động nào như vậy có thể làm cho tham nhũng trở nên tồi tệ hơn.

2

Bạn có lưu trữ liên tục không? Nếu bạn đang sao lưu vào thời điểm đó, bạn có thể thấy thận trọng hơn khi xóa backup_label. pg_resetxlog là một điều nghiêm trọng.

1

giống như nhật ký nói: không thể định vị bản ghi điểm kiểm tra hợp lệ.Postgres không thể tìm thấy đúng WAL trong thư mục $ PGDATA/pg_xlog /. Cố gắng sử dụng pg_resetxlog

10

Tôi đang chạy 9.1.7 và tôi tìm chạy sau thành công:

/usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main 

luận cuối cùng của bạn để lệnh pg_resetxlog nên là vị trí trên đĩa nơi postgres lưu trữ dữ liệu cơ sở dữ liệu của bạn .

6

Vì không nên chạy indicated here pg_resetxlog. Các câu trả lời liên quan đến điều này là lời khuyên xấu.Giả sử lỗi xảy ra trong ngữ cảnh của bản sao chép/sao chép, liên kết cung cấp cách sao chép/sao chép ngắn gọn hơn với pg_basebackup

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