Von Haus aus ist keine Datensicherung auf ein Netzlaufwerk oder UNC-Pfad so ohne weiteres mittels Wartungsplan möglich. Gebräuchliche Varianten bestehen darin, erst lokal zu sichern und anschließend diese zu verschieben oder direkt auf den UNC-Pfad zu sichern (sofern das Dienstkonto des MS SQL Servers zuvor im Ziel entsprechend berechtigt wurde, Domänenmitgliedschaft vorausgesetzt).
Bei einem Kunden-Szenario musste aus Platzgründen auf einen Backup-Server gesichert werden, dieser ist nicht Mitglied der Domäne, folglich waren die üblichen Wege keine Option. Nach kurzer Recherche war ermittelt, wie man dennoch direkt auf ein Netzlaufwerk unter Angabe von Anmeldedaten sichern kann:
Um ein Netzlaufwerk zu verbinden wird auf xp_cmdshell zurückgegriffen, dies ermöglicht Windows-Befehle direkt aus der Datenbank-Engine heraus ausführen zu können. Per Voreinstellung ist diese Option deaktiviert. Einschalten kann man diese entweder über das Management Studio oder über eine Abfrage:
Via GUI:
- Das “MS SQL Management Server Management Studio” starten und anmelden.
- Im Objekt Explorer den Server mit der rechten Maustaste anklicken und “Facets” auswählen.
- “XPCmdShellEnabled” von “False” auf “True” ändern und auf “OK” klicken.
Via Abfrage:
Siehe Quellen
Netzlaufwerk verbinden (via Abfrage):
EXEC XP_CMDSHELL 'net use m: \\<HOST>\<SHARE> <PASSWORD> /User:<HOSTNAME><USERNAME> /persistent:yes'
Ein erster Test z.B. durch das Auflisten des Laufwerksinhalts:
EXEC XP_CMDSHELL 'dir m:'
Ggf. die Laufwerksbuchstaben anpassen.
Klappt der Zugriff soweit, können die Wartungspläne entsprechend angepasst werden.
Vorteil dieser Methode ist das die Datensicherung nun auf einen anderen Server der zudem in einen anderen Brandabschnitt erfolgt. Lokal wird Speicherplatz gespart. Theoretisch könnte man mittels VPN sogar direkt an einen anderen Standort sichern, dabei wäre allerdings Verbindungsstabilität, Bandbreite und die Größe der Sicherung zu beachten. Nachteil ist eine zum Zeitpunkt der Sicherung höhere Netzlast und das die Sicherung ggf. länger dauert als lokal (abhängig von der Bandbreite).
Netzlaufwerk dauerhaft (auch nach MS SQL- oder Server-Neustart) verbinden
Wird der Datenbankdienst oder gar der komplette Server neugestartet, so steht das Netzlaufwerk nicht mehr zur Verfügung. Damit die “EXEC…”-Anweisung bei jedem Start von MS SQL ausgeführt wird, muss eine automatische Ausführung einer gespeicherten Prozedur eingerichtet werden:
CREATE PROC map_drive_startup As EXEC xp_cmdshell 'EXEC XP_CMDSHELL 'net use m: \\<HOST>\<SHARE> <PASSWORD> /User:<HOSTNAME><USERNAME>'
sp_procoption @ProcName = 'map_drive_startup' , @OptionName = 'startup' , @OptionValue = 'on'
Quellen:
MS MSDN Forums – SQL Server 2012 – Cannot Use Network Drive as a Backup Device (Dienstkonto und Rechte)
DBDiggers – Enable and work with XP_CmdShell in SQL Server 2008 R2
MSSQTtips.com – Make Network Path Visible For SQL Server Backup and Restore in SSMS
Update 18.10.2017
Automatisches Verbinden nach SQL Server-Neustart ergänzt.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Muss vor das sp_procoption nicht auch ein EXEC ?
Nur so hat es bei mir funktioniert
Gute Frage. Der Befehl wurde von
MS Developer – Varun Dhawan’s Blog – Backup and Restore SQL Server Database to a network shared drive
übernommen.
Danke für diesen Beitrag. Die Erlangung des Netzwerkzugriffs als User MS-SQLSERVER mit XP_CMDSHELL war für mich der Schlüssel.
Ich habe diese Art der Netzwerksicherung gerade selbst umgesetzt, nutze aber direkt UNC-Pfade, erspare mir damit das Laufwerksmapping. Entsprechend:
EXEC xp_cmdshell ‘EXEC XP_CMDSHELL ‘net use \ /User:’
EXEC xp_cmdshell ‘EXEC XP_CMDSHELL ‘net use \ /SaveCred’
Erster Befehl für den Zugriff auf die Ressource, zweiter, damit Windows sich für diesen Benutzer die Netzwerkzugangsdaten merkt. Damit sollte der Zugriff auch nach einem Neustart wieder funktionieren.
Erste Sicherung von über 80 GB ging für eine Netzwerksicherung rasend schnell, ca. 950 MBit/s von 1 GBit ausgenutzt lt. Taskmanager, Ziel war ein Backup Server mit aktuellem OpenMediaVault (Linux, Samba).
Serverseitig Windows Server 2016 und SQL Server 2008 (Zwischenlösung nach Migration von Windows Server 2003 + SQL Server 2000) in einer virtuellen Maschine (Xen Cloud Platform, XCP-ng 8.0).
Hmm, also so hatte ich das nicht eingegeben, wie das oben übernomen wurde. 🙁
Das kommt dadurch zustande, das von WordPress so manches anders interpretiert wird.
Ich gehe jetzt einfach mal davon aus, das die Admins wissen was gemeint ist 😉