内部 SQL Server 诊断工具,第 1 部分:PSSDiag
2007-11-11 04:46:46 来源:WEB开发网自定义诊断信息
既然已经内置了这么多的功能,下一步当然就是支持自定义诊断信息的收集,以便您可以收集所需要的诊断信息,而不仅仅是直接内置在收集服务程序中的那些诊断信息。幸运的是,收集程序提供了内容丰富的自定义诊断信息工具,实际上,一些内置的诊断信息就是使用此工具收集的。
DiagConfig 配置应用程序目前不支持创建包含自定义诊断信息的配置信息,但是 INI 和 xml(标准化越来越近了) 配置格式都支持自定义诊断信息,并且 DiagConfig 将会保存其读取的您在 xml(标准化越来越近了) 配置文件中配置的自定义诊断信息。我将会对此以及如何快速向 DiagConfig 写入注册表的配置信息中添加自定义诊断信息进行详细说明。
由于通常您只会用到 xml(标准化越来越近了) 配置文件,因此我将会向您展示 xml(标准化越来越近了) 格式的自定义诊断信息的结构,然后说明每个部分表示的意思:
<Collector type="customdiagnostic" point="startup" groupname="ClusterDiag" taskname="Get PSTAT" customdiagtype="utility" wait="yes"cmd="`PSTAT50.exe > "%OUTPUT_PATH%%COMPUTERNAME%_PSTAT.TXT"`" />
以上自定义诊断信息节点用于将一个名为“Get PSTAT”的自定义诊断信息添加到一个名为“Cluster Diag”的诊断信息组中。诊断信息组只用于提供信息,它与诊断信息实际的收集方式和收集时间无关。
point 属性用于在收集自定义诊断信息的收集进程中及时对点进行配置。以上自定义诊断信息将被配置为在收集程序启动时进行收集,但是也可以将其配置为在收集程序关闭时进行收集。
这种特定的诊断信息具有实用程序 customdiagtype。有以下几种类型可供选择:
表 1:自定义诊断信息类型 | |
类型 | 用途 |
实用程序 | 可执行文件、.BAT 文件或 .CMD 文件 |
TSQL_Script | Transact-SQL 脚本 |
TSQL_Command | Transact-SQL 命令或存储过程(例如 sp_who) |
Reg_Query | 注册表查询,将返回注册表中某一项的值 |
Reg_Save | 将特定的注册表项保存为 .HIV 文件 |
Copy_File | 将目标系统上的文件复制到输出文件夹中 |
Type_File | 列出目标系统上的某个文件,可以选择将其重定向到输出文件夹中的某个文件 |
Tail_File | 将文件的最后 n 字节转储到输出文件夹中的某个文件 |
VB_Script | ActiveX 脚本 |
wait 属性可指示收集服务程序是否会等待任务完成才继续收集其他诊断信息。该属性可以具有以下三个值之一:Yes、No 和 OnlyOnShutdown。前两个值不用解释;而 OnlyOnShutdown 用于通知收集程序在任务首次开始执行时不要等待任务完成,但是如果收集程序关闭时此任务仍在运行,则要等待该任务完成。这使您可以将持续时间较长的自定义诊断信息收集任务与收集进程的其余部分同步运行,并在收集程序停止后等待这些任务完成。
cmd 属性的用途根据自定义诊断信息类型的不同而不同。它通常不仅仅是一个文件名或注册表路径,它通常由用于相关自定义诊断信息的一个完整的命令行组成(例如,命令行开关、重定向和管线等)。表 2 总结出了 cmd 属性的各种用途:
表 2:cmd 属性对于每个自定义诊断信息类型的重要性 | |
类型 | cmd 属性的意义 |
实用程序 | 可执行文件、.BAT 文件或 .CMD 文件的名称(如上所述,通过重定向指定输出文件名) |
TSQL_Script | Transact-SQL 脚本的名称。如果此文件具有 .TEM 扩展名,那么 PSSDiag 会在运行嵌入的元变量之前将其转换。输出文件名将取决于脚本名称 |
TSQL_Command | Transact-SQL 命令或存储过程(例如 sp_who)。输出名称将取决于组名、任务名、目标服务器【及实例(如果存在)】和命令的执行点(启动或关闭)。 |
Reg_Query | 要返回的注册表值(通过重定向指定输出文件名) |
Reg_Save | 要保存的注册表项(通过重定向指定输出文件名) |
Copy_File | 源文件和目标文件的名称(用双引号将包含空格的文件名引起来) |
Type_File | 要列出的文件的名称(通过重定向指定输出文件名) |
Tail_File | 要列出的文件的名称(通过重定向指定输出文件名) |
VB_Script | ActiveX 脚本的名称(通过重定向指定输出文件名) |
正如此表所指出的,您可以使用重定向捕获多种自定义诊断信息的输出结果。您可以使用 %output_name% 元变量(下面将说明)来轻松地执行此操作:
<Collector type="customdiagnostic" point="startup" groupname="ClusterDiag" taskname="Get PSTAT" customdiagtype="utility" wait="yes"cmd="`PSTAT50.exe > "%OUTPUT_NAME%.txt"`" />
cmd 属性要用右引号(或者重音标记,即 ` 字符)来分隔,以便它可以包含其他类型的引号。由于是 xml(标准化越来越近了) 属性,因此它还要用双引号引起来。很明显,INI 格式不需要(甚至不允许)使用这些外部双引号。
如果您使用了包含空格(或可能包含空格)的文件名或路径,请确保用双引号将其引起来,如上所述。由于 Windows 命令处理器经常会收到您指定保持原样的文件名、路径或命令,因此遵守 Windows 的文件路径规则是很重要的。
支持文件
在不明显的情况下,您的自定义诊断信息需要的任何文件(在此例中为 PSTAT50.exe)都应当位于系统路径中或者被复制到收集程序的启动文件夹中。从 Microsoft 产品支持服务那里收到的任何 PSSDiag 软件包都会包含收集所要求的诊断信息需要的所有文件。
变量
如果您仔细观察以上示例,您就会注意到类似 %OUTPUT_PATH% 和 %COMPUTER_NAME% 环境变量的用途。实际上,只有第二个,即 %COMPUTER_NAME% 才是真正的环境变量。%OUTPUT_PATH% 将由收集程序内部转换为输出文件夹的完整路径,结尾包括一个反斜杠。在 PSSDiag 的用语中,这两个变量是元变量,即由收集程序内部转换的伪环境变量。收集程序中内置了多个此类变量:
表 3:内置的元变量 | |
变量 | 转换为 |
%output_path% | 输出文件夹的完整路径,结尾包括一个反斜杠 |
%server% | 目标计算机名 |
%instance% | 目标 sql server(WINDOWS平台上强大的数据库平台) 实例名,此变量将会扩展到为特定计算机配置的所有实例 |
%server_instance% | 目标计算机和 sql server(WINDOWS平台上强大的数据库平台) 实例,此变量将会扩展到为特定计算机配置的所有实例 |
%startup_path% | 收集服务程序的启动文件夹的完整路径,结尾包括一个反斜杠 |
%ssuser% | 用于连接到 sql server(WINDOWS平台上强大的数据库平台) 的用户名 |
%sspwd% | 在使用 sql server(WINDOWS平台上强大的数据库平台) 验证的情况下用于连接到 sql server(WINDOWS平台上强大的数据库平台) 的密码。【出于安全考虑,请不要将此密码存储在磁盘上或以任何形式保存。此密码专门在命令行上使用,在使用 sql server(WINDOWS平台上强大的数据库平台) 验证的情况下用于需要连接到 sql server(WINDOWS平台上强大的数据库平台)(例如 OSQL)的工具。】 |
%sspath% | 指向 sql server(WINDOWS平台上强大的数据库平台) 的根安装文件夹的完整路径,结尾包括一个反斜杠 |
%ssregroot% | sql server(WINDOWS平台上强大的数据库平台) 的根注册表项 |
%authmode% | 1 或 0,指示是否使用 Windows 验证用于连接到 sql server(WINDOWS平台上强大的数据库平台) |
%ssver% | 指定在配置文件中的 sql server(WINDOWS平台上强大的数据库平台) 的目标版本 |
%output_name% | 合成输出文件名,由诊断信息组和任务名称、目标计算机和 sql server(WINDOWS平台上强大的数据库平台)(如果有)以及用于指示诊断信息收集时间的一个字符串组成 |
%internal_output_name% | 合成内部(前缀为 ## )输出文件名,由诊断信息组和任务名称、目标计算机和 sql server(WINDOWS平台上强大的数据库平台)(如果有)以及用于指示诊断信息收集时间的一个字符串组成 |
%ssbatchrunner% | 用于运行 T-SQL 脚本的可执行文件名(OSQL.exe 或 SQLCMD.exe,取决于 sql server(WINDOWS平台上强大的数据库平台) 的版本) |
%quietmode% | 1 或 0,指示是否在收集程序的启动参数中传递了静音状态开关 (/Q) |
%forceremotemode% | 1 或 0,指示是否使用存储过程代替 SQLDIAG.exe 来收集 SQLDIAG 报告 |
%compressionmode% | 一个整数,指示选择的是非压缩、NTFS 压缩还是 ZIP 压缩 |
%genericmode% | 1 或 0,指示是否在收集程序的启动参数中传递了 Generic(普通)模式开关 (/G) |
%casenumber% | 字符串,指示与收集相关联的产品支持服务案例号 |
%starttime% | 字符串,指示所指定的收集开始日期/时间 |
%endtime% | 字符串,指示所指定的收集结束日期/时间 |
%comspec% | 指向 Windows 命令解释器的完整路径(cmd.exe 或 command.com,取决于版本) |
%cfgfile% | 配置文件的完整路径 |
%outputfoldermode% | 一个整数,指示收集服务程序启动时应当清除、覆盖还是重命名现有的输出文件夹 |
您可以在您创建的自定义任务中使用这些变量中的任何一个,以及系统上的任何环境变量。它们的语法都相同:只是用百分号 (%) 标记对变量名进行了分隔,如上所述。
自定义元变量
您还可以定义自定义元变量。您可以以名称-值对格式指定这些变量,并用分号将它们与 cmd 主要文本(以及它们相互之间)进行分隔。下面是一个示例:
<Collector type="customdiagnostic" point="startup"groupname="MergeReplication" taskname="GeneralMergeAnalysis"customdiagtype="tsql_script" wait="yes" cmd="`merge_analysis.TEM;%pubdb%=Northwind `" />
在此示例中,我们配置了一个要执行的自定义 T-SQL 脚本模板 merge_analysis_.te.。正如表 2 中所述,具有扩展名 .tem 的脚本将被视为模板,收集程序会在运行该模板之前自动转换模板中包含的任何嵌入元变量(包括系统环境变量)。此进程将会产生一个文件,它在执行前被重写为 .SQL 脚本。在以上的示例中有一个单独的自定义变量 %pubdb%,它的值被定义为 Northwind。这会使收集程序在执行该脚本模板之前将脚本模板中出现的每一处 %pubdb% 替换为 Northwind。
您可以通过用分号进行分隔来设置多个自定义元变量:
<Collector type="customdiagnostic" point="startup"groupname="MergeReplication" taskname="GeneralMergeAnalysis"customdiagtype="tsql_script" wait="yes" cmd="`merge_analysis.TEM;%pubdb%=Northwind; %distdb%=distribution `" />
在此,我们定义了两个自定义变量:%pubdb% 和 %distdb%。每个变量每次在模板脚本中出现时,都会被替换为相应的值。
在一个自定义诊断信息任务中定义的元变量可以在随后的任务中重复使用。因此,例如,如果您在自定义任务 #1 中定义了 %pubdb%,随后您就可以在自定义任务 #2 中重复使用此变量(而无需为它赋值)。这表示,例如脚本模板任务可以引用在前面的任务中定义的自定义变量,就像是在该自定义任务定义中为这些变量赋予了值一样。
您还可以重定义自定义变量。后续的自定义任务将会使用最近赋予的值。
更多精彩
赞助商链接