我们的 C# 应用程序需要连接到 SQL 2005 和 2008 数据库并检查数据库镜像的当前状态(例如,是否启用、暂停、暂停、断开等)。有没有我可以检查的属性?
我们所有被镜像的数据库都没有见证和手动故障转移(同步镜像)。
如果有人可以提供帮助或向我指出一些文档,我们将不胜感激,谷歌搜索在这方面并没有出现太多。
当前状态显示在sys.database_mirroring
:
SELECT mirroring_state
FROM sys.database_mirroring
WHERE database_id = DB_ID('...');
此处的MSDN 文章描述了所有系统存储过程,它们将为您提供所需的信息
您还可以通过运行 sp_dbmmonitorresults 系统存储过程来检索或更新当前状态。
在 Remus 的回答中,使用 sp_dbmmonitorresults 和使用 sys.database_mirroring 表之间的一个不明显的区别是所需的权限
根据MSDN 文章Remus 引用
要查看除 master 或 tempdb 之外的数据库的行,您必须是数据库所有者或在 master 数据库中至少具有 ALTER ANY DATABASE 或 VIEW ANY DATABASE 服务器级权限或 CREATE DATABASE 权限。要查看镜像数据库上的非 NULL 值,您必须是 sysadmin 固定服务器角色的成员
根据前面提到的关于镜像 SP 的MSDN 文章
sysadmin 固定服务器角色的成员,以及已添加到 dbm_monitor 固定数据库角色的用户