背景
sql server express版無法使用作業,提供一種解決思路
fullbak.sql 完整備份
數據庫實例級別的完整備份,備份路徑為E:\sqlbak\數據庫名\,注意需要添加好當前數據庫實例各數據庫名的子目錄
EXEC sp_MSForEachDB 'USE [?]; PRINT DB_NAME(); DECLARE @databasename NVARCHAR(128) =DB_NAME(); --恢復模式為完整 IF EXISTS (SELECT * FROM sys.databases WHERE name=DB_NAME()AND recovery_model_desc=''FULL'')BEGIN DECLARE @backupname NVARCHAR(128); SET @backupname=''E:\sqlbak\''+@databasename+''\''+@databasename+''_fullbak_''+REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(50), GETDATE(), 120), ''-'', ''''), '':'', ''''), '' '', ''_'')+''.bak''; EXEC('' BACKUP DATABASE [''+@databasename+''] TO DISK = N''''''+@backupname+'''''' WITH RETAINDAYS = 14, NOFORMAT, NOINIT, NAME = N''''''+@databasename+''-完整 數據庫 備份'''', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 '' ); END; '
cleanbak.sql 清理腳本
/* --- 開啟xp_cmdshell權限,可通過數據庫操作文件 --- use master; go sp_configure 'show advanced options',1 reconfigure go sp_configure 'xp_cmdshell',1 reconfigure go */ exec master.dbo.xp_cmdshell 'forfiles /p "E:\sqlbak" /s /m *.bak /d -15 /c "cmd /c del @path"'
SQLBak.bat 使用bat執行sql文件
@ECHO OFF? SET dbhost=127.0.0.1 SET dbuser=sa SET dbpasswd=123456 set dbName=master SET sqlpath=%~dp0 set bakfile=fullbak.sql set cleanfile=cleanbak.sql ::執行SQL腳本 osql -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %sqlpath%%bakfile% ECHO 備份完成! ::執行清理腳本 osql -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %sqlpath%%cleanfile% ECHO 清理完成! PAUSE @ECHO Done!?
配置windows計划任務,執行該bat文件
【管理工具】-【任務計划程序】-【創建基本任務】
選擇每天2:00,執行SQLBak.bat 文件