Tôi có thể sao lưu toàn bộ trên nhiều đĩa không?


8

Hiện tại, tôi chỉ có một tệp sao lưu, IMTDB.bak và nó có cùng ổ cứng với Cơ sở dữ liệu. Tôi muốn tăng sự dư thừa của bản sao lưu DB này bằng cách "sao chép" nó vào một đĩa khác, nhưng tôi gặp lỗi "Sao lưu thất bại cho máy chủ, Phương tiện được định dạng để hỗ trợ 2 họ phương tiện". Tôi nghĩ điều này có nghĩa là khi tôi tạo bản sao lưu, nó chỉ có nghĩa là đặt bản sao lưu trên một ổ đĩa và tôi không thể thêm hồi tố nữa. Tôi muốn di chuyển bản sao lưu sang ổ đĩa khác này (thực sự chỉ cần sao chép nó), nhưng tôi không muốn phải xóa bản sao lưu hiện tại để làm điều đó.

Tôi làm gì? Tôi có an toàn không khi chỉ sao chép IMTDB.bak vào một thư mục trên ổ đĩa khác?


chắc chắn rồi. Sử dụng explorer để sao chép tệp từ vị trí này sang vị trí khác, hoàn toàn không phải là vấn đề. Bạn có thể muốn xem xét tự động hóa quy trình, có lẽ với Bộ lập lịch Windows.
Max Vernon

Bạn thấy lỗi này ở đâu / như thế nào: "Sao lưu thất bại cho máy chủ, Phương tiện được định dạng để hỗ trợ 2 họ phương tiện"
Max Vernon

Khi đi tới Nhiệm vụ -> Sao lưu và cố gắng thực hiện "Thêm" và chọn đĩa tôi có.
ijustlovemath

Thêm một đĩa khác vào đó sẽ đơn giản là trải rộng bản sao lưu trên nhiều đĩa, làm giảm thêm độ tin cậy của tệp sao lưu, vì nếu một trong hai đĩa bị lỗi, tệp sao lưu sẽ không thể sử dụng được. Làm như @Kin gợi ý trong câu trả lời của anh ấy và sử dụng lệnh T-SQL BACKUP DATABASEđể sao lưu đồng thời đến hai vị trí.
Max Vernon

Câu trả lời:


12

Vì bạn không quen với lệnh T-SQL BACKUP DATABASE, tôi nghĩ tôi sẽ thêm một số chi tiết về điều đó.

Bạn có thể muốn chạy một cái gì đó dọc theo dòng của câu lệnh sau thông qua dịch vụ Lập lịch tác vụ Windows, vì bạn không có quyền truy cập vào SQL Server Agent (Tôi thấy từ các câu hỏi khác của bạn, bạn sử dụng SQL Server Express).

BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
    , INIT
    , SKIP
    , STATS = 1;

Bạn có thể muốn xem xét mạnh mẽ việc có MIRROR TOmệnh đề trỏ đến một số vị trí không có trên máy cục bộ của bạn, vì nếu bạn mất hoàn toàn máy cục bộ, bạn có thể không truy cập được tệp sao lưu. Chỉ định một MIRROR TOmệnh đề yêu cầu bạn chỉ định FORMATtừ khóa trong WITHmệnh đề lần đầu tiên bạn chạy câu lệnh sao lưu đó.

Bạn có thể sử dụng tên của Windows Share, \\SomeServer\SQLBackups\MyBackupFile.bakmiễn là các quyền bảo mật trên chia sẻ cho phép truy cập dịch vụ Trình lập lịch của Windows.

Phần này WITH FORMAT, INITyêu cầu SQL Server ghi đè lên bất kỳ bản sao lưu hiện có nào có thể có trong các tệp sao lưu. Bạn có thể thay đổi điều này thành WITH NOINITmột khi bạn đã hoàn thành bản sao lưu được nhân đôi đầu tiên nếu bạn muốn nhiều bản sao lưu (tức là các bản sao lưu từ các thời điểm khác nhau) được lưu trong các tệp đó. NOSKIPyêu cầu SQL Server không kiểm tra hết hạn sao lưu, trong số những thứ khác. STATS = 1sẽ hiển thị đầu ra theo 1gia số phần trăm. Bạn có thể thay đổi số này thành bất cứ điều gì bạn thích. Tôi sử dụng 1cho các cơ sở dữ liệu rất lớn vì nó cho một số dấu hiệu của sự tiến bộ.

Để thực hiện điều này thông qua dịch vụ Lập lịch tác vụ Windows, bạn sẽ cần lưu lệnh đó (một khi bạn đã kiểm tra nó trong SQL Server Management Studio) vào một tệp trên đĩa của bạn; chúng ta hãy gọi nó C:\somefolder\BackupMyDB.sql. Sau đó, bạn sẽ muốn thêm lệnh sau vào Bộ lập lịch Windows:

<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql

Bạn sẽ muốn có nhiệm vụ đó "chạy như" bạn.

Khi bạn đã thực hiện tất cả điều đó, bạn muốn xem xét rất nghiêm túc việc cố gắng khôi phục bản sao lưu vào máy khác để bạn hiểu cách thực hiện điều đó. Có bản sao lưu chỉ là một phần của kế hoạch khắc phục thảm họa; phần quan trọng hơn được cho là đang thử nghiệm kế hoạch đó.

Quá trình khôi phục sẽ sử dụng một lệnh như:

RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
    , STATS = 1;

Được cảnh báo, chạy RESTORE DATABASEtrên máy có cơ sở dữ liệu hiện tại của bạn có thể ghi đè lên cơ sở dữ liệu hiện tại mà không cần xác nhận hoặc cảnh báo, vì vậy hãy đảm bảo bạn đánh giá cẩn thận tên của cơ sở dữ liệu, [xyz]trong ví dụ của tôi và các tùy chọn khác bạn sử dụng. (Điều này thực sự sẽ không ghi đè lên cơ sở dữ liệu hiện tại trừ khi bạn thêm REPLACEtừ khóa vào WITHmệnh đề - Tôi chỉ muốn nhấn mạnh việc cẩn thận.)


Cảm ơn! Vì tệp .bak của tôi đã có một số bản sao lưu trong đó, liệu bản sao được tạo tự động có bao gồm các bản sao lưu đó không? Hay chỉ là gần đây nhất?
ijustlovemath

Tôi khuyên bạn nên di chuyển tệp đó đi đâu đó nếu bạn muốn giữ nó vì MIRRORyêu cầu bạn định dạng tệp sao lưu trong lần đầu tiên bạn sử dụng, việc này sẽ xóa mọi bản sao lưu trong tệp đó.
Max Vernon

1
Cảm ơn một lần nữa cho các chi tiết trong bài viết của bạn. Thực sự hữu ích cho một người mới mà không cần bất kỳ tài nguyên nào khác!
ijustlovemath

Hân hạnh. Tôi không thể nhấn mạnh đủ tầm quan trọng của một chiến lược sao lưu và khôi phục được kiểm tra và đáng tin cậy . Tôi khuyên bạn nên thử nghiệm khôi phục cho một số máy khác để bạn không có khả năng ghi đè cơ sở dữ liệu hiện tại của mình, điều này rất dễ thực hiện khi bạn đang học.
Max Vernon

5

Bạn có thể sử dụng backup database .... MIRROR TO DISK =để sao lưu cơ sở dữ liệu đến một vị trí bổ sung.

Tôi có an toàn không khi chỉ sao chép IMTDB.bak vào một thư mục trên ổ đĩa khác?

Có, bạn có thể làm điều đó sau khi sao lưu xong.

Lưu ý: Đảm bảo rằng bạn đang sử dụng T-SQL chứ không phải GUI có các tùy chọn sao lưu bị giới hạn.


Các tùy chọn được đề nghị ở đây là gì? DB của tôi rất đơn giản, chỉ có bốn bảng, ba trong số đó chỉ có 90.000 hàng, thứ tư có ~ 75M. Đó cũng là một kích thước cố định; không có thêm dữ liệu sẽ được thêm vào nó. Tôi sẽ chỉ chạy các truy vấn chống lại nó.
ijustlovemath

5
Tôi sẽ đề nghị bạn đặt db của bạn ở read_onlychế độ và chỉ cần thực hiện một bản sao lưu cuối cùng với COMPRESSION. Lưu trữ nó ở vị trí an toàn.
Kin Shah
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.