kallewirsch
Goto Top

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

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

it-frosch
it-frosch 24.10.2016 um 13:52:59 Uhr
Goto Top
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. face-wink
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
kallewirsch
kallewirsch 24.10.2016 um 14:37:55 Uhr
Goto Top
Hallo it-frosch,

danke für Deine Anmerkungen / Verweise.

Absolut richtig ist, das auf dem Ziel des Backups genügend ausreichender Platz vorhanden sein muss, dies muss aber vor dem Start des Backups geprüft werden.
Hier für such ich Anregungen, der Rest läuft automatisch.

Beste Grüße
kallewirsch
MadMax
MadMax 25.10.2016 um 18:43:59 Uhr
Goto Top
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:
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 face-wink

Gruß, Mad Max
atze187
atze187 27.10.2016 um 13:37:52 Uhr
Goto Top
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.