我们知道Sql Server 企业版和标准版都可创建定时备份,很方便的,而Sql Express并没有这个功能,所以需要自己开发,思路是这样的。
- 存储过程备份数据库。
- 做个批处理,利用sqlcmd执行存储计划。
- 利用windows计划,定时执行批处理。
在第二步的时候,需要你配置数据的允许远程连接。关于怎么配置请参考:
http://blog.csdn.net/wonsoft/article/details/4998677
或者
http://support.microsoft.com/kb/914277/
存储过程如下如下:
1 Create PROCEDURE [dbo].[BackDB]
2
3 @DBName sysname,
4 @bakType CHAR(1),
5 @bakToDir NVARCHAR(500)
6
7
8 AS
9 BEGIN
10
11 DECLARE @sqlCommand NVARCHAR(1000)
12
13 DECLARE @dateTime NVARCHAR(20)
14
15 DECLARE @bakFullPath NVARCHAR(500)
16
17 SELECT @dateTime=REPLACE(CONVERT(VARCHAR,GETDATE(),111),'/','')+REPLACE(CONVERT(VARCHAR,GETDATE(),108),':','')
18
19 IF @bakType='F'
20
21 BEGIN
22
23 SET @bakFullPath = @bakToDir + @DBName + '_Full_' + @dateTime +'.BAK'
24
25 SET @sqlCommand='BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFullPath +''''
26
27 END
28
29 IF @bakType='D'
30
31 BEGIN
32
33 SET @bakFullPath = @bakToDir + @DBName + '_Diff_' + @dateTime + '.BAK'
34
35 SET @sqlCommand='BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFullPath + ''' WITH DIFFERENTIAL'
36
37 END
38
39 IF @bakType='L'
40
41 BEGIN
42
43 SET @bakFullPath = @bakToDir + @DBName + '_Log_' + @dateTime + '.TRN'
44
45 SET @sqlCommand='BACKUP LOG ' + @DBName + ' TO DISK = ''' + @bakFullPath + ''''
46
47 END
48
49
50 EXECUTE sp_executesql @sqlCommand
51
2
3 @DBName sysname,
4 @bakType CHAR(1),
5 @bakToDir NVARCHAR(500)
6
7
8 AS
9 BEGIN
10
11 DECLARE @sqlCommand NVARCHAR(1000)
12
13 DECLARE @dateTime NVARCHAR(20)
14
15 DECLARE @bakFullPath NVARCHAR(500)
16
17 SELECT @dateTime=REPLACE(CONVERT(VARCHAR,GETDATE(),111),'/','')+REPLACE(CONVERT(VARCHAR,GETDATE(),108),':','')
18
19 IF @bakType='F'
20
21 BEGIN
22
23 SET @bakFullPath = @bakToDir + @DBName + '_Full_' + @dateTime +'.BAK'
24
25 SET @sqlCommand='BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFullPath +''''
26
27 END
28
29 IF @bakType='D'
30
31 BEGIN
32
33 SET @bakFullPath = @bakToDir + @DBName + '_Diff_' + @dateTime + '.BAK'
34
35 SET @sqlCommand='BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFullPath + ''' WITH DIFFERENTIAL'
36
37 END
38
39 IF @bakType='L'
40
41 BEGIN
42
43 SET @bakFullPath = @bakToDir + @DBName + '_Log_' + @dateTime + '.TRN'
44
45 SET @sqlCommand='BACKUP LOG ' + @DBName + ' TO DISK = ''' + @bakFullPath + ''''
46
47 END
48
49
50 EXECUTE sp_executesql @sqlCommand
51
52 END
执行存储过程(创建一个sql文件,比如:a.sql)
Use 数据库名称
EXEC BackDB N'数据库名称',N'F',N'D:\data\a\';
EXEC BackDB N'数据库名称',N'F',N'D:\data\a\';
新建一个批处理文件,利用sqlcmd 登录数据库并且执行我们的文件(a.sql)
sqlcmd -S .\SQLEXPRESS -E -i a.sql
创建一个记事本,吧上面的命令拷贝粘贴,修改扩展名为bat. 比如:a.bat
参数介绍:
-E : 使用可信任连接,而不是用户名和密码登录。
-S :ServerName. 我在这里吃了亏,花费了好几个小时; 如果你的电脑对端口做了修改,同样要添加端口,比如改成这样:127.0.0.1:40000\SQLEXPRESS
-i : 执行的文件名。
关于sqlcmd更多参数请看这里。
一切准备就绪,下面是做个windows计划任务。
开始 》 所有程序 》 附件》 系统工具》 任务计划
这个界面很简单,选择a.bat文件。什么时间执行。OK!
如果有更方便的方案,大家提出来。谢谢!