MS-SQL-Server + T-SQL+Batch
Hallo Gemeinde,
mal wieder ein Problem aus dem Bereich des MS-SQL-Servers.
Folgendes Thema:
Nachts sollen automatisch Backups der DBen im SQL-Server laufen, kein Thema läuft super. Jedoch gibt es das ein oder andere Thema im Bezug auf vorhandene Plattenkapazität. Will heißen, bevor die Sicherung startet, muss mit Systemmitteln geprüft werden, ob genügend Plattenplatz vorhanden ist.
Habt Ihr einen Ansatz, mit dem dies umgesetzt werden kann? Nach Möglichkeit ohne Anwendung von Drittsoftware...
Beste Grüße
(kleiner)kallewirsch
mal wieder ein Problem aus dem Bereich des MS-SQL-Servers.
Folgendes Thema:
Nachts sollen automatisch Backups der DBen im SQL-Server laufen, kein Thema läuft super. Jedoch gibt es das ein oder andere Thema im Bezug auf vorhandene Plattenkapazität. Will heißen, bevor die Sicherung startet, muss mit Systemmitteln geprüft werden, ob genügend Plattenplatz vorhanden ist.
Habt Ihr einen Ansatz, mit dem dies umgesetzt werden kann? Nach Möglichkeit ohne Anwendung von Drittsoftware...
Beste Grüße
(kleiner)kallewirsch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 318958
Url: https://administrator.de/forum/ms-sql-server-t-sql-batch-318958.html
Ausgedruckt am: 22.12.2024 um 17:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo kallewirsch,
wenn nicht genügend Platz vorhanden ist wird deine Sicherung nicht komplett durchgeführt.
Das ist identisch mit nicht durchgeführt.
Ich würde an deiner Stelle mich lieber um ausreichend Platz für das Backup kümmern.
Vor 4 Wochen hatte ich das Thema auch und es ist wirklich der bessere Weg.
Ich verwende für das DB Backup ola.hallengren.com/sql-server-backup.html
Wenn du jetzt zum Beispiel wenig Platz hast dann behälst du halt nicht die letzten 7 Tages Versionen deiner Datenbank sondern nur die von den letzten 2 Tagen. Oder du vergrößerst die Abstände vom incr. Backup.
Das wären ein paar Ideen.
grüße vom it-frosch
wenn nicht genügend Platz vorhanden ist wird deine Sicherung nicht komplett durchgeführt.
Das ist identisch mit nicht durchgeführt.
Ich würde an deiner Stelle mich lieber um ausreichend Platz für das Backup kümmern.
Vor 4 Wochen hatte ich das Thema auch und es ist wirklich der bessere Weg.
Ich verwende für das DB Backup ola.hallengren.com/sql-server-backup.html
Wenn du jetzt zum Beispiel wenig Platz hast dann behälst du halt nicht die letzten 7 Tages Versionen deiner Datenbank sondern nur die von den letzten 2 Tagen. Oder du vergrößerst die Abstände vom incr. Backup.
Das wären ein paar Ideen.
grüße vom it-frosch
Hallo Kalle,
die Größe des Backups sollte in etwa der Menge der Daten in der Datenbankdatei entsprechen. Die kannst Du durch die Funktion FileProperty erfahren:
Die Dateigröße und die genutzten Daten sind in DB-Seiten angegeben, was 8 KB entspricht (zumindest auf unserem SQL Server 2008R2). Die Abfrage oben gibt Dir die Größe also in KB aus.
Die einzelnen Datenbanken kannst Du über sys.databases ermitteln, damit Du dann die Abfrage oben in einer Schleife ausführen kannst.
Daß die Größe des Backups in etwa den genutzten Daten entspricht, gilt natürlich nur, wenn die Sicherung nicht komprimiert ist. Wie klein sie bei der Komprimierung wird, wenn Ihr das einsetzt, wird von Euren Daten abhängen und da wirst Du dann mit irgendeinem Erfahrungswert die Berechnung durchführen müssen. Der Erfahrungswert könnte ja auch durch die Backups dann automatisch angepaßt werden.
Den freien Plattenplatz könntest Du z.B. über xp_cmdshell ermitteln, indem Du entweder eine Batchdatei aufrufst, die Dir den Wert ermittelt und nur diesen Wert zurückgibt oder aber einfach nur ein "dir x:" ausführst und die letzte Zeile, die den freien Speicher angibt, per substring zerlegst.
Oder die Steuerung der Sicherung und dann eben auch die Prüfung erfolgt eh von außen und Du kannst mittels sqlcmd einfach nur die Datenmengen ermitteln.
So, als Anregung war es das jetzt. Die Ausführung überlasse ich dem geneigten Leser
Gruß, Mad Max
die Größe des Backups sollte in etwa der Menge der Daten in der Datenbankdatei entsprechen. Die kannst Du durch die Funktion FileProperty erfahren:
select name, physical_name, size * 8 as Dateigroesse, FileProperty (name, 'SpaceUsed') * 8 as DatenGenutzt from sys.database_files
Die Dateigröße und die genutzten Daten sind in DB-Seiten angegeben, was 8 KB entspricht (zumindest auf unserem SQL Server 2008R2). Die Abfrage oben gibt Dir die Größe also in KB aus.
Die einzelnen Datenbanken kannst Du über sys.databases ermitteln, damit Du dann die Abfrage oben in einer Schleife ausführen kannst.
Daß die Größe des Backups in etwa den genutzten Daten entspricht, gilt natürlich nur, wenn die Sicherung nicht komprimiert ist. Wie klein sie bei der Komprimierung wird, wenn Ihr das einsetzt, wird von Euren Daten abhängen und da wirst Du dann mit irgendeinem Erfahrungswert die Berechnung durchführen müssen. Der Erfahrungswert könnte ja auch durch die Backups dann automatisch angepaßt werden.
Den freien Plattenplatz könntest Du z.B. über xp_cmdshell ermitteln, indem Du entweder eine Batchdatei aufrufst, die Dir den Wert ermittelt und nur diesen Wert zurückgibt oder aber einfach nur ein "dir x:" ausführst und die letzte Zeile, die den freien Speicher angibt, per substring zerlegst.
Oder die Steuerung der Sicherung und dann eben auch die Prüfung erfolgt eh von außen und Du kannst mittels sqlcmd einfach nur die Datenmengen ermitteln.
So, als Anregung war es das jetzt. Die Ausführung überlasse ich dem geneigten Leser
Gruß, Mad Max
Letztlich kein probates Mittel, da die Größe des Backups nicht vorhersagbar ist. Daher ist der Ansatz von @it-frosch die einzig richtige Lösung.