我已经在我的SQL服务器上设置了警报,以便在我的任何镜像数据库的镜像状态更改时发出警报,如this article。如何获取数据库镜像状态的描述
这是所有工作正常,但我想知道是否有任何的方式,通过T-SQL,获得数据库中的状态ID镜像状态由$(WMI(州))提供的说明?
我链接到的文章提供了所有可能状态的列表以及它们的含义,因此我可以创建自己的表或使用CASE语句,但如果我可以使用内置函数或选择来自现有的表格。也许我的Google电源今天很低,但我一直没有找到任何东西。
我已经在我的SQL服务器上设置了警报,以便在我的任何镜像数据库的镜像状态更改时发出警报,如this article。如何获取数据库镜像状态的描述
这是所有工作正常,但我想知道是否有任何的方式,通过T-SQL,获得数据库中的状态ID镜像状态由$(WMI(州))提供的说明?
我链接到的文章提供了所有可能状态的列表以及它们的含义,因此我可以创建自己的表或使用CASE语句,但如果我可以使用内置函数或选择来自现有的表格。也许我的Google电源今天很低,但我一直没有找到任何东西。
为此,我最终在脚本中添加了一个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语句中的唯一的脚本。如果有人想为自己的用途扩展脚本,则其他值和说明位于问题中链接的页面上。
我仍然感到惊讶的是,没有内置函数来做到这一点!
您是否找到了号码到姓名映射的参考源? – jimbobmcgee
没关系,http://technet.microsoft.com/en-us/library/cc966392.aspx#XSLTsection128121120120有一个列表 – jimbobmcgee
['sys.database_mirroring'](http://msdn.microsoft.com/en-us/library/ms178655.aspx)? (虽然你会从数据库ID而不是状态ID) –
该视图的mirroring_state_desc列引用了我认为不同的内容。无论哪种方式,它只显示当前状态,由于我想描述仅存在一段时间的状态(例如,状态7为“手动故障切换”),所以这对我而言并不合适。我有一个警报,它记录了** State 7 **发生的情况,以及一个向我发送** State 7 **的t-SQL脚本,但希望能够将“7”转换为“Manual Failover” 。 – paulH