Возможно ли, чтобы SQL Server 2008 R2 Standard автоматически выполнял хранимую процедуру в любой заданной базе данных, которая была восстановлена или присоединена к экземпляру?
Я приблизился к решению, создав триггер уровня сервера, который выполняет хранимую процедуру в данной базе данных после события DDL CREATE_DATABASE
или ALTER_DATABASE
запускается. К сожалению, это не работает для восстановления резервных копий базы данных.
Чтобы уточнить, у нас есть хранимая процедура «очистки», которая существует в каждой восстанавливаемой базе данных, и я ищу способ, чтобы она выполнялась автоматически всякий раз, когда резервная копия восстанавливается в экземпляре.
Googling указал мне на настройку Аудитов или Политик в SQL Server, чтобы получить эту функциональность, но на первый взгляд эти функции являются довольно подавляющими, поэтому я не могу сказать, являются ли Аудиты или Политики подходом для начала расследования.
источник
EndTime
никогда не кажется, что он заполнен. Возможно, вам следует попытаться подключиться к базе данных и, если вы не можете, пропустить ее и не задокументировать это событие восстановления, но повторите попытку при следующем запуске задания. Я бы попробовал проверить, но на моих локальных виртуальных машинах у меня есть только твердотельные накопители, но у них нет места на диске, чтобы резервное копирование занимало достаточно много времени для точного наблюдения за поведением. :-)database_started
Расширенная Событие вызывается после восстановления базы данных.Создайте сеанс событий, который захватывает
database_id
поле с предикатом, который ищет%RESTORE%
вsql_text
поле (примечание: я считаю, что этого достаточно - вы захотите проверить себя).Я недостаточно знаком с Расширенными событиями, чтобы рассказать вам, как лучше всего реагировать на событие. Было бы хорошо, если бы вы могли запустить хранимую процедуру напрямую; Я не знаю, возможно ли это, хотя. Однако вы, безусловно, можете опрашивать буфер событий, и это предпочтительнее, чем сканирование трассировки по умолчанию - не только по соображениям производительности, но если сервер очень занят и интервал опроса слишком велик, вы можете в конечном итоге пропустить пропущенные события. При использовании метода расширенных событий пропустить событие было бы очень маловероятным.
источник
Как вы можете видеть по списка событий DDL, триггер DDL не может быть достаточно явным для вашего требования.
Я бы порекомендовал написать сценарий PowerShell, чтобы выполнить восстановление или присоединение, а затем сразу выполнить хранимую процедуру. Имейте в виду, ваш магазин должен быть проинструктирован использовать это вместо типичного восстановления или прикрепления.
К сожалению, я не верю, что есть встроенный способ сделать это.
источник
Как у вас дела с резервными копиями? Если вы просто хотите запустить SP после резервного копирования, вы можете установить его в качестве другой задачи в задании, если вы его используете, или в плане обслуживания.
Таким образом, вы можете настроить Auditing для записи в журнал событий, а затем создать предупреждение, которое будет выполнять задание. Это кажется запутанным, но он сделает то, что вы просите.
Взгляните на следующий код:
источник
Как у вас дела с резервными копиями? С Commvault вы можете настроить автоматическое задание восстановления и запустить его до и после сценариев восстановления, которые могут быть SQL или powershell. Я делаю это все время для запуска DDL для различий версий и для резервного копирования и восстановления разрешений при восстановлении между средами.
Я считаю, что Netbackup может иметь другие продукты с похожей функциональностью
Если вы используете SQL, просто добавьте его в качестве шага к работе, которая восстанавливает базу данных
источник