Để thêm vào những gì @dmg nói. Sao lưu một bảng duy nhất có thể có vấn đề. Bỏ qua một bên nếu ví dụ bảng "lớn" của bạn là 90% cơ sở dữ liệu thì chỉ cần sao lưu bảng sẽ không thực sự giúp bạn nhiều. Nếu bạn đang sử dụng SQL 2008, hãy chắc chắn rằng bạn đang có compressing your backups
. Bạn có thể nhận được tỷ lệ phần trăm nén hợp lý và thực sự có thể sao lưu toàn bộ.
Một lựa chọn khác là transaction log
sao lưu. Đây là những gì tôi thường làm khi tôi xử lý một cơ sở dữ liệu lớn trước khi thực hiện thay đổi. Chúng phải luôn nhỏ hơn nhiều (đặc biệt nếu bạn thường xuyên sao lưu) so với sao lưu toàn bộ. Và sẽ còn nhỏ hơn nữa nếu bạn nén chúng.
Bây giờ sẽ không hoạt động nếu cơ sở dữ liệu của bạn được đặt thành simple recovery
. Trong trường hợp đó, chỉ có tùy chọn sao lưu truyền thống khác của bạn là xem xét differential backups
. Chúng thực sự có thể nhận được khá lớn. Tuy nhiên, nếu bản sao lưu đầy đủ cuối cùng của bạn được thực hiện gần đây hoặc bạn chỉ thực hiện thay đổi đối với một tỷ lệ nhỏ của cơ sở dữ liệu thì đây có thể là một lựa chọn khả thi cho bạn. Mặt khác, nếu cơ sở dữ liệu của bạn được đặt thành simple
thì bạn có thể không cần phải lo lắng về việc có thể phục hồi trước khi thay đổi.
Cuối cùng nhưng không kém phần quan trọng (SQL 2005 trở lên) có OUTPUT
mệnh đề. Điều khoản nhỏ tiện dụng này cho phép bạn đưa ra những thay đổi bạn đã thực hiện trong khi thực hiện lệnh của mình. Chúng có thể được lưu trữ trong một biến bảng hoặc bảng. Về cơ bản họ cung cấp cho bạn quyền truy cập vào INSERTED
và DELETED
các bảng mà thông thường bạn chỉ thấy trong các kích hoạt. Tôi có hiệu lực bạn có thể sao lưu các thay đổi của mình (cả trước và sau) vào một bảng khác. Bằng cách này, bạn chỉ sao lưu các hàng và cột đã thay đổi. Hãy chắc chắn rằng bạn bao gồm khóa chính của bạn là tất nhiên. Đây là mục BOL . Và đây là một ví dụ từ BOL. Trong ví dụ cụ thể này, chỉ có 4 cột trong 10 hàng dữ liệu được lưu. Ngay cả khi bảng xảy ra là 5 hoặc thậm chí 10 triệu hàng.
USE AdventureWorks;
GO
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25
OUTPUT INSERTED.EmployeeID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;