Backup Device Stacks

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!

Ähnliche Beiträge

2 Kommentare

  1. 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!

    1. 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…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.