首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 自動備份腳本:備份 → 壓縮 → FTP 傳輸 → 保留 7 天

     編輯:關於SqlServer

Windows 批次檔 + osql + ncftp 實現無人值守異地備份

環境:Windows Server 2003 + SQL Server 2000。備份命名:`DB_YYYYMMDD_FULL.bak`。

核心批次檔 (完整可執行)

@ECHO OFF
SET dbbak_dir=E:\Backup\DB
IF NOT EXIST %dbbak_dir% MKDIR %dbbak_dir%

SET B_Database_Name=DB1
SET B_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

ECHO USE master; > %dbbak_dir%\FULL_backup.sql
ECHO GO >> %dbbak_dir%\FULL_backup.sql
ECHO BACKUP DATABASE %B_Database_Name% >> %dbbak_dir%\FULL_backup.sql
ECHO TO DISK = '%dbbak_dir%\%B_Database_Name%_%B_DATE%_FULL.bak' >> %dbbak_dir%\FULL_backup.sql
ECHO WITH INIT, NOUNLOAD, COMPRESSION; >> %dbbak_dir%\FULL_backup.sql
ECHO GO >> %dbbak_dir%\FULL_backup.sql

SET OSQL_PATH="C:\Program Files\Microsoft SQL Server\80\Tools\Binn\osql.exe"
SET DBUser=sa
SET DBpassword=StrongPassword

%EOSQL_PATH% -U %DBUser% -P %DBpassword% -i %dbbak_dir%\FULL_backup.sql -o %dbbak_dir%\%B_Database_Name%_%B_DATE%_FULL.log

:: FTP 上傳 (使用 ncftp 避開 Windows FTP 被動/主動模式坑)
SET FTP_User=user1
SET FTP_PW=ftpPass
SET FTP_IP=10.1.9.1
SET FTP_PORT=21
SET FTP_DIR=/home/dbbak
SET NCFTP_PATH="D:\Program Files\NcFTP\ncftpput.exe"

%NCFTP_PATH% -u %FTP_User% -p %FTP_PW% -P %FTP_PORT% %FTP_IP% %FTP_DIR% %dbbak_dir%\%B_Database_Name%_%B_DATE%_FULL.*

:: 保留 7 天 (需 Windows Resource Kit forfiles.exe)
FORFILES /P %dbbak_dir% /D -7 /M %B_Database_Name%*.bak /C "CMD /C DEL @FILE"
FORFILES /P %dbbak_dir% /D -7 /M %B_Database_Name%*.log /C "CMD /C DEL @FILE"

DEL /Q %dbbak_dir%\FULL_backup.sql

Linux 端清理腳本 (每日 cron)

#!/bin/bash
cd /home/dbbak/
if ls mm_db_$(date +%Y%m%d)*.BAK 1> /dev/null 2>&1; then
    find . -mtime +7 -delete
fi

現代化替代方案 (SQL Server 2008+)

  • Maintenance Plan / Ola Hallengren Scripts**:支援壓縮、加密、雲端儲存 (Azure Blob/S3)、可用性群組感知、詳細記錄。
  • PowerShell + dbatools**:`Backup-DbaDatabase -SqlInstance SRV -Database DB1 -BackupDirectory \\NAS\Backup -Compress -CopyOnly -AzureContainer ...`
  • Azure Blob / S3 直接備份**:`BACKUP DATABASE ... TO URL = 'https://...'` 免中繼 FTP。

關鍵最佳實務

  1. **備份驗證** :`RESTORE VERIFYONLY FROM DISK = '...'` 自動納入流程。
  2. **加密** :`WITH ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = ...)`。
  3. **異地多備** :至少兩地 (NAS + 雲端),定期抽樣還原演練。
  4. **監控告警** :作業失敗/備份檔大小異常/還原驗證失敗 → 郵件/Teams/Slack 即時通知。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved