2013-01-15 35 views
0

我已经在我的SQL服务器上设置了警报,以便在我的任何镜像数据库的镜像状态更改时发出警报,如this article如何获取数据库镜像状态的描述

这是所有工作正常,但我想知道是否有任何的方式,通过T-SQL,获得数据库中的状态ID镜像状态由$(WMI(州))提供的说明?

我链接到的文章提供了所有可能状态的列表以及它们的含义,因此我可以创建自己的表或使用CASE语句,但如果我可以使用内置函数或选择来自现有的表格。也许我的Google电源今天很低,但我一直没有找到任何东西。

+0

['sys.database_mirroring'](http://msdn.microsoft.com/en-us/library/ms178655.aspx)? (虽然你会从数据库ID而不是状态ID) –

+0

该视图的mirroring_state_desc列引用了我认为不同的内容。无论哪种方式,它只显示当前状态,由于我想描述仅存在一段时间的状态(例如,状态7为“手动故障切换”),所以这对我而言并不合适。我有一个警报,它记录了** State 7 **发生的情况,以及一个向我发送** State 7 **的t-SQL脚本,但希望能够将“7”转换为“Manual Failover” 。 – paulH

回答

0

为此,我最终在脚本中添加了一个CASE语句 - 我可以创建一个表,但由于我想将脚本复制到多个不同的服务器,因此这更便于携带。

declare @MirrorStateDesc varchar(50) 
select @MirrorStateDesc = '$(ESCAPE_NONE(WMI(State)))' 
select @MirrorStateDesc = CASE @MirrorStateDesc WHEN '7' THEN 'Manual Failover' WHEN '8' THEN 'Automatic Failover' WHEN '10' THEN 'No Quorum' WHEN '12' THEN 'Principle Running Exposed' ELSE @MirrorStateDesc END 

我只在状态7,8,10和12上使用这个脚本,所以他们是我添加到我的case语句中的唯一的脚本。如果有人想为自己的用途扩展脚本,则其他值和说明位于问题中链接的页面上。

我仍然感到惊讶的是,没有内置函数来做到这一点!

+0

您是否找到了号码到姓名映射的参考源? – jimbobmcgee

+0

没关系,http://technet.microsoft.com/en-us/library/cc966392.aspx#XSLTsection128121120120有一个列表 – jimbobmcgee