[zt] sqlmaint 实用工具和xp_sqlmaint扩展过程

[zt] sqlmaint 实用工具和xp_sqlmaint扩展过程

上一篇 / 下一篇  2009-08-13 10:35:17 / 个人分类:SQL Server管理

         sqlmaint实用工具在一个或多个数据库上执行一套指定的维护操作。可以使用sqlmaint来运行 DBCC 检查,备份数据库及其事务日志,更新统计并重建索引。所有数据库维护活动都生成一个报表,该报表可以发送到一个指定的文本文件、HTML 文件或电子邮件帐户。

语法

sqlmaint
[-?]|
[
     [-Sserver_name[\instance_name]]
     [-Ulogin_ID[-Ppassword]]
     {
         [-Ddatabase_name|-PlanNamename|-PlanIDguid]
         [-Rpttext_file]
         [-Tooperator_name]
         [-HtmlRpthtml_file[-DelHtmlRpt<time_period>] ]
         [-RmUnusedSpacethreshold_percentfree_percent]
         [-CkDB|-CkDBNoIdx]
         [-CkAl|-CkAlNoIdx]
         [-CkCat]
         [-UpdOptiStatssample_percent]
         [-RebldIdxfree_space]
         [-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]

说明   参数与其值之间必须用一个空格分隔。例如,在-Sserver之间必须有一个空格。

注释

sqlmaint在一个或多个数据库上执行维护操作。如果指定了-D,则仅在指定的数据库上执行在剩余的开关中指定的操作。如果指定了-PlanName-PlanID,则sqlmaint从指定的维护计划中检索的唯一信息是计划中的数据库列表。在sqlmaint剩余参数中指定的全部操作,都将应用于从计划取得的列表中的每个数据库。sqlmaint不进行在计划本身中定义的任何维护活动。

如果成功运行,则sqlmaint实用工具返回 0,否则返回 1。在下列情况下将报告失败:

  • 如果任何维护操作失败。
  • 如果-CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl-CkCat检查发现数据有问题。
  • 如果遇到常规错误。

有关此实用工具的位置和运行方式的信息,请参见命令提示实用工具入门

示例
展开或折叠文本A. 对 Northwind 数据库执行 DBCC 检查
sqlmaint -S MyServer -U "sa" -P "SaPwd" -D Northwind -CkDB -CkAl -CkCat -Rpt C:\MyReports\Nwind_chk.rpt
展开或折叠文本B. 使用计划中所有数据库的 15% 样本更新统计信息。同时将任何已达到 110 MB 的数据库收缩到仅有 10% 的可用空间
sqlmaint -S MyServer -U "sa" -P "SaPwd" -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10
展开或折叠文本C. 将计划中的所有数据库备份到它们在默认的x:\Program Files\Microsoft SQL Server\Mssql\Backup 目录中各自的子目录中。同时删除任何超过两个星期的备份
sqlmaint -S MyServer -U "sa" -P "SaPwd" -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks
参数

-?

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

-Sserver_name[\instance_name]

指定 Microsoft® SQL Server™ 2000 的目标实例。指定用于连接到该服务器上的 SQL Server 2000 默认实例的server_name。指定用于连接到该服务器上的 SQL Server 2000 命名实例的server_name\instance_name。如果未指定服务器,则sqlmaint连接到本地计算机上的 SQL Server 2000 默认实例。

-Ulogin_ID

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

安全说明   如果可能,请使用 Windows 身份验证。

-Ppassword

指定登录 ID 的密码。仅当也使用-U参数时才有效。如果password包含特殊字符,则它必须用英文双引号 (") 引起来;否则,双引号是可选的。

安全说明   不会屏蔽密码。如果可能,请使用 Windows 身份验证。

-Ddatabase_name

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

-PlanNamename

指定使用数据库维护计划向导定义的数据库维护计划的名称。sqlmaint唯一使用的该计划中的信息是其数据库列表。任何在其它sqlmaint参数中指定的维护活动都可应用于此列表中的数据库。可以从 SQL Server 企业管理器获得计划名称。

-PlanIDguid

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

-Rpttext_file

指定包含所生成报表的文件的完整路径和名称。报表也可以生成到屏幕上。报表通过将日期添加到文件名中来维护版本信息。日期生成方式如下:在文件名末尾、句点之前,使用 _yyyyMMddhhmm格式。Yyyy= 年,MM= 月,dd= 日,hh= 时,mm= 分。

如果在 1996 年 12 月 1 日的 10:23 A.M. 运行该实用工具,且text_file的值为:

c:\Program Files\Microsoft SQL Server\Mssql\Backup\Nwind_maint.rpt

生成的文件名为:

c:\Program Files\Microsoft SQL Server\Mssql\Backup\Nwind_maint_199612011023.rpt

sqlmaint访问远程服务器时text_file需要完整的 UNC 文件名。

-Tooperator_name

指定通过 SQL 邮件将生成的报表发送给哪个操作员。可以使用 SQL Server 企业管理器定义操作员。

-HtmlRpthtml_file

指定包含所生成的 HTML报表的文件的完整路径和文件名称。sqlmaint通过向文件名追加格式为 _yyyyMMddhhmm的字符串生成文件名,这与-Rpt参数的作用相同。

sqlmaint访问远程服务器时,html_file需要完整的 UNC 文件名。

-DelHtmlRpt<time_period>

指定如果报表文件创建后的时间间隔超过了 <time_period> 时将删除报表目录中的所有 HTML 报表。

-DelHtmlRpt查找那些名称符合由html_file参数生成的模式的文件。如果html_file为 c:\Program Files\Microsoft SQL Server\Mssql\Backup\Nwind_maint.htm,则-DelHtmlRpt将导致sqlmaint删除任何名称与 c:\Program Files\Microsoft SQL Server\Mssql\Backup\Nwind_maint*.htm 模式匹配的文件,以及早于指定的 <time_period> 的文件。

-RmUnusedSpacethreshold_percent free_percent

指定从-D指定的数据库中删除未使用的空间。此选项仅对定义为自动增长的数据库有用。Threshold_percent按兆字节指定在sqlmaint尝试删除未使用的数据空间之前数据库必须达到的大小。如果数据库小于threshold_percent,则不进行操作。Free_percent指定在数据库中必须保留的未使用空间的大小,按数据库最终大小的百分比指定。例如,如果一个 200 MB 的数据库包含 100 MB 的数据,将free_percent指定为 10,则最终数据库大小为 110 MB。应该注意的是,如果数据库小于free_percent加上数据库中的数据,则数据库不会扩展。例如,如果一个 108 MB 的数据库有 100 MB 的数据,则将free_percent指定为 10 不会使数据库扩展到 110 MB,而仍是 108 MB。

-CkDB |-CkDBNoIdx

指定在-D指定的数据库中运行的 DBCC CHECKDB 语句或带有 NOINDEX 选项的 DBCC CHECKDB 语句。有关更多信息,请参见DBCC CHECKDB

如果sqlmaint运行时数据库正在使用,则会在text_file中写入一个警告。

-CkAl | -CkAlNoIdx

指定在-D指定的数据库中运行的 DBCC NEWALLOC 语句或带有 NOINDEX 选项的 DBCC NEWALLOC 语句。有关更多信息,请参见DBCC NEWALLOC

-CkCat

指定在-D指定的数据库中运行 DBCC CHECKCATALOG 语句。有关更多信息,请参见DBCC CHECKCATALOG

-UpdOptiStatssample_percent

指定在数据库的每个表上运行下列语句:

UPDATE STATISTICStableWITH SAMPLEsample_percentPERCENT

有关更多信息,请参见更新统计信息

-RebldIdxfree_space

指定使用free_space百分比值作为填充因子的倒数,重建目标数据库中的表的索引。例如,如果free_space百分比值为 30,则使用的填充因子为 70。如果free_space百分比值为 100,则使用初始的填充因子值重建索引。

-WriteHistory

指定在msdb.dbo.sysdbmaintplan_history中为由sqlmaint执行的每次维护操作生成一项。如果指定了-PlanName-PlanID,则sysdbmaintplan_history中的项目使用指定计划的 ID。如果指定了-D,则通过给计划 ID 赋予零值来生成sysdbmaintplan_history中的项目。

-BkUpDB[backup_path] |-BkUpLog[backup_path]

指定备份操作。-BkUpDb备份整个数据库。-BkUpLog仅备份事务日志。

[backup_path] 指定备份的目录。如果也指定了-UseDefDir,则不需要 [backup_path],如果两者都指定,则 [backup_path] 被-UseDefDir替代。备份可以放在目录或磁带设备地址中(例如,\\.\TAPE0)。数据库备份的文件名自动生成如下:

dbname_db_yyyyMMddhhmm.BAK

其中

  • dbname是正在进行备份的数据库的名称。
  • yyyyMMddhhmm是备份操作的时间,yyyy= 年,MM= 月,dd= 日,hh= 时,mm= 分。

    事务备份的文件名自动使用与下面相似的格式生成:

    dbname_log_yyyymmddhhmm.BAK

    如果使用-BkUpDB参数,则必须通过-BkUpMedia参数指定媒体。

-BkUpMedia

指定备份的媒体类型。

DISK

指定备份媒体为磁盘。

-DelBkUps<time_period>

指定如果创建备份后的时间间隔超过了 <time_period> 则删除备份目录中的所有备份文件。

-CrBkSubDir

指定在 [backup_path] 目录中创建子目录;如果同时指定了UseDefDir,则在默认的备份目录中创建子目录。子目录的名称从-D指定的数据库名称中生成。-CrBkSubDir提供了一种简单的方法,可用来将不同数据库的所有备份放入单独的子目录中,而不必更改 [backup_path] 参数。

-UseDefDir

指定在默认的备份目录中创建备份文件。如果两者都指定,则UseDefDir替代 [backup_path]。在默认的 SQL Server 2000 安装程序中,默认备份目录是 c:\Program Files\Microsoft SQL Server\Mssql\Backup。

TAPE

指定备份媒体为磁带。

-BkUpOnlyIfClean

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

-VrfyBackup

指定当备份完成时在备份上运行 RESTORE VERIFYONLY。

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

指定时间间隔,用来确定报表或备份文件是否陈旧到需要删除的程度。number是一个整数。有效的示例包括 12weeks、3months和 15days。如果仅指定了number,则默认的日期部分为weeks

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

EXECUTE master.dbo.xp_sqlmaint N'-PlanID 0D3447E6-67AA-4C30-8226-491BF1684567 -WriteHistory -VrfyBackup -BkUpMedia DISK -BkUpDB "D:\DataBak\Total" -DelBkUps 2WEEKS -CrBkSubDir -BkExt "BAK"'

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

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

 


posted @ 2010-10-09 14:42  cchess  阅读(1018)  评论(0)    收藏  举报