Мы используем зеркальное отображение базы данных SQL Server и пытаемся создать план обслуживания базы данных для резервного копирования базы данных. Проблема в том, что, когда сервер не является основной базой данных, план не выполняется. Мне было интересно, что лучше всего подходит в этой ситуации и есть ли способ сделать резервную копию плана обслуживания только для первичной базы данных?
Если вы используете 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'
Затем выполняйте резервное копирование только тех баз данных, которые соответствуют этим критериям.
Я не нашел четких и быстрых рекомендаций - один вариант Воссоздать задания и зависимости на зеркальном сервере с отключенными заданиями
Затем используйте предупреждение WMI для DATABASE_MIRRORING_STATE_CHANGE, чтобы включить / отключить задание. Это задание также будет выполняться на основном сервере и отключать задание при аварийном переключении - см. этот ссылка на другой вариант
Вы можете создать резервную копию хранимой процедуры с логикой только для резервного копирования базы данных, которая не находится в состоянии восстановления, например этот
Должен быть способ, чтобы задача оператора T-SQL в плане обслуживания выполняла:
declare @primary bit = 0
select @primary=1
from sys.database_mirroring
where mirroring_role = 1
и использование @primary в качестве условия для запуска последовательности резервного копирования. Пожалуйста, дайте мне знать, помогло ли это. Ура