SQL Server 数据库镜像的维护计划

SQL Server 数据库镜像的维护计划

我们正在使用 SQL Server 数据库镜像,并尝试创建一个数据库维护计划来备份数据库。问题是,当服务器不是主数据库时,计划会失败。我想知道在这种情况下最佳做法是什么,有没有办法让维护计划只备份主数据库?

答案1

我发现没有硬性建议 - 一个选项是在禁用作业的情况下在镜像服务器上重新创建作业和依赖项

然后使用 DATABASE_MIRRORING_STATE_CHANGE 上的 WMI 警报来启用/禁用该作业。该作业也将在主服务器上运行,并在故障转移时禁用该作业 - 请参阅另一个变体的链接

您可以创建一个备份存储过程,其逻辑仅备份未处于恢复状态的数据库,例如

答案2

如果您使用的是 SQL 2008,备份任务有一个不错的“当状态不在线时忽略数据库”选项。这会为您绕过处于恢复/镜像状态的数据库。

对于 SQL 2000 Box,您可以在每个数据库上检查以下属性

SELECT NAME FROM sysdatabases WHERE databasepropertyex(sysdatabases .Name, 'Status') = 'ONLINE'

对于 SQL 2005 + Box,您可以使用这个

SELECT NAME FROM sys.databases systemdatabases  WHERE state_desc = 'ONLINE'

然后仅备份符合该标准的数据库。

答案3

应该有一种方法,在维护计划中有一个 T-SQL 语句任务执行:

declare @primary bit = 0
select @primary=1
from sys.database_mirroring
where mirroring_role = 1

并使用@primary作为启动备份序列的条件。如果它有帮助,请告诉我。谢谢

相关内容