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

SQL Server Express 自動化備份與舊備份清理腳本實作

     編輯:關於SqlServer

需求背景

Express 版無 SQL Agent,需自行排程。目標:每日備份、保留 14 天、自動清理舊檔、記錄日誌。

架構設計

  1. BackupDB.sql:動態產生時間戳檔名,逐一備份使用者資料庫。
  2. DeleteDB.vbs:掃描備份目錄,刪除 14 天前檔案,寫入 Log.txt。
  3. Schedule.cmd:呼叫 sqlcmd 執行備份,再呼叫 cscript 執行清理。
  4. Windows 排程器每日觸發 Schedule.cmd。

核心腳本片段

-- BackupDB.sql 關鍵邏輯
DECLARE @dateString CHAR(12) = REPLACE(CONVERT(CHAR(8), GETDATE(), 112), '/', '') 
                          + REPLACE(CONVERT(CHAR(5), GETDATE(), 108), ':', '');
DECLARE @sql NVARCHAR(MAX), @dbname SYSNAME;
DECLARE cur CURSOR FOR SELECT name FROM sys.databases WHERE database_id > 4; -- 排除系統庫
OPEN cur;
FETCH NEXT FROM cur INTO @dbname;
WHILE @@FETCH_STATUS = 0 BEGIN
    SET @sql = N'BACKUP DATABASE ' + QUOTENAME(@dbname) + 
               N' TO DISK = N''D:\SQLTEST\' + @dbname + N'_' + @dateString + N'.BAK'' WITH INIT, COMPRESSION';
    EXEC (@sql);
    FETCH NEXT FROM cur INTO @dbname;
END
CLOSE cur; DEALLOCATE cur;
' DeleteDB.vbs 關鍵邏輯
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("D:\SQLTEST\")
For Each file In folder.Files
    If DateDiff("d", file.DateLastModified, Now) > 14 Then
        file.Delete
        logFile.WriteLine "Deleted: " & file.Name
    End If
Next

補充建議

  • 啟用備份壓縮 (WITH COMPRESSION) 節省空間(Express 2008 R2+ 支援)。
  • 備份目錄建議放在非系統碟,並設定唯寫權限防止勒索軟體加密。
  • 定期測試還原驗證備份可用性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved