Sicherung und Wiederherstellung von SQL Server mit T-SQL und DMVs.

Absicherung spielt in der Welt von SQL Server eine essentielle Rolle. SQL Server Downtimes können immer auftreten und meist genau dann, wenn man sie am Wenigsten gebrauchen kann. Daher ist es umso wichtiger, regelmäßige Backups der SQL Server Umgebung durchzuführen und sich abzusichern, dass keine Daten verloren gehen. Mittels T-SQL Befehlen können relativ simpel Backups durchgeführt werden. Wir stellen Ihnen in diesem Artikel einen geeigneten T-SQL Befehl vor, der Informationen zur Prozessdauer von Backups und Wiederherstellungsvorgängen sammelt und veranschaulicht.

Der Standardbefehl zur Sicherung oder Herstellung eines Backups der Datenbank wäre in diesem Fall: WITH STATS. Im SQL Server Management Studio würden entsprechende Statusmeldungen zum Sicherungsvorgang in voranschreitenden Prozentsätzen aufgelistet werden.

BACKUP DATABASE wideworldimporters TO DISK = 'c:\temp\wwi.bak' WITH STATS;

SQL Server Sicherungs-/Wiederherstellungsinformationen mithilfe von dynamischen Verwaltungsansichten.

Das SQL Server Management Studio ermöglicht uns jedoch dynamische Verwaltungsansichten, die uns Informationen zu Sicherungs- & Wiederherstellungsschätzungen zusammenstellen. Darunter fallen auch Zeiteinschätzungen hinsichtlich der Dauer des Sicherungsprozess. Zusätzlich können Sie mithilfe des folgenden Skripts erforderliche Informationen zum jeweiligen Prozess einholen:

SELECT SERVERPROPERTY('ServerName') AS [Instance],
   reqs.session_id,
   sess.login_name,
   reqs.command,
   CAST(reqs.percent_complete AS NUMERIC(10, 2)) AS [Percent Complete],
   CONVERT(VARCHAR(20), DATEADD(ms, reqs.estimated_completion_time, GETDATE()), 20) AS [Estimated Completion Time],
   CAST(reqs.total_elapsed_time / 60000.0 AS NUMERIC(10, 2)) AS [Elapsed Minutes],
   CAST(reqs.estimated_completion_time / 60000.0 AS NUMERIC(10, 2)) AS [Estimated Remaining Time in Minutes],
   CAST(reqs.estimated_completion_time / 3600000.0 AS NUMERIC(10, 2)) AS [Estimated Remaining Time in Hours],
   CAST((
     SELECT SUBSTRING(text, reqs.statement_start_offset/2,
                CASE
                WHEN reqs.statement_end_offset = -1
                THEN 1000
                ELSE(reqs.statement_end_offset-reqs.statement_start_offset)/2
                END)
     FROM sys.dm_exec_sql_text(sql_handle)) AS VARCHAR(1000)) AS [SQL]
FROM sys.dm_exec_requests AS reqs
 JOIN sys.dm_exec_sessions AS sess ON sess.session_id = reqs.session_id
WHERE command IN('RESTORE DATABASE', 'BACKUP DATABASE');

Das Skript gibt die folgenden Informationen zurück:

  • Instanzname
  • Session-ID 
  • Benutzername
  • Befehl 
  • abgeschlossen in Prozent
  • Geschätzte Fertigstellungszeit
  • Verstrichene Zeit in Minuten
  • Geschätzte verbleibende Zeit in Minuten
  • Geschätzte verbleibende Zeit in Stunden
  • Der vollständige Befehl zum Starten der Sicherung/Wiederherstellung

Man muss jedoch festhalten, dass die dynamischen Verwaltungsansichten nicht auf allen SQL Server Versionen einwandfrei funktionieren. Bisherige Tests auf SQL Server 2008 R2 und der Windows Version sind erfolgreich gewesen.

Vorteile

Der einschlägige Vorteil in der Informationsbeschaffung zur Dauer von Backup-Prozessen ist die Planungssicherheit. Geschäftskritische Anwendungen können so besser eingeschätzt und geplant werden. Unvorhergesehene Situationen werden entschärft und beeinträchtigen nicht die Serverperformance und Hochverfügbarkeit. Server Downtimes können entsprechend einkalkuliert werden, ohne mit großen Verlusten rechnen zu müssen. Dies bietet die notwendige Transparenz in der Arbeit mit SQL Server.