Benutzer mit den meisten Antworten
Abfrage mit verschiedenen Where Bedienungen

Frage
-
Hallo
ich bin auf der Suche nach einer Lösung für folgendes Problem. Ich möchte eine Abfrage schreiben welche mir das Datum der letzten Sicherung aller Datenbanken zurück liefer.
Datenbankname | letzte Vollsicherung | letzte Diff-Sicherung | letzte LOG Sicherung
-------------------------------------------------------------------------------------------------------------
DB1 | 20.06.15 | 24.06.15 | 29.06.15
bisher sieht meine Lösung so aus dass ich die Daten für Voll, DIFF und Log separat abfrage
select distinct database_name,max(backup_finish_date) from msdb.dbo.backupset where type like 'd' group by database_name
Und dann nochmal für L und T
Wie kann ich die letzten Backup Läufe der Kategorie neben einander anzeigen
Danke für die Hilfe
Benjamin Hoch
MCSA: Microsoft Certified Solutions Associate - SQL Server 2012,
MCSA: Microsoft Certified Solutions Associate - Windows Server 2012,
Antworten
-
Hallo Benjamin,
indem Du mit einer CASE WHEN Anweisung die Backup-Type prüfst und davon abhängig die Werte über mehrere Spalten verteilst; nennt man auch Pivot Abfrage:
select database_name ,max(CASE WHEN type = 'D' THEN backup_finish_date END) LastFull ,max(CASE WHEN type = 'I' THEN backup_finish_date END) LastDiv ,max(CASE WHEN type = 'L' THEN backup_finish_date END) LastLog from msdb.dbo.backupset group by database_name
Ginge auch mit der Pivot Anweisung, siehe Verwenden von PIVOT und UNPIVOTOlaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Benjamin.Hoch Montag, 29. Juni 2015 10:52
-
Pivot geht dann so:
SELECT Database_Name, [D] AS [Full], [I] AS Diff, [L] AS [Log] FROM ( select distinct database_name, backup_finish_date as bfd, type from msdb.dbo.backupset ) AS p PIVOT ( Max (bfd) FOR type in ([D],[L],[I]) ) AS pvt ORDER BY database_name;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu- Als Antwort markiert Benjamin.Hoch Montag, 29. Juni 2015 10:52
Alle Antworten
-
Hallo Benjamin,
indem Du mit einer CASE WHEN Anweisung die Backup-Type prüfst und davon abhängig die Werte über mehrere Spalten verteilst; nennt man auch Pivot Abfrage:
select database_name ,max(CASE WHEN type = 'D' THEN backup_finish_date END) LastFull ,max(CASE WHEN type = 'I' THEN backup_finish_date END) LastDiv ,max(CASE WHEN type = 'L' THEN backup_finish_date END) LastLog from msdb.dbo.backupset group by database_name
Ginge auch mit der Pivot Anweisung, siehe Verwenden von PIVOT und UNPIVOTOlaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Benjamin.Hoch Montag, 29. Juni 2015 10:52
-
Pivot geht dann so:
SELECT Database_Name, [D] AS [Full], [I] AS Diff, [L] AS [Log] FROM ( select distinct database_name, backup_finish_date as bfd, type from msdb.dbo.backupset ) AS p PIVOT ( Max (bfd) FOR type in ([D],[L],[I]) ) AS pvt ORDER BY database_name;
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu- Als Antwort markiert Benjamin.Hoch Montag, 29. Juni 2015 10:52