Sự khác biệt chính giữa các bản sao lưu đầy đủ và chỉ sao chép là liệu LSN (Số thứ tự nhật ký) hay không, và cụ thể DatabaseBackupLSN
là bản cập nhật.
Khi bạn sao lưu toàn bộ, bản DatabaseBackupLSN
cập nhật sẽ được cập nhật. Sau khi thực hiện sao lưu toàn bộ, nếu bạn thực hiện một bản sao lưu khác biệt thì bản sao lưu đó có bản sao lưu DatabaseBackupLSN
phù hợp với bản sao lưu đầy đủ và do đó SQL có thể liên kết cả hai với nhau (ví dụ: từ các LSN đó biết rằng diff đã theo đầy đủ).
Vấn đề xảy ra khi bạn có các bản sao lưu dự kiến đang chạy, do đó bạn có một bản sao lưu đầy đủ ban đầu và sau đó là một chuỗi các khác biệt. Nếu bạn tự sao lưu toàn bộ, nó sẽ cập nhật LSN, và từ đó trở đi, mỗi bản sao lưu vi sai bạn thực hiện thông qua sao lưu theo lịch trình sẽ tham chiếu rằng LSN mới không phải là bản gốc. Trong trường hợp cần khôi phục, bạn có thể khôi phục bản sao lưu Toàn bộ theo lịch trình của mình, nhưng khi bạn cố gắng khôi phục bất kỳ bản sao lưu vi sai nào được thực hiện sau công việc thủ công bạn thấy nó sẽ thất bại vì LSN không còn phù hợp.
Với bản sao lưu chỉ sao chép, nó không chạm vào DatabaseBackupLSN
, và như vậy sẽ không phá vỡ chuỗi sao lưu đó.
Có một mô tả hay về vấn đề này, cũng như lý do tại sao rất nhiều người hiểu sai về nó trong Phá vỡ chuỗi sao lưu - REDUX (Hoặc ăn quạ) của Michael K. Campbell, bao gồm các hướng dẫn trực quan tốt như thế này:
Để biết giải thích tốt về bốn LSN khác nhau và cách chúng được sử dụng, hãy xem Tìm hiểu về Số thứ tự Nhật ký Máy chủ SQL để sao lưu của Simon Liew.
Cách để tránh vấn đề là không có nhiều hơn một việc thực hiện sao lưu chuẩn của cơ sở dữ liệu. Mọi sao lưu adhoc hoặc sao lưu thứ cấp đều phải được thực hiện với tùy chọn chỉ sao chép, xem Sao lưu chỉ sao chép (SQL Server) để biết chi tiết đầy đủ, nhưng về cơ bản bạn sử dụng tùy chọn "Sao lưu chỉ sao lưu" trong SSMS, thông qua T-SQL chỉ định WITH COPY_ONLY
trong lệnh hoặc với PowerShell sử dụng -CopyOnly
tham số.