Trang chủ » làm thế nào để » Batch Script để sao lưu tất cả cơ sở dữ liệu máy chủ SQL của bạn

    Batch Script để sao lưu tất cả cơ sở dữ liệu máy chủ SQL của bạn

    Chúng tôi đã đề cập đến cách sao lưu cơ sở dữ liệu SQL Server từ dòng lệnh, vậy nếu bạn muốn sao lưu tất cả các cơ sở dữ liệu của mình cùng một lúc thì sao? Bạn có thể tạo một tập lệnh bó chạy lệnh sao lưu cho mỗi cơ sở dữ liệu, nhưng tập lệnh này sẽ phải được cập nhật mỗi khi cơ sở dữ liệu được thêm hoặc xóa. Ngoài ra, tất cả các bản sao lưu cơ sở dữ liệu sẽ được thêm vào một tệp sẽ tăng theo kích thước của bản sao lưu mới mỗi khi nó được chạy. Thay vào đó, trong thực tế, hãy cài đặt nó và quên nó theo kiểu thời trang, chúng tôi sẽ tạo một tập lệnh bó sẽ thích ứng với Máy chủ SQL của bạn khi cơ sở dữ liệu mới được thêm và xóa.

    Để đi thẳng vào vấn đề, đây là kịch bản sao lưu:

    @ECHO TẮT
    CÀI ĐẶT

    REM Nhận ngày ở định dạng YYYY-MM-DD (giả sử miền địa phương là Hoa Kỳ)
    Mã thông báo FOR / F và = 1,2,3,4 delims / / %% A IN ('Ngày / T') DO SET NowDate = %% D - %% B - %% C

    REM Xây dựng danh sách cơ sở dữ liệu để sao lưu
    THIẾT LẬP DBList =% SystemDrive% SQLDBList.txt
    SqlCmd -E -S MyServer -h-1 -W -Q LẬP SỐ NoCount ON; Tên CHỌN TỪ master.dbo.sysDatabase WHERE [Tên] KHÔNG IN ('master', 'model', 'msdb', 'tempdb')

    REM Sao lưu từng cơ sở dữ liệu, thêm ngày vào tên tệp
    Mã thông báo FOR / F và = * Sáng %% I IN (% DBList%) DO (
    Cơ sở dữ liệu sao lưu ECHO: %% I
    SqlCmd -E -S MyServer -Q BACKUP DATABASE [%% I] TO Disk = "D: Sao lưu% NowDate% _ %% I.bak"
    ECHO.
    )

    REM Làm sạch tập tin tạm thời
    NẾU EXIST,% DBList%, DEL DEL / F / Q,% DBList% '

    KẾT THÚC

    Giả sử ngày là 1/13/2009 và bạn có 3 cơ sở dữ liệu có tên 'MyDB', 'AnotherDB' và 'Tên DB với Spaces', tập lệnh sẽ tạo ra 3 tệp trong vị trí sao lưu được chỉ định:

    • 2009-01-13_AnDBDB.bak
    • 2009-01-13_DB Tên với Spaces.bak
    • 2009-01-13_MyDB.bak

    Tùy chỉnh và chạy Batch Script

    Tất nhiên, bạn sẽ muốn tùy chỉnh tập lệnh theo môi trường của mình, vì vậy đây là những gì bạn cần làm:

    • Nếu ngôn ngữ của máy của bạn không được đặt thành Hoa Kỳ, lệnh 'Ngày / T' có thể không trả về ngày ở định dạng Tu Tue 01/13/2009. Nếu đây là trường hợp, biến NowDate sẽ không tạo ra định dạng mong muốn và nên được điều chỉnh. (1 nơi)
    • Thay đổi 'MyServer' thành tên của SQL Server của bạn (thêm tên đối tượng nếu có). (2 nơi)
    • Các cơ sở dữ liệu có tên 'master', 'model', 'msdb' và 'tempdb' là các cơ sở dữ liệu đi kèm với SQL Server. Bạn có thể thêm tên cơ sở dữ liệu bổ sung vào danh sách này nếu bạn không muốn sao lưu chúng. (1 nơi)
    • Thay đổi vị trí sao lưu từ 'D: Sao lưu' thành vị trí bạn muốn lưu trữ tệp sao lưu cơ sở dữ liệu.

    Khi bạn đã tùy chỉnh tập lệnh bó, hãy lên lịch để chạy qua Trình lập lịch tác vụ Windows với tư cách là người dùng có quyền Quản trị viên và bạn đã hoàn tất.