Darren Asked: 2009-05-04 17:32:18 +0800 CST2009-05-04 17:32:18 +0800 CST 2009-05-04 17:32:18 +0800 CST SQL Server 数据库镜像的维护计划 772 我们正在使用 SQL Server 数据库镜像,并且我们正在尝试创建一个数据库维护计划来备份数据库。问题是当服务器不是主数据库时,计划失败。我想知道在这种情况下最佳实践是什么,有没有办法让维护计划只备份主数据库? sql-server cluster mirror 3 个回答 Voted Dale Wright 2009-08-08T00:57:35+08:002009-08-08T00:57:35+08:00 如果您使用的是 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' 然后只备份符合该条件的数据库。 Best Answer CPU_BUSY 2009-05-05T11:23:24+08:002009-05-05T11:23:24+08:00 我没有找到硬性和快速的建议 - 一个选项在禁用作业的情况下重新创建镜像服务器上的作业和依赖项 然后在 DATABASE_MIRRORING_STATE_CHANGE 上使用 WMI 警报来启用/禁用作业此作业也将在主服务器上运行并在故障转移时禁用作业 - 请参阅此链接以获取另一个变体 您可以创建具有逻辑的备份存储过程,以仅备份未处于恢复状态的数据库,如下所示 Idriss 2009-07-29T09:37:43+08:002009-07-29T09:37:43+08:00 应该有一种方法,在维护计划中执行 T-SQL 语句任务: declare @primary bit = 0 select @primary=1 from sys.database_mirroring where mirroring_role = 1 并使用@primary 作为启动备份序列的条件。请让我知道它是否有帮助。干杯
如果您使用的是 SQL 2008,则备份任务有一个可爱的“状态不在线时忽略数据库”选项。这会为您绕过处于还原/镜像状态的数据库。
对于 SQL 2000 Box,您可以检查每个数据库的以下属性
对于 SQL 2005 + Box,您可以使用它
然后只备份符合该条件的数据库。
我没有找到硬性和快速的建议 - 一个选项在禁用作业的情况下重新创建镜像服务器上的作业和依赖项
然后在 DATABASE_MIRRORING_STATE_CHANGE 上使用 WMI 警报来启用/禁用作业此作业也将在主服务器上运行并在故障转移时禁用作业 - 请参阅此链接以获取另一个变体
您可以创建具有逻辑的备份存储过程,以仅备份未处于恢复状态的数据库,如下所示
应该有一种方法,在维护计划中执行 T-SQL 语句任务:
并使用@primary 作为启动备份序列的条件。请让我知道它是否有帮助。干杯