Wie kann ich eine entfernte SQL Server-Datenbank auf einem lokalen Laufwerk sichern?


241

Ich muss eine Datenbank von einem Remote-Server auf einen lokalen kopieren. Ich habe versucht, SQL Server Management Studio zu verwenden, es wird jedoch nur auf einem Laufwerk auf dem Remoteserver gesichert.

Ein paar Punkte:

  • Ich habe keinen Zugriff auf den Remote-Server, sodass ich Dateien kopieren kann.
  • Ich habe keinen Zugriff zum Einrichten eines UNC-Pfads zu meinem Server.

Irgendwelche Ideen, wie ich diese Datenbank kopieren kann? Muss ich Tools von Drittanbietern verwenden?


1
Ich denke, wenn Sie überhaupt keinen Zugriff auf die Verzeichnisstruktur haben, werden Sie aufgefordert, dies zu versuchen.
JNK

3
Sie versuchen nur, die Datenbank zu kopieren, anstatt sie speziell zu sichern? In diesem Fall können Sie den Assistenten zum Kopieren von Datenbanken verwenden oder (in SQL Server 2008) die Option "Skripte generieren" verwenden, um das Schema und die Daten zu skripten. Redgate SQL Compare und Data Compare können auch hier hilfreich sein.
Martin Smith

1
@MartinSmith Gemäß Ihrem Vorschlag habe ich ein Skript mit der Generate and Publish ScriptsOption generiert . Ich bekomme alle Tabellen und das Schema. Aber ich habe keine Daten mit Tabellen bekommen. Wie kann ich das beheben?
Ihr wahrer Freund

Antworten:


182

In Microsoft SQL Server Management Studio können Sie mit der rechten Maustaste auf die Datenbank klicken, die Sie sichern möchten, und auf Aufgaben -> Skripts generieren klicken.

Daraufhin wird ein Assistent geöffnet, in dem Sie Folgendes festlegen können, um eine ordnungsgemäße Sicherung Ihrer Datenbank auch auf einem Remoteserver durchzuführen :

  • Wählen Sie die Datenbank aus, die Sie sichern möchten, und klicken Sie auf Weiter.
  • In den Optionen, die es Ihnen präsentiert:
    1. Im Jahr 2010: Ändern Sie unter "Tabellen- / Ansichtsoptionen" "Skriptdaten" und "Skriptindizes" in "Wahr" und klicken Sie auf "Weiter".
    2. Ändern Sie 2012 unter "Allgemein" "Datentypen in Skript" von "Nur Schema" in "Schema und Daten".
    3. Im Jahr 2014: Die Option zum Skripten der Daten ist jetzt in Schritt "Festlegen der Skriptoptionen" "ausgeblendet". Sie müssen auf "Erweitert" klicken und "Zu skriptende Datentypen" auf den Wert "Schema und Daten" setzen
  • Klicken Sie in den nächsten vier Fenstern auf "Alle auswählen" und dann auf "Weiter".
  • Wählen Sie ein Skript für ein neues Abfragefenster

Sobald es fertig ist, haben Sie ein Backup-Skript vor sich. Erstellen Sie eine neue lokale (oder entfernte) Datenbank und ändern Sie die erste 'USE'-Anweisung im Skript, um Ihre neue Datenbank zu verwenden. Speichern Sie das Skript an einem sicheren Ort und führen Sie es für Ihre neue leere Datenbank aus. Dadurch sollten Sie eine (fast) doppelte lokale Datenbank erstellen, die Sie dann nach Belieben sichern können.

Wenn Sie vollen Zugriff auf die entfernte Datenbank haben, können Sie im ersten Fenster des Assistenten die Option "Alle Objekte skripten" aktivieren und im nächsten Fenster die Option "Skriptdatenbank" in "Wahr" ändern. Beachten Sie jedoch, dass Sie eine vollständige Suche und Ersetzung des Datenbanknamens im Skript durch eine neue Datenbank durchführen müssen, die Sie in diesem Fall nicht erstellen müssen, bevor Sie das Skript ausführen. Dies sollte ein genaueres Duplikat erstellen, ist jedoch aufgrund von Berechtigungsbeschränkungen manchmal nicht verfügbar.


9
In SQL Server Management Studio 2012 gibt es keine Option wie "Skriptdaten". Führen Sie daher in neueren Versionen die folgenden Schritte für Schritt 2 aus: Ändern Sie unter "Allgemein" "Datentypen in Skript" von "Nur Schema" in "Schema" und Daten '.
berezovskyi

1
Ich habe es auf SQL Server 2008 R2 überprüft und es hat wie ein Zauber funktioniert. Um es für die Backup-Strategie zu verwenden, muss ich einige zusätzliche Arbeiten selbst ausführen, aber ich denke, es ist besser, als einige Tools von Drittanbietern wie RedGate usw. zu verwenden. Vielleicht habe ich Paranoia, aber ich denke, die meisten Tools von Drittanbietern haben zusätzlichen Code und werden meinen bekommen Kontrolle und Reduzierung der Einfachheit und Klärung von Skripten. Vielen Dank.
QMaster

2
@ShaunLuttin Wenn Sie im zweiten Schritt (ab 2012) sicherstellen, dass 'Datentypen in Skript' von 'Nur Schema' in 'Schema und Daten' geändert werden, sollten die INSERT-Anweisungen angezeigt werden.
Daniel Gill

6
In SSMS 2014 ist die Option, nur von Schema zu Schema und Daten zu wechseln, jetzt hinter einem "Erweitert" verborgen, wenn Sie auswählen, wo das Skript gespeichert werden soll.
MushinNoShin

2
Wenn ich versuche, ein Skript mit dieser Methode auszuführen, erhalte ich vom SQL Server Management Studio einen Fehler über "Unzureichender Speicher, um die Ausführung des Programms fortzusetzen. (Mscorelib)"
Rob

51

Gewähren Sie zunächst mit "Jeder" die vollständigen Kontrollberechtigungen für einen lokalen Pfad auf Ihrem Computer (siehe unten). (Oder erteilen Sie alternativ Berechtigungen speziell für das SQL Server-Agentenkonto.)

Führen Sie zweitens Folgendes aus:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;

14
Dies ist die Antwort auf die Frage. Dadurch wird "eine Remote-SQL Server-Datenbank auf einem lokalen Laufwerk gesichert" und nicht "Skripttabellen und -daten". Jemand: Bitte markieren Sie diese Antwort als akzeptiert und entfernen Sie die falsche Antwort von Daniel Gill
Henrik Holmgaard Høyer

Während ich denke, dass dies die bessere Antwort ist, fragt die Frage nach "Irgendwelche Ideen, wie ich diese Datenbank kopieren kann?" nicht speziell sichern.
Oliver Townshend

11
Dies setzt voraus, dass der Remotecomputer Zugriff auf die Dateien Ihrer lokalen Computer hat, was nicht der allgemeine Fall ist.
Anders Lindén

Ich wünschte, ich könnte dich mehr als einmal positiv bewerten. Dies ist die perfekte Antwort und etwas, das ich seit Jahren tun wollte. So einfach ... so perfekt. Es wird nicht jeden Fall auf der Welt lösen, aber es hat perfekt für meinen funktioniert, bei dem ich auf einem Computer remote bin, aber nicht auf dem Computer mit SQL Server.
Wade Hatler

Das hat auch Arbeiter für mich. Geben Sie den lokalen Ordner nur vorübergehend für alle frei , führen Sie die Sicherung durch und deaktivieren Sie die Freigabe. Ich denke auch, dass dies die richtige Antwort sein sollte.
Fred Rogers

51

Um nur Daten und Schemas zu kopieren (kopiert keine gespeicherten Prozeduren, Funktionen usw.), verwenden Sie den SQL Server-Import- und Export-Assistenten und wählen Sie Neu ..., wenn Sie die Zieldatenbank auswählen .

Klicken Sie mit der rechten Maustaste auf Datenbank> Aufgaben> Daten importieren.

Wählen Sie eine Datenquelle

  • Datenquelle : SQL Server Native Client
  • Servername : der Remote - Server
  • Authentifizierung :
  • Datenbank : Der Datenbankname

Wählen Sie eine Destination

  • Datenquelle : SQL Server Native Client
  • Servername : der lokale Server
  • Authentifizierung :
  • Datenbank :New...

Der Rest ist einfach.


2
Dies funktionierte für mich viel besser als die akzeptierte Antwort. Behandelt die Beziehungen zwischen Tabellen viel sauberer.
MushinNoShin

7
Welp. Es werden leider keine Identitäten und Standardeinschränkungen festgelegt. :(
MushinNoShin

1
Dies ist viel besser als das Generieren von Skripten. Skripte können manchmal ziemlich groß sein. Persönliche Präferenz. Nichts für ungut :)
Vikas

Dies ist viel einfacher und ich würde es tun, aber wenn Sie aus irgendeinem Grund Spalten wie object_id, create_data benötigen, ändern Sie das Datum wie besehen in sys.tables. Denken Sie daran, dass sie beim Erstellen geändert werden.
Crismogram

@MushinNoShin Sie können zuerst Skripte generieren und dann Daten importieren / exportieren, indem Sie das Einfügen der Identität beim Zuordnungsschritt aktivieren.
HasanG

29

Sie können kein Backup von einem Remote-Server auf eine lokale Festplatte erstellen. Es gibt einfach keine Möglichkeit, dies zu tun. Soweit ich weiß, gibt es dafür auch keine Tools von Drittanbietern.

Alles, was Sie tun können, ist, ein Backup auf dem Remote-Server-Computer zu erstellen und es von jemandem komprimieren und an Sie senden zu lassen.


5
Ich bin nicht einverstanden. Unter vielen Umständen können Sie den Befehl 'Generate Scripts' von MS SQL Server Management Studio verwenden, um ein Skript zu erstellen, das ausgeführt werden kann, um eine lokale Datenbank zu generieren, mit der Sie dann nach Belieben arbeiten können. Siehe meine Antwort unten oder Martin Smiths Kommentar zu der Frage.
Daniel Gill

19
@ Rafid: Ja - aber das ist kein echtes Backup - es ist ein Skript- / Datenexport .....
marc_s

2
@marc_s Was unterscheidet ein "echtes Backup" von einer exportierten Kopie? Das Protokoll? Noch etwas?
Dronz

31
@Dronz: JA! Der Skriptexport reproduziert die Struktur und möglicherweise sogar die Daten in einer Tabelle. Er kann jedoch keine Elemente wie Transaktionsprotokolle und Statistiken sowie andere wichtige Teile einer SQL Server-Datenbank enthalten.
marc_s

1
@ShaunLuttin, Sie können die Daten einschließen.
Erwin Rooijakkers

17

Ich weiß, dass dies eine späte Antwort ist, aber ich muss einen Kommentar zu der am häufigsten gewählten Antwort abgeben, die besagt, dass die Option zum Generieren von Skripten in SSMS verwendet werden soll.

Das Problem dabei ist, dass diese Option das Skript nicht unbedingt in der richtigen Ausführungsreihenfolge generiert, da Abhängigkeiten nicht berücksichtigt werden.

Für kleine Datenbanken ist dies kein Problem, für größere jedoch sicherlich, weil das Skript manuell neu angeordnet werden muss. Versuchen Sie das auf 500 Objektdatenbank;)

Leider sind in diesem Fall die einzige Lösung Tools von Drittanbietern.

Ich habe erfolgreich Vergleichstools von ApexSQL (Diff und Data Diff) für ähnliche Aufgaben verwendet, aber Sie können mit keinem anderen, der hier bereits erwähnt wurde, etwas falsch machen, insbesondere mit Red Gate.


1
Ich stimme nicht zu, für mich ordnet SQL die Abhängigkeiten immer korrekt an. Haben Sie ein konkretes Beispiel dafür, wie Sie das von Ihnen erwähnte Verhalten reproduzieren können?
Sawe

Es gibt auch eine Option, um diese Angelegenheit zu berücksichtigen
Gaspa79

13

Sie können SQLBackupAndFTP ausprobieren . Es werden Skripte zum Erstellen aller Objekte in Ihrer Datenbank und INSERT-Anweisungen für alle Zeilen in Ihren Tabellen erstellt. In jeder Datenbank können Sie diese Skriptdatei ausführen und die gesamte Datenbank wird neu erstellt.


4
Abgeordnet. Musste eine neue Version von SQL Server Management Studio installieren und konnte nicht mehr so ​​skripten wie früher. Dieses Tool hat sich schnell und ohne Probleme darum gekümmert, auch ohne vollen Zugriff auf den Remote-Server (Appharbor SQL Server-Add-On)
Daniel Gill

1
Bitte beachten Sie, dass diese Software stark Ressourcen verbraucht.
Dementic

Abgesehen davon, dass es fehlerhaft ist und nicht ganz sicher ist, ob dies richtig funktioniert. Kann kein Problem über PHP mit einem Remote-Server verbunden werden, aber das kann nicht? Wenn ich die richtigen Einstellungen auf dem Server selbst habe. Also ja ... mach weiter.
Shawn Rebelo

7

In diesem Blog finden Sie eine Beschreibung zum Kopieren einer entfernten Datenbank:

Sichern einer SQL Server 2008-Datenbank aus einer gemeinsam genutzten Hosting-Umgebung


1
In diesem Ansatz wird erläutert, wie Sie die Struktur der Datenbank skripten, lokal erstellen und anschließend mithilfe von SQL-Verwaltungstools Daten zwischen einer lokalen und einer entfernten Datenbank kopieren.
Drew Noakes

1
Sie können die Option "Skriptdaten" auf "Wahr" setzen, um die Daten auch auf einmal zu skripten.
Daniel Gill

Kopieren und Sichern sind zwei verschiedene Dinge.
Anders Lindén

Dies war perfekt, weil ich mit SQL Server 2012 an einer 2016er Datenbank arbeiten muss und 2012 kein 2016er Backup verwenden kann.
Majjam

6

Es gibt die 99% ige Lösung, um Bak-Dateien vom Remote-SQL-Server auf Ihren lokalen PC zu übertragen. Ich habe es dort in meinem Beitrag http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc beschrieben

Im Allgemeinen sieht es so aus:

  • Führen Sie ein SQL-Skript aus, um Bak-Dateien zu generieren

  • Führen Sie ein SQL-Skript aus, um jede Bak-Datei in eine temporäre Tabelle mit einem varbinären Feldtyp einzufügen. Wählen Sie diese Zeile aus und laden Sie die Daten herunter

  • wiederhole vorher. Schritt so oft, wie Sie Bak-Dateien haben

  • Führen Sie ein SQL-Skript aus, um alle temporären Ressourcen zu entfernen

Das war's, Sie haben Ihre Bak-Dateien auf Ihrem lokalen PC.


5

Sie können Datenbank kopieren verwenden ... Klicken Sie mit der rechten Maustaste auf die entfernte Datenbank ... wählen Sie Aufgaben aus und verwenden Sie Datenbank kopieren ... Sie werden nach dem Quellserver und dem Zielserver gefragt. dass Ihre Quelle die Remote und das Ziel Ihre lokale Instanz von SQL Server ist.

So einfach ist das


Für das Kopieren der Datenbank sind SysAdmin-Berechtigungen erforderlich. Dies ist keine Lösung für reguläre Benutzer der Datenbank.
Buggieboy

In meiner heutigen Ausgabe verfügt unser Entwicklerteam über Systemadministratorrechte. Also werde ich Pouyans Ansatz verwenden.
Codes mit Hammer

aber ich brauche es auf einer täglichen Basis zu tun , und ich Skript benötigen , dies zu erreichen
Klärbecken

3

Die AppHarbor-Bande hat damit zu kämpfen und eine temporäre Lösung entwickelt, die SQL Server-Verwaltungsobjekte und SqlBulkCopy verwendet.

Schauen Sie sich ihren Blog-Beitrag darüber an oder gehen Sie direkt zum Code .

Sie haben es nur mit AppHarbor getestet, aber es könnte sich lohnen, es sich anzusehen.


3

Die obigen Antworten sind einfach nicht korrekt. Ein SQL-Skript auch mit Daten ist keine Sicherung. Eine Sicherung ist eine BAK-Datei, die die vollständige Datenbank in ihrer aktuellen Struktur einschließlich Indizes enthält.

Natürlich kann eine BAK-Datei, die die vollständige Sicherung mit allen Daten und Indizes aus einer entfernten SQL Server-Datenbank enthält, auf einem lokalen System abgerufen werden.

Dies kann mit kommerzieller Software erfolgen, um eine Sicherungs-BAK-Datei direkt auf Ihrem lokalen Computer zu speichern. Diese erstellt beispielsweise direkt eine Sicherung von einer Remote-SQL-Datenbank auf Ihrem lokalen Computer.


Dazu benötigen Sie Sysadmin-Berechtigungen.
LarryBud

Richtig. Das Konto (Windows oder SQL Server), das für die Remoteverbindung mit der SQL Server-Instanz verwendet wird, benötigt Sysadmin-Berechtigungen, um die Sicherungs-Junks abzurufen und auf Ihrem lokalen Computer zu speichern. Das erwähnte Tool von FIDA Software verschlüsselt und komprimiert den Netzwerkverkehr vom und zum SQL Server, während die Backup-Junks abgerufen werden. Sobald Sie die Bak-Datei auf Ihrem Computer haben, können Sie sie an der gewünschten Stelle wiederherstellen.
Matthias

1

Wie Martin Smith sagte, müssen Sie, wenn Sie keinen Zugriff auf den Computer oder das Dateisystem haben, Tools von Drittanbietern wie Red Gate oder Adept verwenden, um einen Vergleich der Quell- und Zielsysteme durchzuführen. Mit den Tools von Red Gate können Sie die Objekte und Schemas UND die Daten kopieren.


1

Auf jede Weise können Sie eine Sicherung von einer Remote-SQL Server-Instanz auf Ihr lokales Laufwerk erstellen, sofern die folgende Bedingung erfüllt ist:

  1. Sie haben einen freigegebenen Ordner auf Ihrem lokalen Laufwerk.
  2. Auf den freigegebenen Ordner kann über die SQL Server-Box zugegriffen werden.

Verwenden Sie jetzt beim Angeben des Sicherungsbefehls den Pfad für freigegebene Ordner, wenn Sie die Festplattenoption angeben.


Und wie unterscheidet sich Ihre Antwort von der von @Vivek?
Martin Schröder

1

Probieren Sie einfach dieses aus:

1) Geben Sie einen Ordner mit voller Berechtigung auf Ihrem Computer frei

2) In Ihrem SQL Server: Systemsteuerung -> Verwaltungstools -> Dienste -> Klicken Sie mit der rechten Maustaste auf alle SQL-Dienste

Die Registerkarte "Anmelden" sollte mit Ihrem Domänenadministrator beginnen

3) Platzieren Sie im Wartungsassistenten des SQL Servers den Sicherungsspeicherort und den Ordner (\ yourcomputername \ sharedfoldernam).

Ich habe Remote-Backup auf 8 Server von SQL Server 2008 in unserer Firma durchgeführt


1

Ich bin erstaunt , dass niemand die Skript Backup - Lösung angeboten von erwähnt Ola Hallengren , die absolut nicht ein DB von einem entfernten Server zu einem UNC - Pfad in Ihrem Netzwerk kostenlos zur Sicherung gewährleisten (ich verwende es tatsächlich , wie ich Typ um eine Datenbank von einem Entwicklungsserver zu sichern, auf den ich keinen anderen Fernzugriff als über SSMS auf eine Freigabe auf meinem Entwicklungs-PC habe). Dies ist seit 2008 verfügbar und funktioniert unter SQL Server 2005 bis 2014.

Sie müssen sicherstellen, dass die von Ihnen eingerichtete Freigabe über ausreichend Zugriff verfügt: Ich erlaube der AD-Gruppe "Jeder" für die Dauer des Sicherungsprozesses das vollständige Lesen / Schreiben, da ich zu faul bin, um etwas Restriktiveres herauszufinden, aber das ist Persönliche Wahl.

Es ist gut genutzt, gut dokumentiert und sehr flexibel. Ich neige dazu, die Prozesse und die Protokollierungstabelle in ihre eigene kleine Dienstprogrammdatenbank zu stellen und sie dann zu starten. Vorausgesetzt, alles befindet sich in Ihrer AD-Domäne und nicht in dem Sinne entfernt, dass es sich auf einem Server befindet oder so, funktioniert dies sehr gut.

Ich entschuldige mich für das Hinzufügen zu einem sehr alten Thread, aber ich bin darauf gestoßen, als ich nach etwas anderem gesucht habe und dachte, es sei eine lohnende Ergänzung für alle, die nach diesem Thema suchen.


1

Für 2019 würde ich die Verwendung von mssql-scripter empfehlen, wenn Sie eine tatsächliche lokale Sicherung wünschen. Ja, es sind Skripte, aber Sie können sie so anpassen, dass sie alle gewünschten Daten enthalten, die alle Daten enthalten können. Ich habe ein Bash-Skript geschrieben, um automatisierte tägliche Backups mit diesem auf einem Linux-Computer durchzuführen. Kasse mein Kern:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

0

Ich könnte das einmal tun ... Um dies zu tun, muss eine Freigabe auf dem Remote-Server geöffnet sein. Dann können Sie das Backup direkt auf der Freigabe selbst platzieren, als am Standardspeicherort ...

Normalerweise nimmt der Administrator das Backup und teilt es uns in einem freigegebenen Ordner mit. Ich habe versucht, ob das funktioniert, wenn ich das Backup dort platziere. Es funktionierte.


0

Wenn Sie die Skripte unter SSMS generieren verwenden, klicken Sie auf die Schaltfläche Erweitert. Klicken Sie unter der Option "Skripte für die abhängigen Objekte generieren" auf "Wahr". Wenn Sie darauf klicken, werden alle Abhängigkeiten der einzelnen Objekte in der richtigen Reihenfolge ausgeschrieben.


True ist die Standardeinstellung in SSMS v17.8.1.
Chris Catignani

0

Einige Sicherungsprogramme von Drittanbietern ermöglichen das Festlegen der Dateiübertragung mit bestimmten Netzwerkberechtigungen. Dies ist sehr nützlich, wenn der SQL Server-Dienst unter einem eingeschränkten Konto ausgeführt wird und nicht über ausreichende Netzwerkberechtigungen verfügt. Versuchen Sie es mit EMS SQL Backup , das diese Aufgabe löst.


0

Zu diesem Zweck verwende ich Redgate Backup Pro 7- Tools. Sie können einen Spiegel aus einer Sicherungsdatei in einer Kachel erstellen an einem anderen Speicherort erstellen. und kann die Sicherungsdatei nach dem Erstellen im Netzwerk und auf dem Hostspeicher automatisch kopieren.


0

Erstellen Sie einen lokalen freigegebenen Ordner mit Lese- / Schreibrechten für "alle"

Stellen Sie eine Verbindung zur Zieldatenbank her, starten Sie die Sicherung und zeigen Sie auf die Freigabe wie unten

\ mymachine \ shared_folder \ mybackup.bak

(Versucht in Windows-Domänenumgebung)


0

Ich weiß, dass dies ein älterer Beitrag ist, aber ich habe festgestellt, dass die "einfachste" Lösung darin besteht, einfach mit der rechten Maustaste auf die Datenbank zu klicken und "Aufgaben" -> "Anwendung auf Datenebene exportieren" auszuwählen. Es ist möglich, dass diese Option nur verfügbar ist, weil der Server auf Azure gehostet wird (soweit ich mich erinnere, war das .bacpac-Format dort weit verbreitet).

Sobald dies erledigt ist, können Sie mit der rechten Maustaste auf die Liste "Datenbanken" Ihres lokalen Servers klicken und die "Datenebenenanwendung importieren" verwenden, um die Daten mithilfe der .bacpac-Datei auf Ihren lokalen Computer zu übertragen.

Nur trägt der Export könnte nehmen daran lange Zeit. Es dauerte ungefähr zwei Stunden, bis meine den Export beendet hatte. Der Importteil ist jedoch viel schneller.


-1

Wenn Sie sich in einem lokalen Netzwerk befinden, können Sie einen Ordner auf Ihrem lokalen Computer freigeben und als Zielordner für die Sicherung verwenden.

Beispiel:

  • Lokaler Ordner:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • Remote SQL Server:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.