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

Mục lục:

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

Chúng tôi đã giới thiệu 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ơ 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 batch 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 vào hoặc bị loại bỏ. Ngoài ra, các bản sao lưu cơ sở dữ liệu sẽ được nối thêm vào một tệp sẽ tăng 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ời trang "đặt nó và quên nó", chúng ta sẽ tạo một kịch bản lệnh batch sẽ thích nghi với SQL Server của bạn khi các cơ sở dữ liệu mới được thêm vào và gỡ bỏ.

Để đến đúng điểm, đây là tập lệnh sao lưu:

@ECHO OFF SETLOCAL

REM Get date in format YYYY-MM-DD (assumes the locale is the United States) FOR /F “tokens=1,2,3,4 delims=/” %%A IN (‘Date /T’) DO SET NowDate=%%D-%%B-%%C

REM Build a list of databases to backup SET DBList=%SystemDrive%SQLDBList.txt SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] NOT IN (‘master’,’model’,’msdb’,’tempdb’)” > “%DBList%”

REM Backup each database, prepending the date to the filename FOR /F “tokens=*” %%I IN (%DBList%) DO ( ECHO Backing up database: %%I SqlCmd -E -S MyServer -Q “BACKUP DATABASE [%%I] TO Disk=’D:Backup%NowDate%_%%I.bak'” ECHO. )

REM Clean up the temp file IF EXIST “%DBList%” DEL /F /Q “%DBList%”

ENDLOCAL

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

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

Tùy chỉnh và chạy tập lệnh Batch

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

  • Nếu ngôn ngữ 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 theo định dạng “Thứ Ba ngày 13 tháng 13 năm 2009”. Nếu trường hợp này xảy ra, biến NowDate sẽ không tạo ra định dạng mong muốn và cần được điều chỉnh. (1 địa điểm)
  • Thay đổi 'MyServer' thành tên của SQL Server của bạn (thêm tên cá thể nếu có). (2 nơi)
  • Các cơ sở dữ liệu có tên là ‘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 các tên cơ sở dữ liệu bổ sung vào danh sách này nếu bạn không muốn chúng được sao lưu. (1 địa điểm)
  • Thay đổi vị trí sao lưu từ ‘D: Backup’ sang vị trí bạn muốn lưu trữ các tệp sao lưu cơ sở dữ liệu.

Khi bạn đã tùy chỉnh tập lệnh batch, hãy lên lịch cho nó chạy qua Windows Task Scheduler với tư cách là người dùng có quyền Administrator và bạn đã sẵn sàng.

Đề xuất: