我们知道Sql Server 企业版和标准版都可创建定时备份,很方便的,而Sql Express并没有这个功能,所以需要自己开发,思路是这样的。
- 存储过程备份数据库。
- 做个批处理,利用sqlcmd执行存储计划。
- 利用windows计划,定时执行批处理。
在第二步的时候,需要你配置数据的允许远程连接。关于怎么配置请参考:
http://blog.csdn.net/wonsoft/article/details/4998677
或者
http://support.microsoft.com/kb/914277/
存储过程如下如下:
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)
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!
如果有更方便的方案,大家提出来。谢谢!