作为DBA来讲,不光要关注SQLServer本身的信息,还需要关注Windows的信息比如磁盘,性能,硬件信息等等。通过SQLServer提供的一些选项比如xp_cmdshellOLEautomation或者CLR都可以实现,但是可能对SQLServer有一些影响比如安全性方面。

比较常用的办法是使用WMI查询远程机器上的硬件,软件配置等信息。

SSIS中,提供了SSISWMIDataReader的工具,可以方便DBA不通过复杂代码来实现上面的功能。下面的例子就通过使用WMIDataReader收集磁盘性能。

1.创建表,serverlist存储了所有的服务器列表,freespacetest存放查询的磁盘空间信息。

createtableserverlist(namevarchar(20),locationvarchar(20))

createtablefreespacetest

(

FreeSpacebigint,

Namevarchar(20),

Sizebigint,

SystemNamevarchar(20)

)

2.创建SSIS项目,然后创建两个参数WMIConnStrListWMIConnStr,如图:

SouthEast

3.创建临时文件(txt)存储WMI输出信息,列名为:

FreeSpace,Name,Size,SystemName

SouthEast

4.创建WMIConnectionManager,在变量中选择第二步创建的WMIConnStr作为连接字符串。

SouthEast

5.创建WMIConnectionManager连接字符串列表,通过查询serverlist产生WMIConnectionString列表(ResultName为0),SQL代码如下:

SELECT'ServerName=\\'+ServerName+

';Namespace=\root\cimv2;UseNtAuth=True;UserName=;'

FROMdbo.ServerList

SouthEast

SouthEast

6.创建ForeachLoop容器循环服务器列表,选择ADO。

SouthEast

SouthEast

7.创建WMIDataReaderTask,根据Loop的结果查询单个服务器磁盘信息

SouthEast

WMIQuery:SELECTSystemName,Name,FreeSpace,SizefromWin32_LogicalDiskWHEREdescription="LocalFixedDisk"

8.创建DataFlowTask将txt中的数据导入到数据库。衍生的一列记录数据生成的日期。

SouthEast

其他的操作也是同样的步骤,只需要修改WMI的查询语句就可以了。