Aktivieren Sie SQL Server für die Sicherung auf Remotecomputern / -laufwerken

8

Ich habe einen SQL Server (2000, 2005 und 2008) und möchte SQL Agent (oder sogar eine einfache Sicherungsdatenbank 'xxx' auf Festplatte = 'JJJ') verwenden, um auf Remote-Laufwerken zu sichern.

Dh: Ich habe ein zugeordnetes Laufwerk in der SQL-Maschine, zum Beispiel: "M:", das \\ otherbox \ someshare zugeordnet ist

Standardmäßig erlaubt SQL Server nicht, auf solche Laufwerke zu sichern, aber ich denke, dass es eine Möglichkeit gibt, dies zu aktivieren. Kann mich jemand auf die Dokumente verweisen?

Danke im Voraus.

Martin Marconcini
quelle
1
Sie können einfach ein Drittanbieter-Tool wie SQLBackupAndFTP verwenden, um Ihren SQL Server remote zu sichern. sqlbackupandftp.com/blog/…
Nick Taylor

Antworten:

8

Verwenden Sie den UNC-Pfad, wenn Sie das Ziel angeben. Der SQL-Agent hat kein Konzept für "zugeordnete" "Laufwerke".

Außerdem wird SQL Agent normalerweise als "Lokaler Dienst" oder "Lokales System" ausgeführt und hat daher keine Rechte für Remotefreigaben auf anderen Computern.

Sie haben mehrere Möglichkeiten:

  • Führen Sie SQL Agent als Rollenkonto in der Domäne aus. Gewähren Sie diesem Konto die Berechtigung, in das Verzeichnis / die Freigabe zu schreiben, in dem die Sicherungen gespeichert werden sollen.

  • Führen Sie SQL Agent als "Netzwerkdienst" aus. Es wird beim Freigabeserver mit dem Domänencomputerkonto des Computers authentifiziert, auf dem der Dienst ausgeführt wird. Gewähren Sie diesem Konto die Berechtigung, in das Verzeichnis / die Freigabe zu schreiben, in dem die Sicherung gespeichert werden soll.

  • Wenn Sie keine Domain haben, erstellen Sie ein Konto mit demselben Benutzernamen und Kennwort sowohl auf dem Computer, auf dem SQL Agent gehostet wird, als auch auf dem Computer, auf dem die Sicherungsdateien gehostet werden. Ändern Sie SQL Agent so, dass es als dieses "Rollen" -Konto ausgeführt wird, und erteilen Sie diesem Konto die Berechtigung, in das Verzeichnis / die Freigabe zu schreiben, in dem bzw. dem die Sicherung gespeichert werden soll. (Die "Domäne des armen Mannes" ...)

Evan Anderson
quelle
Zusätzlich zur Erwähnung der UNC-Pfade würde ich dem Benutzer empfehlen, tatsächlich eine Verbindung zum UNC-Pfad herzustellen. Der schnelle / einfache Weg, dies zu tun, besteht darin, einfach einen Webbrowser zu öffnen und einzugeben. Sie werden aufgefordert, einen Benutzernamen / ein Passwort einzugeben, und können normalerweise sagen, dass Sie sich an diesen Benutzer / Pass für die Zukunft erinnern möchten. Ich habe zu viele Leute gesehen, die zu 99% auf dem Weg dorthin waren und nicht herausfinden konnten, warum die Dinge nicht funktionierten. TESTEN SIE IHRE VERBINDUNG! LOL! :-)
KPWINC
Das habe ich gesucht (Teil "Die Domäne des armen Mannes");) Danke!
Martin Marconcini
4

Ich stimme beiden Antworten zum UNC-Pfad voll und ganz zu.

Ich möchte auch hinzufügen, dass Sie selbst mit zugeordneten Laufwerken eine einfache Problemumgehung haben. Sie können eine Sicherung auf jedem normalen Laufwerk Ihres Servers durchführen. Und dann können Sie hinzufügen

xp_cmdshell 'XCOPY [source] [destination] \flags'

SQL-Befehl für den Job oder das SQL-Skript, das Sie ausführen.

Mit xp_cmdshell können Sie noch mehr tun - zum Beispiel ein externes Archivierungsbefehlszeilentool wie 7z ausführen, um die Datei zu komprimieren, bevor Sie sie auf das zugeordnete Laufwerk kopieren (wenn die Remoteverbindung zu langsam ist ...).

PS: Ich habe vergessen zu erwähnen, dass xp_cmdshell mithilfe des Oberflächenkonfigurationstools und durch Ausführen von sp_configure aktiviert und deaktiviert werden kann (und standardmäßig deaktiviert ist).

Bogdan_Ch
quelle
Das Dienstprogramm ROBOCOPY aus dem Win2003 Resource Kit bietet einige zusätzliche Optionen gegenüber XCOPY, die für diese Art von Vorgang nützlich sind. In meinem Fall ist die Möglichkeit, zuvor kopierte Sicherungen nicht zu überschreiben oder zwei Sicherungsverzeichnisse zu spiegeln, ohne zusätzliche Skripterstellung problemlos zu implementieren.
Kermatt
1

Ihr Agent benötigt Zugriff auf die Netzwerkfreigaben. Sie müssen nicht vorher zugeordnet werden.

Du machst es so:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

Ich glaube, wenn der Benutzer, dem der Job gehört, ein SQL-Systemadministrator ist, wird er unter dem Agenten ausgeführt, andernfalls wird er als Nicht-Systemadministrator ausgeführt.

Sam
quelle
1

Wenn SQL Server nicht unter einem Domänenkonto ausgeführt wird, können Sie ein Netzwerklaufwerk für das SQL Server-Konto (nicht Ihr Konto) wie in dieser Antwort zum Stapelüberlauf beschrieben zuordnen

Zuerst müssen Sie xp_cmdshell aktivieren

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

Dann können Sie ein Laufwerk mit folgenden Elementen zuordnen:

EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Schließlich können Sie auf diesem zugeordneten Laufwerk sichern:

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
Yepeekai
quelle
0

Beachten Sie hierbei, dass SQL Server Netzwerkverzögerungen nicht toleriert. Wenn sie auftreten und dazu neigen, schlägt die Sicherung fehl. Ich empfehle diese Vorgehensweise überhaupt nicht für Produktionsumgebungen.

Besser lokal sichern und dann kopieren.

Steve Jones
quelle
0

Am einfachsten ist es, über die Datenträgerverwaltung ein .vhd-Laufwerk auf einer Netzwerkfreigabe zu erstellen und ihm einen Laufwerksbuchstaben zuzuweisen. SQL kann ohne Änderungen auf dieses Laufwerk zugreifen.

Fügen Sie dem Scheduler beim Booten einfach ein Skript diskpart.exe hinzu, um es beim Neustart automatisch anzuhängen.

Beispiel: Wählen Sie vdisk file = "\ {IP-Adresse / Server} {Netzwerkfreigabe} {Dateiname.vhd}". Anhängen von vdisk // speichert den zuletzt zugewiesenen Laufwerksbuchstaben.

Kimon
quelle