大家好,我在配置 WMI 警报时遇到了问题,我想将其用于数据库镜像。我在 Windows 2008 Enterprise X64 上运行,Server 2008 Enterprise X64 也安装了 SQL Server SP1。基本上,我单击警报选择 WMI,然后输入以下 SQL 语句
从 DATABASE_MIRRORING_STATE_CHANGE 中选择 * 其中数据库名称 = 'testmove' 并且状态 = 8
我还确保为 msdb 和所有镜像数据库启用了服务代理,但我仍然无法让它工作,基本上警报从未触发。我只测试了警报功能,我甚至还没有在代理作业中添加它。我通过右键单击我的镜像数据库并强制它进行故障转移来测试它。任何有关此问题的帮助都将不胜感激
答案1
根据您问题中的查询,仅当自动故障转移(状态 = 8)时才会触发该事件。如果您希望 WMI 事件在手动故障转移时归档,如您的测试中所示,您还需要检查状态 = 7,即手动故障转移的状态。
要检查手动故障转移和自动故障转移,您的查询将是:
从 DATABASE_MIRRORING_STATE_CHANGE 中选择 * 其中 DatabaseName = 'testmove' 并且状态为 (7,8)
更多详细信息请访问:数据库镜像状态更改事件类
答案2
您使用的是哪种模式:高安全性还是高性能?高性能需要强制服务。
“使用 在镜像数据库上停止镜像ALTER DATABASE <dbname> SET PARTNER OFF
。然后使用 恢复镜像数据库RESTORE DATABASE <dbname> WITH RECOVERY
。当主服务器可用时,需要重新建立镜像,这次是反方向。”第 11.5.4 节 故障场景,SQL Server 2008 管理实战,Rod Colledge
USE MASTER
GO
ALTER DATABASE [DATABASE1] SET PARTNER OFF
RESTORE DATABASE [DATABASE1] WITH RECOVERY
GO
ALTER DATABASE [DATABASE1] SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
GO