【问题标题】:How to get description of database mirroring state如何获取数据库镜像状态的描述
【发布时间】:2013-01-15 14:54:23
【问题描述】:

根据this article,我已在我的 SQL 服务器上设置警报,以便在我的任何镜像数据库的镜像状态发生变化时提醒我。

一切正常,但我想知道是否有任何方法可以通过 T-SQL 从 $(WMI(State)) 提供的状态 ID 中获取数据库镜像状态的描述 ?

我链接到的文章提供了所有可能状态的列表及其含义,因此我可以创建自己的表或使用 CASE 语句,但如果我可以使用内置函数或 select from现有表。也许我今天的 Google-Power 很低,但我什么都没找到。

【问题讨论】:

  • sys.database_mirroring? (虽然你会从数据库 ID 而不是州 ID)
  • 该视图的 mirroring_state_desc 列指的是我认为不同的东西。无论哪种方式,它只显示当前状态,这对我的目的没有好处,因为我想描述一个只存在片刻的状态(例如状态 7 是“手动故障转移”)。我有一个捕获 State 7 已发生的警报,以及一个 t-SQL 脚本通过电子邮件向我发送 State 7 已发生,但希望能够转换“7 " 到 "手动故障转移"。

标签: tsql sql-server-2008-r2 database-mirroring


【解决方案1】:

为此,我最终在脚本中添加了一个 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 上使用此脚本,所以它们是我添加到我的案例陈述中的唯一脚本。如果有人想扩展脚本以供自己使用,其他值和描述在我在问题中链接到的页面上。

我仍然很惊讶没有内置函数可以做到这一点!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 2016-09-02
  • 1970-01-01
  • 2014-09-03
  • 2013-04-15
  • 2013-06-27
相关资源
最近更新 更多