Điều gì xảy ra trong quá trình sao lưu SQL Server trực tiếp?


18

Một số đồng nghiệp của tôi đã rất ngạc nhiên khi tôi nói với họ rằng tôi có thể sao lưu cơ sở dữ liệu SQL Server trong khi nó vẫn đang chạy và tự hỏi làm thế nào điều đó có thể. Tôi biết rằng SQL Server có khả năng sao lưu cơ sở dữ liệu trong khi nó vẫn trực tuyến nhưng tôi không chắc làm thế nào để giải thích tại sao nó có thể. Câu hỏi của tôi là điều này có ảnh hưởng gì đến cơ sở dữ liệu?

Nếu dữ liệu được sửa đổi (bằng cách chèn, cập nhật hoặc xóa) trong khi sao lưu đang chạy, bản sao lưu sẽ chứa những thay đổi đó hay nó sẽ được thêm vào cơ sở dữ liệu sau đó?

Tôi cho rằng tệp nhật ký đóng vai trò quan trọng ở đây nhưng tôi không chắc lắm.

chỉnh sửa: Cũng như một ghi chú, trường hợp của tôi liên quan đến việc sao lưu cơ sở dữ liệu bằng SQL Server Agent và các hiệu ứng sửa đổi cơ sở dữ liệu trong quá trình này.

Câu trả lời:


24

Sao lưu đầy đủ chứa cả dữ liệu và nhật ký. Đối với dữ liệu, nó chỉ cần sao chép từng trang của cơ sở dữ liệu vào bản sao lưu, như tại thời điểm nó đọc trang. Sau đó nó sẽ thêm vào phương tiện sao lưu tất cả nhật ký 'có liên quan'. Điều này bao gồm, ít nhất, tất cả nhật ký giữa LSN khi bắt đầu hoạt động sao lưu và LSN ở cuối hoạt động sao lưu. Trong thực tế thường có nhiều nhật ký hơn, vì nó phải bao gồm tất cả các giao dịch hoạt động khi bắt đầu sao lưu và nhật ký cần thiết khi sao chép. Xem Debunking một vài huyền thoại xung quanh sao lưu cơ sở dữ liệu đầy đủ .

Khi cơ sở dữ liệu được khôi phục, tất cả các trang dữ liệu được sao chép vào các tệp cơ sở dữ liệu, sau đó tất cả các trang nhật ký sẽ được sao chép vào (các) tệp nhật ký. Cơ sở dữ liệu không nhất quán tại thời điểm này, vì nó chứa hình ảnh trang dữ liệu có thể không đồng bộ với nhau. Nhưng bây giờ một phục hồi bình thường được chạy. Vì nhật ký chứa tất cả nhật ký trong quá trình sao lưu, nên khi kết thúc phục hồi, cơ sở dữ liệu là nhất quán.


1
Bài đăng tuyệt vời và các liên kết đã giúp cung cấp một ví dụ tốt. Cảm ơn.
Sean Howat

Rất súc tích. Làm tốt lắm!
allen1

2

Trong quá trình sao lưu, ảnh chụp nhanh sẽ được tạo cho cơ sở dữ liệu và dữ liệu sẽ được đọc để sao lưu từ ảnh chụp nhanh đó. Các hoạt động DB trực tiếp thực tế sẽ không ảnh hưởng đến hoạt động sao lưu.


1

Bạn không thể sao chép nó vì có thể có những thay đổi đối với cơ sở dữ liệu giữa bản sao như bạn đã đề cập trong câu hỏi.

Nó phải được thực hiện với các tác nhân nhận thức được chức năng cơ sở dữ liệu và sau đó chụp "ảnh chụp nhanh" thông qua các chức năng của hệ điều hành hoặc có thể sử dụng tiện ích để chuyển cơ sở dữ liệu ở trạng thái an toàn (như mysqldump, nếu sử dụng mysql).

Nếu không, bạn nhận được một bản sao lưu có thể bị hỏng và bạn sẽ không biết nó cho đến khi bạn khôi phục nó. Tôi nghĩ Joel và Jeff gần đây đã nói về nó một chút trên một podcast StackOverflow gần đây.

Và bạn đúng ở chỗ tệp nhật ký rất quan trọng. Nếu tệp nhật ký / nhật ký không đồng bộ với dữ liệu thực tế, việc khôi phục các tệp sẽ dẫn đến tham nhũng.

Nó nắm bắt một bản sao lưu được thực hiện bằng trạng thái an toàn của cơ sở dữ liệu, thông qua một tác nhân nhận biết cơ sở dữ liệu hoặc ứng dụng chụp nhanh hoặc ứng dụng nhận thức được cách móc đúng cơ sở dữ liệu vào việc thả dữ liệu mà không can thiệp vào các cập nhật trong khi kết xuất dữ liệu lên tập tin kết quả.


Đây là một câu trả lời khái quát hơn nhưng tôi đã quên bao gồm rằng tôi đã làm việc thông qua SQL Server Agent lúc đầu. Nó vẫn cung cấp một số chi tiết tốt về những gì có thể xảy ra trong quá trình này mặc dù phương pháp này đã giúp ích rất nhiều! Cảm ơn.
Sean Howat

0

Có rất nhiều cách để làm điều này (nói chung, không biết MSSQL thường làm như thế nào) như đơn giản là bỏ cơ sở dữ liệu vào tệp trong khi nối thêm bất kỳ thay đổi nào vào tệp nhật ký được cam kết sau khi kết xuất kết xuất - để sử dụng ảnh chụp nhanh cụ thể của hệ thống tệp các tính năng như VSS trên Windows.


Ngoài ra, các cơ sở dữ liệu MVCC dựa trên cơ sở (như PostGres) có thể sử dụng tập hợp các hành vi đó để duy trì ảnh chụp nhanh sao lưu từ khi vẫn cho phép cập nhật vào các tệp dữ liệu bằng các giao dịch bắt đầu trong quá trình sao lưu. Như bạn nói có một số phương pháp, một phương pháp được sử dụng phụ thuộc vào thiết kế cốt lõi của công cụ lưu trữ dữ liệu và các tính năng xử lý giao dịch.
David Spillett

-1

Bạn có thể lấy những gì được gọi là bản sao lưu chỉ sao chép. Sẽ không ảnh hưởng đến cơ sở dữ liệu khi trực tuyến


Một bản sao lưu chỉ sao chép là gì? Nó được thực hiện như thế nào? Có bất kỳ cảnh báo để xem xét? Bất kỳ liên kết đến các ví dụ về một con thú như vậy đang được chạy? Nếu bạn định gửi câu trả lời, hãy tưởng tượng những gì có thể hữu ích để tìm nếu ai đó có câu hỏi này trong 2-3 năm.
rnxrx
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.