Czy jest możliwe, aby SQL Server 2008 R2 Standard automatycznie wykonywał procedurę przechowywaną w dowolnej bazie danych, która jest przywracana lub dołączana do instancji?
Znalazłem rozwiązanie, tworząc wyzwalacz na poziomie serwera, który wykonuje procedurę przechowywaną w danej bazie danych po zdarzeniu DDL CREATE_DATABASE
lub ALTER_DATABASE
został zwolniony. Niestety nie działa to w przypadku przywracania kopii zapasowej bazy danych.
Aby to rozwinąć, mamy procedurę przechowywaną „czyszczenia”, która istnieje w każdej przywracanej bazie danych, i szukam sposobu na automatyczne wykonanie tego zadania przy każdym przywróceniu kopii zapasowej w instancji.
Googling wskazał mi na skonfigurowanie Audytu lub Polityki w SQL Server, aby uzyskać tę funkcjonalność, ale te funkcje są na pierwszy rzut oka przytłaczające, więc nie mogę powiedzieć, czy Audyty lub zasady są drogą do rozpoczęcia dochodzenia.
źródło
EndTime
nigdy nie wydaje się być zaludniony. Może się zdarzyć, że powinieneś spróbować połączyć się z bazą danych, a jeśli nie możesz, pomiń ją i nie dokumentuj tego zdarzenia przywracania, ale spróbuj ponownie przy następnym uruchomieniu zadania. Spróbuję zweryfikować, ale na moich lokalnych maszynach wirtualnych mam tylko dyski SSD, ale nie mają one miejsca na dysku, aby wykonanie kopii zapasowej trwało wystarczająco długo, aby dokładnie obserwować zachowanie. :-)database_started
Rozszerzone zdarzenia jest zwolniony po przywróceniu bazy danych.Utwórz sesję zdarzenia, która przechwytuje
database_id
pole z predykatem, który szuka%RESTORE%
wsql_text
polu (uwaga: uważam, że to wystarczy - będziesz chciał przetestować sam).Nie znam się na rozszerzonych wydarzeniach, aby powiedzieć ci, jak najlepiej zareagować na zdarzenie. Byłoby miło, gdybyś mógł bezpośrednio uruchomić procedurę przechowywaną; Nie wiem jednak, czy to możliwe. Z pewnością możesz sondować bufor zdarzeń, a to jest lepsze niż skanowanie domyślnego śledzenia - nie tylko ze względu na wydajność, ale jeśli serwer jest bardzo zajęty, a interwał sondowania jest zbyt długi, możesz skończyć z brakiem zdarzeń. W metodzie Extended Events pominięcie zdarzenia byłoby bardzo mało prawdopodobne.
źródło
Jak widać na liście zdarzeń DDL, wyzwalacz DDL nie może być wystarczająco wyraźny dla twojego wymagania.
Polecam napisanie skryptu PowerShell, aby wykonać przywracanie lub dołączyć, a następnie wykonać procedurę przechowywaną bezpośrednio po. Pamiętaj, że Twój sklep będzie musiał zostać poinstruowany, aby użyć tego zamiast typowego przywracania lub dołączania.
Niestety nie wierzę, że istnieje wbudowany sposób na osiągnięcie tego.
źródło
Jak przebiegają kopie zapasowe? Jeśli chcesz tylko uruchomić SP po utworzeniu kopii zapasowej, możesz ustawić to jako inne zadanie w zadaniu, jeśli ich używasz lub plan konserwacji.
Dzięki temu możesz skonfigurować inspekcję do zapisywania w dzienniku zdarzeń, a następnie utworzyć alert, który wykona zadanie. Wygląda na zawiłe, ale zrobi to, o co prosisz.
Spójrz na następujący kod:
źródło
Jak przebiegają kopie zapasowe? Za pomocą Commvault możesz skonfigurować automatyczne zadanie przywracania i uruchamiać skrypty przed i po przywracaniu, które mogą być SQL lub PowerShell. Robię to przez cały czas, aby uruchamiać DDL dla różnic wersji oraz tworzyć kopie zapasowe i przywracać uprawnienia podczas przywracania między środowiskami.
Wierzę, że Netbackup może mieć inne produkty o podobnej funkcjonalności
Jeśli używasz SQL, po prostu dodaj go jako krok do zadania, które przywraca bazę danych
źródło