作为DBA来讲,不光要关注SQLServer本身的信息,还需要关注Windows的信息比如磁盘,性能,硬件信息等等。通过SQLServer提供的一些选项比如xp_cmdshell,OLEautomation或者CLR都可以实现,但是可能对SQLServer有一些影响比如安全性方面。
比较常用的办法是使用WMI查询远程机器上的硬件,软件配置等信息。
在SSIS中,提供了SSISWMIDataReader的工具,可以方便DBA不通过复杂代码来实现上面的功能。下面的例子就通过使用WMIDataReader收集磁盘性能。
1.创建表,serverlist存储了所有的服务器列表,freespacetest存放查询的磁盘空间信息。
createtableserverlist(namevarchar(20),locationvarchar(20))
createtablefreespacetest
(
FreeSpacebigint,
Namevarchar(20),
Sizebigint,
SystemNamevarchar(20)
)
2.创建SSIS项目,然后创建两个参数WMIConnStrList和WMIConnStr,如图:
3.创建临时文件(txt)存储WMI输出信息,列名为:
FreeSpace,Name,Size,SystemName
4.创建WMIConnectionManager,在变量中选择第二步创建的WMIConnStr作为连接字符串。
5.创建WMIConnectionManager连接字符串列表,通过查询serverlist产生WMIConnectionString列表(ResultName为0),SQL代码如下:
SELECT'ServerName=\\'+ServerName+
';Namespace=\root\cimv2;UseNtAuth=True;UserName=;'
FROMdbo.ServerList
6.创建ForeachLoop容器循环服务器列表,选择ADO。
7.创建WMIDataReaderTask,根据Loop的结果查询单个服务器磁盘信息
WMIQuery:SELECTSystemName,Name,FreeSpace,SizefromWin32_LogicalDiskWHEREdescription="LocalFixedDisk"
8.创建DataFlowTask将txt中的数据导入到数据库。衍生的一列记录数据生成的日期。
其他的操作也是同样的步骤,只需要修改WMI的查询语句就可以了。
本文转自 lzf328 51CTO博客,原文链接:http://blog.51cto.com/lzf328/1323158