sqlmaint 实用工具可以对一个或多个数据库执行一组指定的维护操作。使用 sqlmaint,可以运行 DBCC 检查、备份数据库及其事务日志、更新统计以及重建索引。所有数据库维护活动都会生成报表,可以将此报表发送到指定的文本文件、HTML 文件或电子邮件帐户。sqlmaint 可以执行以前版本的 SQL Server 所创建的数据库维护计划。若要从命令提示符运行 SQL Server 维护计划,请使用 dtexec 实用工具。

sqlmaint
[-?] |
[
     [-S server_name[instance_name]]
     [-U login_ID [-P password]]
     {
          [-D database_name | -PlanName name | -PlanID guid ]
          [-Rpt text_file]
          [-To operator_name]
          [-HtmlRpt html_file [-DelHtmlRpt <time_period>] ]
          [-RmUnusedSpace threshold_percentfree_percent]
          [-CkDB | -CkDBNoIdx]
          [-CkAl | -CkAlNoIdx]
          [-CkCat]
          [-UpdOptiStats sample_percent]
          [-RebldIdx free_space]
          [-SupportComputedColumn]
          [-WriteHistory]
          [
               {-BkUpDB [backup_path] | -BkUpLog [backup_path] }
               {-BkUpMedia
                    {DISK [
                           [-DelBkUps <time_period>]
                           [-CrBkSubDir ]
                           [-UseDefDir ]
                          ]
                     | TAPE
                    }
               }
               [-BkUpOnlyIfClean]
               [-VrfyBackup]
          ]
     }
]
<time_period> ::=
number[minutes | hours | days | weeks | months]

参数:

参数与其值之间必须用一个空格分隔。例如,在 -S 和 server_name 之间必须有一个空格。

-?

指定返回 sqlmaint 的语法关系图。此参数必须单独使用。

-S server_name[ instance_name]

指定 MicrosoftSQL Server 的目标实例。指定 server_name 将连接到该服务器中的 SQL Server 数据库引擎的默认实例。指定 server_nameinstance_name 将连接到该服务器中的数据库引擎的命名实例。如果不指定服务器,sqlmaint 将连接到本地计算机上的数据库引擎的默认实例。

-U login_ID

指定连接服务器时使用的登录 ID。如果不提供登录 ID,sqlmaint 将尝试使用 Microsoft Windows 身份验证。如果 login_ID 包含特殊字符,则必须用双引号 (“) 引起来;否则,双引号为可选。

-P password

指定登录 ID 的密码。仅当同时提供 -U 参数时才有效。如果 password 包含特殊字符,则必须用双引号引起来;否则,双引号为可选。

-D database_name

指定要在其中执行维护操作的数据库的名称。如果 database_name 包含特殊字符,则必须用双引号引起来;否则,双引号为可选。

-PlanName name

指定使用数据库维护计划向导定义的数据库维护计划的名称。sqlmaint 仅使用来自该计划的数据库列表信息。任何在其他 sqlmaint 参数中指定的维护活动都可应用于此列表中的数据库。

-PlanID guid

指定使用数据库维护计划向导定义的数据库维护计划的全局唯一标识符 (GUID)。sqlmaint 仅使用来自该计划的数据库列表信息。任何在其他 sqlmaint 参数中指定的维护活动都可应用于此列表中的数据库。这必须与 msdb.dbo.sysdbmaintplans 中的 plan_id 值匹配。

-UseDefDir

对于磁盘备份,指定在默认的备份目录中创建备份文件。如果同时指定 UseDefDir 和 backup_path,则前者将取代后者。在默认 MicrosoftSQL Server 安装中,默认备份目录为 C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLBackup。

TAPE

指定备份介质为磁带。

-BkUpOnlyIfClean

指定仅当指定的 -Ck 检查未发现数据问题时才进行备份。维护操作的运行顺序与其在命令提示中出现的顺序相同。如果要同时指定 -BkUpOnlyIfClean,则应在 -BkUpDB/-BkUpLog 参数前指定参数 -CkDB、-CkDBNoIdx、-CkAl、-CkAlNoIdx、-CkTxtAl 或 -CkCat,否则无论检查是否报告问题,都将进行备份。

-VrfyBackup

指定备份完成时,对备份运行 RESTORE VERIFYONLY。

number[minutes| hours| day| weeks| months]

指定时间间隔,用于确定报表或备份文件是否旧到需要将其删除。number 是一个整数,后跟时间单位(没有空格)。有效示例:

*12weeks

*3months

*15days

如果仅指定 number,则默认日期部分为 weeks。

示例:

A. 对数据库执行 DBCC 检查

sqlmaint -S MyServer -D AdventureWorks -CkDB -CkAl -CkCat -Rpt C:MyReportsAdvWks_chk.rpt

B. 使用计划中所有数据库的 15% 样本更新统计信息。同时,压缩任何已达到 110 MB 的数据库,以便仅使用 10% 可用空间

sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10

C. 将计划中的所有数据库备份到默认 x:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLBackup 目录下的各自子目录中。同时,删除所有超过两个星期的备份

sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks

D. 将数据库备份到默认 x:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLBackup 目录中。

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir

一个客户的备份的例子:

每周六做一次全库备份,保存两周的全库备份(-PlanID 可以不变就使用下面的值,如果要单独备份一个数据库,可以加上-D “dbname”参数,-BkExt参数可以不加):

EXECUTE master.dbo.xp_sqlmaint N’-PlanID 0D3447E6-67AA-4C30-8226-491BF1684567 -WriteHistory -VrfyBackup -BkUpMedia DISK -BkUpDB “D:DataBakTotal” -DelBkUps 2WEEKS -CrBkSubDir -BkExt “BAK”‘

除周六以外每天做一次差异备份:

BACKUP DATABASE [info_guodu] TO DISK = N’D:DataBakIncreaseinfo_guodu.bak’ WITH INIT , NOUNLOAD , DIFFERENTIAL , NAME = N’info_guodu 备份’, NOSKIP , STATS = 10, NOFORMAT