Loading . . .

SQL-Backup auf ein Netz-Laufwerk

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.

2 thoughts on “0

  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.

Previous post Dynamisches “Shrink Logfile” für SQL Datenbanken
SQL Datenbank Eigenschaften Autogrowth Next post Ändern des Autogrowth Parameters aller SQL Server Datenbanken

SQL aus Hamburg

Das bin ich ;-)

Björn Peters - MVP - Data Platform

Ich habe das erste Mal mit MS SQL Datenbanken im Jahr 2000 zu tun gehabt und diese Datenbank-Systeme rund 7 Jahre vollumfänglich betreut. Von 2007 bis 2019 war ich als Datenbank-Administrator angestellt und betreute eine Vielzahl von unterschiedlichen SQL-Servern von mittelständischen Firmen und Großkonzernen aus unterschiedlichen Branchen.
Ich verfüge zwar über einige Zertifikate, beziehe meine Erkenntnisse und mein Wissen rund um den SQL Server rein aus dem Tagesgeschäft, dem Lesen/Verfolgen von zahlreichen Foren/Blogs.
Ich habe mich auch nicht wirklich auf ein Fachgebiet spezialisiert, lege meinen Schwerpunkt aber dann doch auf die Performance-Analyse.
Seit Ende 2016 bin ich Organisator des Azure Meetup Hamburg und vom April 2017 bis Juni 2018 Cloud- und Datacenter Management MVP und seit Juli 2018 Data-Platform MVP.