开发学院数据库MSSQL Server 内部 SQL Server 诊断工具,第 1 部分:PSSDiag 阅读

内部 SQL Server 诊断工具,第 1 部分:PSSDiag

 2007-11-11 04:46:46 来源:WEB开发网   
核心提示: 提示输入变量您可以不为元变量赋予固定的值,而是指示收集程序控制台应用程序(而不是服务程序)在运行时提示输入元变量的值,内部 SQL Server 诊断工具,第 1 部分:PSSDiag(7),为了使诊断信息配置更加通用并且方便重新使用,有时您可能会希望推迟到收集程序实际运行时才为变量赋值,包括最近发行的“The Gu

提示输入变量

您可以不为元变量赋予固定的值,而是指示收集程序控制台应用程序(而不是服务程序)在运行时提示输入元变量的值。为了使诊断信息配置更加通用并且方便重新使用,有时您可能会希望推迟到收集程序实际运行时才为变量赋值。您可以在自定义诊断信息内通过元变量定义中的特殊标记来进行此设置:

<Collector type="customdiagnostic" point="startup"groupname="MergeReplication" taskname="GeneralMergeAnalysis"customdiagtype="tsql_script" wait="yes" cmd="`merge_analysis.TEM;%pubdb%=?!"pubdb","Please supply the name of the publisheddatabase","string",""!? `" />

正如您所看到的,提示详细信息被包含在 ?!!? 标记内。它们标记出了定义提示的字段的开始位置和结束位置。正如您所看到的,提示赋值由四个子字段组成,它们按 CSV 格式分隔。这些字段的第一个是变量名。此字段不是由收集程序使用(而是由其他内部 Microsoft 工具使用),但是它必须与元变量赋值语句左侧所使用的名称相匹配。第二个字段是提示输入变量时收集程序所显示的提示信息。第三个字段是变量的数据类型。此字段目前未使用(所有变量都被视为字符串),但是以后可能会有所改变。最后一个字段是字段的默认值。收集程序将会根据提示输入变量的时间将其显示在圆括号中,如果提示输入值时您按了 Enter 而没有输入新值,此默认值就会被赋予变量。

显然,只有当收集程序作为控制台应用程序运行时,它才能够提示输入元变量。服务程序无法方便地与 Windows 桌面进行交互,因此如果收集程序作为服务程序运行,就没有使收集程序提示输入的有效方法。实际上,当收集程序作为服务程序运行时,它就像是指定了静音状态开关 (/Q) 一样,并且会跳过它作为控制台应用程序时会显示的任何输入提示。这意味着它会为您在配置信息中设置的元变量提示赋予默认值。

多值变量

您还可以定义具有多个值的变量。您可以通过设置要运行的子进程并将该进程的输出结果(多大 2GB)赋予某个变量来定义多值变量。随后可以在后续的自定义诊断信息收集中使用该变量,并且针对变量中存储的每个输出行收集一次自定义诊断信息。

此功能与 Windows 的 for 命令相似。它提供了与此命令相同的功能而无需编写批处理文件代码。

与提示输入变量相似,将另一个进程的输出结果赋予变量是通过使用元变量赋值中的特殊标记和子字段来实现的。下面是一个示例:

<Collector type="customdiagnostic" point="startup"groupname="GeneralUtilities" taskname="ListFiles"customdiagtype="utility" wait="yes" cmd="`echo %file%>>"%output_name%.TXT"; %file%=!!dir /b *.txt!! `" />

正如您所看到的,多值赋值中使用的特殊分隔标记为 !!。在此示例中,我们运行了操作系统命令 dir /b *.txt 并且将其返回的输出结果赋予了 %file% 变量。这一特定命令仅列出了与指定掩码相匹配的文件名,而不显示其他目录标题或详细信息。这些文件名随后将被赋予 %file% 自定义元变量。然后,当收集程序为收集自定义诊断信息运行指定的 echo %file% 命令时,它会针对列表中的每个文件名收集一次自定义诊断信息,并将 %file% 替换为列表中每次迭代得出的每个连续名称。

如上所述,此功能提供了与操作系统的 for 命令相似的的功能,在此特定示例中,未提供通过更多简单机制也无法实现的功能。但是,将此功能内置于收集程序使最终用户无需熟悉那些不常用的批处理文件结构的细微差别(例如 for),并使您可以按照为普通元变量赋值的方式来为多值元变量赋值。

DiagConfig 中添加自定义诊断信息

由于 DiagConfig 不直接支持将这些信息添加到收集程序的配置信息中,因此您可能想知道如何配置收集程序才能收集自定义诊断信息。这实际上非常简单。DiagConfig 在启动时会检查系统注册表中是否存在收集程序配置信息,如果存在将加载该信息。如果注册表中不存在配置信息,它就会加载一个包含默认配置的 xml(标准化越来越近了) 文档(Pristine 子文件夹中的 _Default.xml(标准化越来越近了))。通过修改此文档,您可以添加 GUI 启动收集服务程序时将写入注册表的自定义诊断信息。(要删除已经写入注册表的配置信息,您只需如上所述撤销注册收集服务程序即可)。

要向此文档中添加自定义诊断信息,请将类似以上显示出的节点的“收集程序”节点添加到 _Default.xml(标准化越来越近了) 文件中的 ...\Instance\Collectors 一节中。虽然您将无法看到 GUI 中显示出的自定义诊断信息,但是它确实存在,并且稍后将配置信息传送到目标计算机上的注册表中时会保存自定义诊断信息。当收集程序启动时,它会将您的自定义诊断信息与配置信息的其余内容一同读取,并将为您收集自定义诊断信息。

结论

如果使用得当,PSSDiag 就会显示出一个稳定、强大、直观并且可扩展的诊断信息收集框架。它可以显著减少解决与 sql server(WINDOWS平台上强大的数据库平台) 相关以及与 sql server(WINDOWS平台上强大的数据库平台) 不相关的复杂问题所需的时间,并且可以用作对实际各类计算机进行长期监控的有效解决方案。

sql server(WINDOWS平台上强大的数据库平台) for Developers

Ken Henderson 与爱妻和孩子一同居住在得克萨斯州达拉斯的郊区。他先后编著了八本书,内容涉及各种技术相关的主题,包括最近发行的“The Guru's Guide to sql server(WINDOWS平台上强大的数据库平台) Architecture and Internals”(Addison-Wesley, 2003)。Ken 是达拉斯小牛队的忠实球迷,业余时间喜欢运动、园艺和照看孩子。

上一页  2 3 4 5 6 7 

Tags:内部 SQL Server

编辑录入:coldstar [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接