Nối các bản sao lưu trong khi ghi đè các bộ đã hết hạn


7

Tôi đã đọc về điều này, nhưng tài liệu trực tuyến hơi khó hiểu và có vẻ lúng túng được viết. Ví dụ như INIT, NOINIT. Một người nói rằng họ sẽ cố gắng ghi đè lên mọi thứ. Người khác nói rằng nó sẽ nối bất kể.

Tôi muốn một cái gì đó ở giữa đó. Tôi muốn các bộ phương tiện đã hết hạn không còn trong tệp, nhưng đối với các công việc sao lưu mới sẽ nối vào tệp cùng với bất kỳ bộ nào chưa hết hạn.

SQL dưới đây sẽ thực hiện sao lưu mong muốn?

BACKUP DATABASE [mydb] 
TO  DISK = N'c:\Backups\mydb.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'mydb-Full Database Backup', NOSKIP, 
NOREWIND, NOUNLOAD,  STATS = 10, RETAINDAYS = 60
GO

Nếu tôi chạy ở trên và có một bản sao lưu cũ hơn 60 ngày, nó có bị xóa khỏi tệp không?

Biên tập:

Đáp lại đề nghị của RichardTheKiwi, tôi đã viết lại mã để tạo một tệp mới mỗi lần. Sau đó tôi sẽ viết một tập lệnh windows để xóa các tập tin cũ hơn một ngày nhất định

declare @filename varchar(max)
set @filename = 'c:\sqlbackups\pptd_' +  replace(replace(convert(varchar, getdate(), 120),':','_'),' ','_') + '.bak'
BACKUP DATABASE [Peter's pointless test database] 
TO  DISK = @filename
WITH FORMAT, INIT,  NAME = N'pptd-Full Database Backup', 
NOREWIND, NOUNLOAD,  STATS = 10
GO

Bạn đã thử kiểm tra nó cho chính mình trên một bộ sao lưu không quan trọng?

Tôi đã thử chạy nó, nhưng tôi sẽ phải chờ hai tháng để biết liệu nó có làm được những gì tôi cần không. Tôi có thể thay đổi số lần trả về thành 1 và kiểm tra lại vào ngày mai, nhưng điều đó chậm hơn và kém tin cậy hơn so với việc hỏi các chuyên gia quản trị db.
MrVimes

1
@MrVimes :-) "Đáng tin cậy" = kiểm tra và có bằng chứng.
Thomas Stringer

Vì vậy, thay vì ai đó trả lời câu hỏi của tôi, tôi phải thay đổi truy vấn để giữ lại một ngày, đợi hai ngày và xem liệu bản sao lưu hôm nay đã biến mất chưa?
MrVimes

@MrVimes Không nói gì cả. Bằng mọi cách hãy nhận đầu vào từ chúng tôi ở đây, nhưng tôi khuyên bạn nên thử nghiệm và nhìn tận mắt bằng bất cứ câu trả lời nào bạn nhận được. Một thực tế là một cái gì đó bạn có thể chứng minh. Chỉ cần 0,02 đô la của tôi.
Thomas Stringer

Câu trả lời:


5

Thật không may, không, điều đó sẽ không làm việc. Nó sẽ tiếp tục nối thêm nhưng sẽ để các bộ hết hạn trong cùng một kho lưu trữ. Ảnh chụp màn hình này hiển thị một kho lưu trữ sao lưu bằng tập lệnh của bạn, được đặt thành RETAINDAYS = 2, chạy một lần vào tháng 11 (VM trickery) và một lần nữa vào hôm nay.

nhập mô tả hình ảnh ở đây

Tôi nghĩ những gì bạn đang theo dõi là một bản sao lưu dự phòng, vì vậy, giả sử đây là hàng tuần, sau khi hết thời gian, nó sẽ giữ lại 7 bộ sao lưu cũ, xóa một bản sao và nối thêm một bản mới.

Cá nhân, tôi sẽ giữ một bộ sao lưu duy nhất cho mỗi tệp và sử dụng tính năng dọn dẹp trong trình hướng dẫn bảo trì để xóa các tệp cũ; đó hoặc một tác vụ theo lịch trình Windows thông thường. Không nên có bất kỳ nhu cầu thực sự nào để giữ các bộ sao lưu trong một tệp duy nhất.



Cảm ơn bạn. Vì vậy, tôi sẽ có tập lệnh sao lưu của mình tạo một tên tệp mới mỗi lần (có thể có ngày được thêm vào tên tệp)?
MrVimes

@MrVimes Âm thanh như một ý tưởng hoàn hảo
孔夫子

FYI Tôi đã cập nhật câu hỏi của tôi với một tập lệnh để tạo một tập tin mỗi lần.
MrVimes
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.