Ist es möglich, dass SQL Server 2008 R2 Standard automatisch eine gespeicherte Prozedur in einer bestimmten Datenbank ausführt , die wiederhergestellt oder an die Instanz angehängt wird ?
Ich bin einer Lösung nahe gekommen, indem ich einen Trigger auf Serverebene erstellt habe, der eine gespeicherte Prozedur in einer bestimmten Datenbank nach dem DDL-Ereignis ausführt CREATE_DATABASE
oder ALTER_DATABASE
ausgelöst wird. Leider funktioniert dies nicht für Datenback-Backup-Wiederherstellungen.
Um dies zu erläutern, haben wir eine gespeicherte Prozedur zum Bereinigen, die in jeder Datenbank vorhanden ist, die wir wiederherstellen, und ich suche nach einer Möglichkeit, diese automatisch auszuführen, wenn eine Sicherung in der Instanz wiederhergestellt wird.
Googeln hat mich darauf hingewiesen, entweder Audits oder Richtlinien in SQL Server zu konfigurieren , um diese Funktionalität zu erhalten, aber diese Funktionen sind auf den ersten Blick ziemlich überwältigend, sodass ich nicht sagen kann, ob Audits oder Richtlinien der Weg sind, um mit der Untersuchung zu beginnen.
quelle
EndTime
nie bevölkert zu sein scheint. Möglicherweise sollten Sie versuchen, eine Verbindung zur Datenbank herzustellen. Wenn dies nicht möglich ist, überspringen Sie diese und dokumentieren Sie dieses Wiederherstellungsereignis nicht. Versuchen Sie es jedoch erneut, wenn der Job das nächste Mal ausgeführt wird. Ich würde versuchen, zu validieren, aber auf meinen lokalen VMs habe ich nur SSDs, aber sie haben nicht den Speicherplatz, damit eine Sicherung lange genug dauert, um das Verhalten genau zu beobachten. :-)Das
database_started
erweiterte Ereignis wird ausgelöst, nachdem eine Datenbank wiederhergestellt wurde.Erstellen Sie eine Ereignissitzung, die das
database_id
Feld mit einem Prädikat erfasst , nach dem%RESTORE%
imsql_text
Feld gesucht wird (Hinweis: Ich glaube, dies ist ausreichend - Sie möchten es selbst testen).Ich bin mit erweiterten Ereignissen nicht vertraut genug, um Ihnen zu sagen, wie Sie am besten auf das Ereignis reagieren können. Es wäre schön, wenn Sie eine gespeicherte Prozedur direkt auslösen könnten. Ich weiß allerdings nicht, ob das möglich ist. Sie können den Ereignispuffer jedoch auf jeden Fall abfragen. Dies ist dem Scannen der Standardablaufverfolgung vorzuziehen - nicht nur aus Leistungsgründen. Wenn der Server sehr ausgelastet ist und das Abfrageintervall zu lang ist, können Ereignisse sofort fehlen. Mit der Extended Events-Methode ist es sehr unwahrscheinlich, dass ein Ereignis fehlt.
quelle
Wie Sie der Liste der DDL-Ereignisse entnehmen können , kann ein DDL-Trigger für Ihre Anforderung nicht explizit genug sein.
Ich würde empfehlen, ein PowerShell- Skript zu schreiben , um die Wiederherstellung oder das Anhängen durchzuführen und dann die gespeicherte Prozedur unmittelbar danach auszuführen. Wohlgemerkt, Ihr Shop muss angewiesen werden, dies anstelle einer typischen Wiederherstellung oder eines Anhängens zu verwenden.
Leider glaube ich nicht, dass es einen eingebauten Weg gibt, dies zu erreichen.
quelle
Wie führen Sie Ihre Backups aus? Wenn Sie den SP nur nach Ihrer Sicherung ausführen möchten, können Sie ihn als eine andere Aufgabe im Job einrichten, wenn Sie sie verwenden, oder als Wartungsplan.
So können Sie die Überwachung so einrichten, dass sie in das Ereignisprotokoll schreibt und anschließend eine Warnung erstellt, die einen Job ausführt. Es scheint verworren zu sein, aber es wird tun, was Sie verlangen.
Sehen Sie sich den folgenden Code an:
quelle
Wie führen Sie Ihre Backups aus? Mit Commvault können Sie einen automatischen Wiederherstellungsjob einrichten und vor und nach der Wiederherstellung Skripts ausführen lassen, die SQL oder Powershell sein können. Ich mache dies die ganze Zeit, um DDL für Versionsunterschiede auszuführen und Berechtigungen beim Wiederherstellen zwischen Umgebungen zu sichern und wiederherzustellen.
Ich glaube, Netbackup kann andere Produkte ähnliche Funktionen haben
Wenn Sie SQL verwenden, fügen Sie es einfach als Schritt zum Job hinzu, der die Datenbank wiederherstellt
quelle