原文:SQLServer使用脚本执行数据库备份
背景
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 文件
来源:https://www.cnblogs.com/lonelyxmas/p/12271717.html
