使用SQL Server Management Studio 创建数据库备份作业

Posted GarsonZhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQL Server Management Studio 创建数据库备份作业相关的知识,希望对你有一定的参考价值。

--完整备份,每周一次
USE Master
GO
declare @str varchar(100)
set @str=\'D:\\Weldon\\DBBACK\\FullBak\'+replace(replace(replace(convert(varchar,getdate(),20),\'-\',\'\'),\' \',\'\'),\':\',\'\')+\'.bak\'
BACKUP DATABASE [demo] TO DISK=@str
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME=N\'Demo完整备份\',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO


/*******************差异备份作业*******************/
--截断日志
USE Master
GO
BACKUP LOG Demo  WITH NO_LOG
GO
--收缩日志文件
USE Demo
GO
DBCC SHRINKFILE (N\'Demo_log\',0,TRUNCATEONLY)
GO
--差异备份,每天一次
USE Master
GO
declare @str varchar(100)
set @str=\'D:\\Weldon\\DBBack\\DiffBak\'+replace(replace(replace(convert(varchar,getdate(),20),\'-\',\'\'),\' \',\'\'),\':\',\'\')+\'.diff\'
BACKUP DATABASE [Demo] TO DISK=@str
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME=N\'Demo差异备份\',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO


/******************日志备份作业*******************/
--日志备份,每小时一次
USE Demo
GO
declare @str varchar(100)
set @str=\'D:\\Weldon\\logbak\'+replace(replace(replace(convert(varchar,getdate(),20),\'-\',\'\'),\' \',\'\'),\':\',\'\')+\'.trn\'
BACKUP LOG [Demo] TO DISK=@str
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME=N\'Demo日志备份\',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO


--删除过期的备份文件,每天两次
declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
set @dir=\'del D:\\Weldon\\\'
set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),\'-\',\'\'),\' \',\'\'),\':\',\'\'),8)
set @str=@dir+\'fullbak\'+@filename+\'*.bak\'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),\'-\',\'\'),\' \',\'\'),\':\',\'\'),8)
set @str=@dir+\'diffbak\'+@filename+\'*.diff\'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),\'-\',\'\'),\' \',\'\'),\':\',\'\'),8)
set @str=@dir+\'logbak\'+@filename+\'*.trn\'
exec xp_cmdshell @str

https://www.cnblogs.com/devloper110/articles/1298650.html

 

SQL Server 作业无非就是按照规定的时间执行指定的脚本,这里介绍如何用SSMS(SQL Sever 2008)创建作业备份数据库。

 

 

(0)假设在创建作业之前你所要备份的数据库已经存在;其次,你已经会启动SQL Sever 代理(一般是关闭的)

 

(1)创建SQL Server代理作业

(1.1)新建作业,输出常规信息

如上图:输入作业名称(如:BackupJobTest),这里所有者和类别都是默认的,输入说明(就跟写代码要写注释一样,利人利己)

 

(1.2)设置作业执行步骤

点击左边“选择页”中的步骤属性选项卡,点击“新建”按钮

作业步骤属性窗口中,类型选择(T-SQL),选择要备份的数据库,并粘贴上调试好的SQL 备份脚本,由于我也是第一次写,贴一段示例在这里,读者可以自行参考修改:

复制代码
--将SQL脚本赋值给变量
declare @SqlBackupDataBase as nvarchar(1000)
set @SqlBackupDataBase=N\'BACKUP DATABASE YourDataBaseName TO DISK = \'\'E:\\DBBackup\\YourDataBaseName-\'+
CONVERT(varchar(11),GETDATE(),112)+REPLACE(CONVERT(varchar(12),GETDATE(),108),\':\',\'\')+\'.bak\'\'\'
--备份文件格式:YourDataBaseName-20140626233410.bak
print @SqlBackupDataBase --打印出来(为了方便调试,可省略)
exec sp_executesql @SqlBackupDataBase --调用系统存储过程,执行SQL
复制代码

注:CONVERT()函数的第三个参数是时间样式ID;用REPLACE()函数替换掉了时间中的冒号(因为Windows中文件名不能包含该字符)

时间格式及ID对照表参考:W3school

 

(1.3)设置作业执行计划

 

在计划选项卡中,点击“新建”按钮新建计划:

设置完成后,点击”确定“按钮,另外三个属性“警报”、“通知”、“目标”如果需要可以自行设置,这里不再讲述。

 

完成计划设置后,点击上级的“确定”按钮,作业就创建完成了。

 

(2)手动验证作业执行的正确性

 

右键单击作业节点下刚建立的作业(图中的“BackupJobTest”),选择‘作业开始步骤(T)’

执行结果如下,表示成功:

点击“查看历史记录(V)”,可查看日志:

 

 

通用备份作业:

ALTER PROCEDURE [dbo].[my_backup] @DISK VARCHAR(400)
AS
BEGIN
    /*********************************************************
		
		参数为空时,不执行备份,只打印出备份语句,可以直观得出需要备份的数据库列表
		my_backup \'\'
		my_backup \'D:\\DBBackup\\\'
	*********************************************************/

    SET NOCOUNT ON;
    
    DECLARE @sql NVARCHAR(MAX);
	IF(LEN(@DISK)>1)
		IF(RIGHT(@DISK, 1) <> \'\\\') SET @DISK=@DISK+\'\\\'

    SET @sql = \'\';

	DECLARE @ts VARCHAR(50)=CONVERT(varchar(11),GETDATE(),112)+REPLACE(CONVERT(varchar(12),GETDATE(),108),\':\',\'\')

    SELECT @sql = @sql + \'IF EXISTS (SELECT * FROM [\'+name+\'].sys.extended_properties WHERE class_desc=\'\'DATABASE\'\' AND name=\'\'backup\'\' AND [value]=\'\'Y\'\')\'+CHAR(10)
		+\'SET @SQL=@SQL+\'\'BACKUP DATABASE [\' + name + \'] to DISK=\'\'\'\'\' + @DISK + name + \'-\'+@ts+\'.bak\'\'\'\';\'\'+CHAR(10) \' + CHAR(10)
    FROM sys.databases
    WHERE name NOT IN ( \'master\', \'tempdb\', \'model\', \'msdb\',\'ReportServer\',\'ReportServerTempDB\' );
    --print @sql    
	
    --EXEC (@sql);
	DECLARE @S NVARCHAR(MAX)=\'\'
	--	 my_backup \'D:\\DBBackup\\\'
	exec sp_executesql @sql,N\'@SQL NVARCHAR(MAX) output\',@S OUTPUT
	IF(ISNULL(@DISK,\'\')=\'\')
		PRINT @S
	ELSE
		EXEC (@S)
END;

  

将这个存储过程放到master中,创建作业定时执行这个存储过程,将需要备份的数据库添加一个扩展属性 backup值为Y即可

 

 

 

 原文:http://www.cnblogs.com/January/p/3811524.html

 

以上是关于使用SQL Server Management Studio 创建数据库备份作业的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Windows 和 SQL 身份验证使用 SQL Server Management Studio 连接到 SQL Server

怎样使用SQL Server Management Studio

使用 SQL Server Management Studio 连接到 SQL Server

使用PD(Power Designer)设计数据库,并且生成可执行的SQL文件创建数据库(本文以SQL Server Management Studio软件执行为例)

如何使用 SQL Server Management Studio (2008) 在 SQL Server Compact Edition 中创建列

SQL Server Central Management System