我们知道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
52 END
执行存储过程(创建一个sql文件,比如:a.sql)
Use 数据库名称
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!
如果有更方便的方案,大家提出来。谢谢!