ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [zt] sqlmaint 实用工具和xp_sqlmaint扩展过程

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

原创 Linux操作系统 作者:tolywang 时间:2009-08-13 10:35:17 0 删除 编辑

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

语法

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_percent free_percent]
         [-CkDB | -CkDBNoIdx]
         [-CkAl | -CkAlNoIdx]
         [-CkCat]
         [-UpdOptiStats sample_percent]
         [-RebldIdx free_space]
         [-WriteHistory]
         [
             {-BkUpDB [backup_path] | -BkUpLog [backup_path] }
             {-BkUpMedia
                
{DISK [     [-DelBkUps ]
                             [-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 的语法关系图。此参数必须单独使用。

-S server_name[\instance_name]

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

-U login_ID

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

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

-P password

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

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

-D database_name

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

-PlanName name

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

-PlanID guid

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

-Rpt text_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 文件名。

-To operator_name

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

-HtmlRpt html_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> 的文件。

-RmUnusedSpace threshold_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

-UpdOptiStats sample_percent

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

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT

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

-RebldIdx free_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

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-612470/,如需转载,请注明出处,否则将追究法律责任。

下一篇: [zt] 什么是DBA
请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13209613