Wie kann ich abfragen, wie lange eine SQL Server-Datenbankwiederherstellung dauert?

7

Ich versuche, eine Abfrage zu schreiben, die mir sagen wird, wie viel Zeit eine Wiederherstellung (voll oder Protokoll) auf SQL Server 2008 genommen hat.

Ich kann diese Abfrage ausführen, um herauszufinden, wie lange die Sicherung gedauert hat:

%Vor%

Diese Abfrage sagt mir was wiederhergestellt wird, aber jetzt wie lange es dauerte:

%Vor%

restorehistory hat eine Spalte backup_set_id , die auf msdb..backupset verweist, aber das Start- und Enddatum für die Sicherung nicht die Wiederherstellung enthält.

Gibt es eine Idee, wo die Start- und Endzeit für Wiederherstellungen abgefragt werden kann?

    
edosoft 23.09.2010, 08:59
quelle

3 Antworten

12

Um die RESTORE DATABASE-Zeit zu finden, habe ich festgestellt, dass Sie diese Abfrage verwenden können:

%Vor%

Der Nachteil ist, dass Sie zumindest auf meinem Testserver feststellen werden, dass EndTime immer NULL ist.

Also habe ich eine zweite Frage gestellt, um zu versuchen, die Endzeit zu bestimmen. Zuallererst entschuldige ich mich, dass das ziemlich hässlich und verschachtelt ist.

Die folgende Abfrage geht davon aus:

  1. Wenn eine Wiederherstellung für diese DatabaseID und diese ClientProcessID ausgeführt wird, enthält die nächste EventSequence die TransactionID, die wir benötigen.
  2. Ich gehe dann und finde die max EventSequence für die Transaktion
  3. Schließlich wähle ich den Datensatz, der RESTORE DATABASE enthält, und die maximale Transaktion, die diesem Datensatz zugeordnet ist.

Ich bin sicher, dass jemand das, was ich getan habe, wahrscheinlich nehmen und verfeinern kann, aber das scheint in meiner Testumgebung zu funktionieren:

%Vor%

BEARBEITEN

Ich habe einige Änderungen an der Abfrage vorgenommen, da eine der Testdatenbanken die Groß- / Kleinschreibung betrifft und einige Datensätze verloren hat. Ich habe auch bemerkt, dass beim Wiederherstellen von der Platte, dass der DatabaseID Null ist, ich das jetzt auch handle:

%Vor%     
LittleBobbyTables 30.09.2010, 14:15
quelle
5

Mach es zu einem Job. Dann führe es als Job aus. Dann überprüfen Sie den Jobverlauf anzeigen. Dann schau dir die duration-Spalte an.

    
Jack Knows Jack 24.09.2010 20:02
quelle
3

Während es läuft, können Sie etwas wie diese DMV überprüfen.

%Vor%

Oder Sie können ein magisches Voodoo verwenden und das Transaktionsprotokoll in der folgenden Tabellenfunktion interpretieren. Die einzige Person, die ich kenne, um Informationen in diesem Protokoll zu verstehen, ist Paul Randal. Ich weiß, dass er manchmal Server Fault überprüft, aber nicht weiß, ob er StackOverflow wundert.

Wählen Sie * aus fn_dblog (NULL, NULL)

Hoffe, das hilft. Wenn Sie es schaffen und eine Lösung finden, teilen Sie uns dies bitte mit.

Viel Glück!

    
Gabriel Guimarães 05.10.2010 15:41
quelle