Trong Derby (một cơ sở dữ liệu nhúng được viết bằng Java, phần lớn được sử dụng để thử nghiệm hoặc tạo mẫu), có các lệnh "đóng băng" và "giải phóng" có thể được sử dụng trong quá trình sao lưu trực tuyến . "Đóng băng" chỉ đơn giản là làm cho tất cả các truy cập cơ sở dữ liệu bị chặn cho đến khi "giải phóng" được gọi. Điều này hữu ích để sao lưu bằng chương trình bên ngoài, điều mà bạn có thể làm nếu chương trình bên ngoài nhanh hơn nhiều so với sử dụng giải pháp sao lưu nội bộ của Derby. Đối với trường hợp sử dụng của tôi, tôi có thể chụp ảnh nhanh gần như ngay lập tức bằng cách sử dụng một số tiện ích hệ thống tệp tích hợp, vì vậy đây là hoạt động liên tục (không phải O(length of DB files)
).
Tôi đang di chuyển một ứng dụng vượt trội so với Derby sang PostgreSQL và tôi tự hỏi liệu có thứ gì có thể so sánh ở đó mà tôi có thể sử dụng để dập tắt tất cả các kết nối hay không. Ngoài ra, tôi muốn biết điểm nối tiếp của tôi là gì từ bên trong ứng dụng của mình để tôi không bị rơi vào trạng thái khó xử, vì vậy việc có thể tạm dừng / tiếp tục tất cả các truy cập khác là điều rất tốt đối với tôi.
Vì PostgreQuery có nhật ký giao dịch, tôi chỉ có thể chụp ảnh nhanh mà không "đóng băng", nhưng ảnh chụp nhanh sẽ cần được chạy qua cơ chế khôi phục của PostgreQuery trước khi tôi có thể sử dụng nó vì nếu không thì những gì được lưu trữ trên đĩa sẽ giống như khi tôi kéo phích cắm trên một hệ thống tập tin bình thường. Giải pháp này không lý tưởng.
EDIT Tôi đã học pg_start_backup()
được gần, nhưng nó không khiến các giao dịch đến bị chặn cho đến khi có một cuộc gọi phù hợp pg_stop_backup()
, buộc tôi phải thực hiện khôi phục tại thời điểm để pg_start_backup()
trả về id giao dịch từ ảnh chụp nhanh của hệ thống tệp. Sẽ thật tuyệt nếu không phải thực sự tắt PostgreSQL để có được điều này (có lẽ có một lệnh giả tắt để giữ kết nối mở?).
pg_start_backup()
đóng. Có cách nào để thực sự chặn các ghi khác để ảnh chụp nhanh được đảm bảo nhất quán hay không (ngoài việc tắt cơ sở dữ liệu trước khi chụp nhanh)? Mặt khác, có vẻ như tôi vẫn phải thực hiện khôi phục tại thời điểm giao dịch pg_start_backup()
để tránh phục hồi các giao dịch xảy ra giữa pg_start_backup()
ảnh chụp nhanh và hệ thống tệp.
pg_start_backup()
: postgresql.org/docs/civerse/static/ , Nhưng bạn nên đọc cái này: postgresql.org/docs/civerse/static/backup-file.html để hiểu lý do tại sao bạn không thể lấy một hệ thống tệp sao lưu trong khi máy chủ đang chạy