“维护计划”实现MSSQL定期备份并压缩存档 - 新网数据 - 主机,域名,邮箱提供商 - www.net8.com.cn
  帮助中心
   请选择以下内容
   ·业务办理流程
   ·ICP备案流程
   ·域名相关问题
   ·主机相关问题
   ·邮局相关问题
   ·服务器相关问题
   ·数据库相关问题
   ·网站常见问题
   ·付款帐号
    帮助中心
“维护计划”实现MSSQL定期备份并压缩存档

mssql有命令行客户端工作,可以通过bat脚本调用命令行工具执行备份命令,这样还可以很方便的调用7z,(win)rar等来自动压缩,比mssql 自带的维护计划灵活多了。“维护计划”好像也可以调用压缩工具,只是要启用xp_cmd这个很风险的存储过程,让人不安心,所以一般不这么用,备份文件都是手工压缩再下载到本地存档备份。


MS sql 的官方命令行客户端叫sqlcmd,ms sql2005默认安装的,位于 X:\Program Files\Microsoft SQL Server\90\Tools\Binn ,该目录会被自动加入windows 的PATH环境变量中,所以可以直接调用,先看看基本的帮助文档:


C:\Documents and Settings\Administrator>sqlcmd /?
Microsoft (R) SQL Server 命令行工具
版本 9.00.1399.06 NT INTEL X86
版权所有 (c) Microsoft Corporation。保留所有权利。


用法: Sqlcmd            [-U 登录 ID]          [-P 密码]
 [-S 服务器]            [-H 主机名]          [-E 可信连接]
 [-d 使用数据库名称] [-l 登录超时值]     [-t 查询超时值]
 [-h 标题]           [-s 列分隔符]      [-w 屏幕宽度]
 [-a 数据包大小]        [-e 回显输入]        [-I 允许带引号的标识符]
 [-c 命令结束]            [-L[c] 列出服务器[清除输出]]
 [-q "命令行查询"]   [-Q "命令行查询" 并退出]
 [-m 错误级别]        [-V 严重级别]     [-W 删除尾随空格]
 [-u unicode 输出]    [-r[0|1] 发送到 stderr 的消息]
 [-i 输入文件]         [-o 输出文件]        [-z 新密码]
 [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]
 [-k[1|2] 删除[替换]控制字符]
 [-y 可变长度类型显示宽度]
 [-Y 固定长度类型显示宽度]
 [-p[1] 打印统计信息[冒号格式]]
 [-R 使用客户端区域设置]
 [-b 出错时中止批处理]
 [-v 变量 = "值"...]  [-A 专用管理连接]
 [-X[1] 禁用命令、启动脚本、环境变量[并退出]]
 [-x 禁用变量情况]
 [-? 显示语法摘要]


--------------------------------------------------------------
一个最简单的一个命令行备份实例
C:\Documents and Settings\Administrator>sqlcmd -U sa -P sa -S localhost -Q "backup database foo to disk='f:\backup\foo_110630.bak'"
已为数据库 'foo',文件 'foo' (位于文件 1 上)处理了 5032 页。
已为数据库 'foo',文件 'foo_log' (位于文件 1 上)处理了 1 页。
BACKUP DATABASE 成功处理了 5033 页,花费 1.871 秒(22.036 MB/秒)。


一个比较完善的自动批处理脚本


一个比较完善的自动批处理脚本,可以同时备份并rar压缩多个数据库,可以按需要在此基础上修改改进。


@ECHO ON
set d=%date:~0,10%
set d=%d:-=%
set t=%time:~0,8%
set t=%t::=%
set stamp=%p%%d%%t%
set bakupfolder=F:\backup\
rem    1按子目录保存备份文件;0不按
set lay_in_subfolder=1


call :backupone foo
call :backupone foo2
call :backupone foo3
call :backupone foo4


goto :EOF 


@ECHO OFF


:backupone
setlocal
echo %1
set dbname=%1
if not exist %bakupfolder%%dbname% mkdir %bakupfolder%%dbname%


if %lay_in_subfolder%==1 (
set subfolder=%dbname%\
)else set subfolder=
rem echo %bakupfolder%%subfolder%%dbname%%stamp%.bak
sqlcmd -U sa -P "sa" -S localhost -Q "backup database %dbname% to disk='%bakupfolder%%subfolder%%dbname%%stamp%.bak'"
"C:\Program Files\WinRAR\RAR.exe" a -ep1 -r -o+ -m5 -s -df "%bakupfolder%%subfolder%%dbname%%stamp%".rar "%bakupfolder%%subfolder%%dbname%%stamp%.bak"


endlocal&goto :EOF


脚本说明


1. set bakupfolder=F:\backup\


备份文件存放于目录F:\backup\ (此目录需要事先建好)


2. 默认每个数据库放置到bakupfolder下的同名的子目录(脚本自动创建)中;设置lay_in_subfolder=0后,将直接放置到bakupfolder


3. 备份文件名中自动添加备份时的时间字符串,不用担心备份目录下名字重复,也便于管理。


4. call :backupone foo


foo是需要备份的数据库,需要备份其它数据库,按同样的方式一行写一条即可
5. 命令行驱动备份操作:sqlcmd -U sa -P "sa" -S localhost -Q "xxx"


这里连接数据库的用户名密码都是sa,请改成你的实际用户名密码。mssql密码中如果有一些特殊字符,可能报错,所以加上双引号。如果密码简单,不加也可以;不过sa密码,一般都是很变态的吧~~
备份脚本的调用


加到windows计划任务里,定期执行,是一个很好的主意。


上面脚本里,只对mssql数据库执行了备份的操作,如果加入整理索引碎片、重建索引等维护操作,也是很好的自动化维护方案。


这样处理,就可以弃用mssql自带的“维护计划”了。


 返回目录
 
版权所有:
新网数据.中国 www.net8.com.cn 2002-2011 All Rights Reserved.
总部地址:
重庆市九龙坡区石桥铺一城精英国际40层17号
邮政编码:
510660
业务流程:
支付方式:
售后服务热线:
18581111196
客服-QQ-短号:
1508888835
 
正式合作伙伴:
CNNIC | 中国万网 | 新网XINNET
 
信息产业部备案许可编号:渝ICP备10013348号-32