SQL-Backup auf ein Netz-Laufwerk
This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!
Immer wieder stehe ich (manch anderer bestimmt auch) manchmal vor dem Problem, dass der Kunde ein separates Backup irgendwo auf einem Netzlaufwerk abgelegt haben möchte. Sei es um eine Kopie an einen Drittdienstleister weiterzugeben oder eine Jahres-Ultimo-Sicherung in den Safe zu bannen.
Man findet zahlreiche Beispiele, die unter der einen oder anderen SQL-Server Version (in Kombination mit den verschiedenen Windows-Versionen) funktionieren oder auch nicht. Ich habe vieles ausprobiert, aber war nie so wirklich glücklich. Also habe ich mich nochmal länger auf die Suche nach Lösungen begeben, als wieder mehrere Backups auf ein Netz-Laufwerk anstanden.
Mit dem folgenden Skript habe ich bisher auf unterschiedlichen Windows-Systemen und unterschiedlichen SQL-Server Versionen keinerlei Probleme gehabt, es hat immer einwandfrei funktioniert… (falls doch bitte in den Kommentaren „meckern“)
USE [master] GO DECLARE @database_name varchar(100), @Network_Share varchar(512), @backupfile_name VARCHAR(512), @backupdate varchar(8), @SQLCMD nvarchar(512) -- SET Datenbank Name SELECT @database_name = 'Datenbankname'; -- Set Netzwerk-Pfad SELECT @Network_Share = '\\hier.kommt.der.Netzwerkpfad.rein\Verzeichnis'; -- ohne abschließenden Backslash -- Erzeugen Backup-Pfad und BackupFile-Name inkl. Datum SELECT @backupdate = CONVERT(VARCHAR(8), GETDATE(), 112); SET @backupfile_name = @Network_Share + '\' + @database_name + '_' + CONVERT(VARCHAR(8), GETDATE(), 112) + '.bak'; -- Altes Backup-Device löschen IF EXISTS(SELECT * FROM sys.backup_devices where name = 'NetzLaufwerk_Device') EXEC master.dbo.sp_dropdevice @logicalname = N'NetzLaufwerk_Device'; -- Erstelle neues Backup-Device EXEC master.dbo.sp_addumpdevice @devtype = N'disk', @logicalname = N'NetzLaufwerk_Device', @physicalname = @backupfile_name; -- Backup erstellen mittels neuem Backup-Device SET @SQLCMD = N'BACKUP DATABASE [' + @database_name + '] TO [NetzLaufwerk_Device] WITH DESCRIPTION = N''Full Backup der ' + @database_name + ' auf ein Netzlaufwerk'', NOFORMAT, INIT, NAME = N''FULL_BACKUP_' + @database_name+''', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM, COPY_ONLY;' print 'Just backing up ' + @database_name + ' to ' + @Network_Share; exec sp_executesql @SQLCMD; -- Löschen des verwendeten Backup-Devices IF EXISTS(SELECT * FROM sys.backup_devices where name = 'NetzLaufwerk_Device') EXEC master.dbo.sp_dropdevice @logicalname = N'NetzLaufwerk_Device';
Für dieses Skript habe ich die für besten Parts aus mehreren anderen Skripten und Blogs herausgesucht und für mich funktional optimiert zusammengesetzt.
Ich hoffe damit jemandem geholfen zu haben.
This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!
Björn arbeitet auch weiterhin aus Mexiko als Senior Consultant – Microsoft Data Platform und Cloud für die Kramer&Crew in Köln. Auch der Community bleibt er aus der neuen Heimat treu, er engagiert sich auf Data Saturdays oder in unterschiedlichen Foren. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure SQL für Science-Fiction, Backen 😉 und Radfahren.
Amazon.com Empfehlungen
Damit ich auch meine Kosten für den Blog ein wenig senken kann, verwende ich auf diese Seite das Amazon.com Affiliate Programm, so bekomme ich - falls ihr ein Produkt über meinen Link kauft, eine kleine Provision (ohne zusätzliche Kosten für euch!).
Auto Amazon Links: Keine Produkte gefunden.
Hallo Björn,
ich bin auf der Suche einem Backup-Skript, das es ermöglicht, das Backup auf einem Netzlaufwerk zu speichern, auf dein Skript gestoßen. Leider bekomme ich folgende Fehlermeldung:
Meldung 3201, Ebene 16, Status 1, Zeile 3
Das Sicherungsmedium „NetzLaufwerk_Device(\Z:testXYZ30_20191214.bak)“ kann nicht geöffnet werden. Betriebssystemfehler 53(Der Netzwerkpfad wurde nicht gefunden.).
Meldung 3013, Ebene 16, Status 1, Zeile 3
BACKUP DATABASE wird fehlerbedingt beendet.
Auf dem Ordner hat JEDER Vollzugriff. Habe keine Ahnung, wo das Problem ist. Für Hilfe wäre ich sehr dankbar!
Guten Morgen Jens,
in diesem Skript geht es um ein Netzwerk-Share (aka Netz-Laufwerk)… den NetzLaufwerk ist aber ein bereits definiertes Laufwerk ( => Z: )
Dein Laufwerk Z müsste ja auf sowas verweisen wie \Fileserver1BackupDatenbankenSQL02
Dann müsste deine Zeile wie folgt lauten:
aus
— Set Netzwerk-Pfad
SELECT @Network_Share = ‚\hier.kommt.der.Netzwerkpfad.reinVerzeichnis‘;
wird
— Set Netzwerk-Pfad
SELECT @Network_Share = ‚\Fileserver1BackupDatenbankenSQL02‘;
Dann sollte es auch mit diesem Skript funktionieren…
Wenn nicht, nenne mir bitte SQL Server Version/Editon, damit ich das entsprechend einmal nachstellen könnte.
Ich hoffe es hilft…