Thực hiện các hoạt động cập nhật dữ liệu trong khi sao lưu cơ sở dữ liệu SQL Server lớn


9

Tôi có một cơ sở dữ liệu lớn (trong hàng chục triệu bản ghi) mà tôi sẽ thực hiện sao lưu cơ sở dữ liệu đầy đủ .

Tuy nhiên, cơ sở dữ liệu đủ lớn để các giao dịch có thể bắt đầu trước và trong, cũng như cam kết trong và sau khi sao lưu diễn ra.

Ví dụ:

T0 = Transaction A start
T1 = Full database backup start
T2 = Transaction B start (will not deadlock with A)
T3 = Transaction A commit/rollback (does not matter, does it?)
T4 = Full database backup end
T5 = Transaction B commit/rollback (again, does not matter, does it?)

T0          T1          T2          T3          T4          T6
||----------||----------||----------||----------||----------||---------->

Tôi hiểu rằng không có khóa nào được sử dụng trong quá trình sao lưu (mặc dù các vấn đề về hiệu suất khác có thể phát sinh do nói, I / O cao) , nhưng tôi không chắc mình có thể đảm bảo những gì sẽ được cam kết hay không.

Ngoài ra, mối quan tâm của tôi không phải là cơ sở dữ liệu sẽ ở trạng thái không nhất quán, mà là trạng thái đó sẽ là gì (ngay cả khi nó không mang tính quyết định, nếu có một bộ quy tắc có thể được áp dụng nhất quán) và làm thế nào nó đạt được ( ví dụ: có bao nhiêu tệp dữ liệu được sử dụng cùng với nhật ký giao dịch để tạo tệp sao lưu)?


Tôi xóa bình luận đầu tiên của tôi và mở rộng nó thành một câu trả lời. Tôi vẫn đang cố gắng tìm ra cách tìm chính xác khi dữ liệu đọc bản sao lưu kết thúc.
Simon Righarts

Câu trả lời:


7

Về cơ bản, bản sao lưu sẽ ở trạng thái cơ sở dữ liệu khi hoàn thành phần đọc dữ liệu của bản sao lưu (vì vậy tất cả dữ liệu sẽ được sao lưu), cộng với bất kỳ số lượng nhật ký giao dịch nào được yêu cầu để đảm bảo tính nhất quán giao dịch (bắt đầu thời gian của nhật ký bao gồm là MIN(most recent checkpoint time, oldest active transaction start time)). Paul Randal bao gồm điều này ở đây (với sự trợ giúp của một sơ đồ, làm cho tất cả dễ dàng hơn nhiều). Trong ví dụ của bạn, Asẽ được cam kết (hoặc khôi phục nếu ROLLBACK TRANSACTIONđược ban hành thay vì a COMMIT) và Bsẽ được khôi phục (bất kể kết quả cuối cùng của giao dịch đó).

(Lý do khác khiến bạn thử và thực hiện sao lưu tại một thời điểm yên tĩnh, ngoài tranh chấp I / O, là tất cả nhật ký giao dịch được tạo trong quá trình sao lưu thường phải được bao gồm trong bản sao lưu.)

Giai đoạn phục hồi của khôi phục cơ sở dữ liệu sẽ lấy tất cả các giao dịch đã cam kết từ nhật ký được bao gồm trong bản sao lưu và áp dụng chúng cho cơ sở dữ liệu và khôi phục tất cả các giao dịch chưa được cam kết. (Đây là lý do tại sao WITH RECOVERY/ WITH NORECOVERYlà quan trọng. WITH RECOVERYVà bạn có thể sử dụng cơ sở dữ liệu, nhưng bạn không thể áp dụng bất kỳ sao lưu đăng nhập hơn nữa, bạn cần phải khôi phục lại nó WITH NORECOVERYđể cuộn trong sao lưu đăng nhập. Phục hồi phá vỡ chuỗi đăng nhập bằng cách lăn trở lại giao dịch không bị giam. )

Đọc thêm:


4

Một bản sao lưu đầy đủ sẽ khôi phục đến thời điểm khi phần đọc dữ liệu của bản sao lưu hoàn thành, trừ đi mọi giao dịch không được cam kết tại thời điểm đó.

Như bạn đã đề cập, cơ sở dữ liệu vẫn trực tuyến và có sẵn để viết trong khi sao lưu xảy ra. Cách thức hoạt động của hệ thống này là sao lưu một tập hợp các trang dữ liệu không nhất quán (vì phải mất một khoảng thời gian khác để đọc dữ liệu) - nó cần một bản sao của mỗi trang dữ liệu khi nó đến, bất kể trạng thái nào trong. Một bản sao lưu đầy đủ cũng bao gồm các bản ghi nhật ký giao dịch bắt đầu từ khi bắt đầu giao dịch hoạt động cũ nhất khi bắt đầu sao lưu, đến bản ghi nhật ký cuối cùng khi phần đọc dữ liệu hoàn tất.

Khi sao lưu được khôi phục, dữ liệu và nhật ký được khôi phục nguyên trạng (nhớ các trang dữ liệu ở trạng thái không nhất quán), sau đó quá trình làm lại xảy ra từ đầu nhật ký giao dịch được sao lưu (một lần nữa, bên trong bản sao lưu đầy đủ) , tất cả các cách cho đến cuối cùng; sau đó, nếu bạn đã khôi phục RECOVERY, hoàn tác lại để khôi phục mọi giao dịch không được cam kết tại thời điểm sao lưu kết thúc. Các undo hoạt động là những gì để lại cơ sở dữ liệu trong trạng thái transactionally-phù hợp, sẵn sàng để sử dụng. Khôi phục với NORECOVERYbỏ qua quá trình hoàn tác , cho phép bạn khôi phục các bản sao lưu bổ sung (vi sai hoặc nhật ký giao dịch).

Lưu ý rằng nếu cơ sở dữ liệu khá lớn với khối lượng công việc ghi lớn, nhật ký giao dịch có thể cần phát triển trong quá trình sao lưu nếu không đủ không gian hiện được phân bổ. Nhật ký không thể xóa (nội bộ) trong quá trình sao lưu toàn bộ, ngay cả khi bạn đang sao lưu nhật ký giao dịch, vì các bản ghi nhật ký là bắt buộc để sao lưu toàn bộ. Nếu bạn đang thực hiện sao lưu nhật ký giao dịch trong khi xảy ra sao lưu toàn bộ, việc xóa nhật ký sẽ được tự động hoãn lại cho đến khi hoàn thành sao lưu toàn bộ.

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.