Kopieren Sie die SQL Server Express-Datenbank auf einen anderen Computer

8

Ich erweitere morgen das Backend der Access-App eines Kunden und muss mit einem Plan für ein bestimmtes Problem mit diesem Client fertig sein. Der Chef muss in der Lage sein, die Datendatei regelmäßig aus dem Büro, in dem sich der SQL Server befindet, zu entfernen (normalerweise monatlich) und statistische Analysen der Daten durchzuführen.

Ich habe mir Einfachste Möglichkeit, eine komplette SQL Server-Datenbank von einem Server auf lokalen SQL Express zu kopieren , und die Lösungen funktionieren in diesem Szenario nicht, weil:

  1. kann keine einmalige Lösung (Database Publishing Wizard) verwenden, da dies skriptfähig sein muss.

  2. kann keine Methode verwenden, die davon abhängt, dass die beiden Computer vernetzt sind, da dies keine Option ist - Daten müssen über USB-Stick übertragen werden (also keine Replikation).

  3. kann keine Methode verwenden, die von der Ausführung von SQL Server-Verwaltungstools von der Serverkonsole oder von der Arbeitsstation für die Sicherung abhängt.

  4. kann für die Analyse keine direkte Verbindung zur SQL Server-Datenbank herstellen, da die Daten an andere Speicherorte übertragen werden müssen.

Was ich glaube, ich brauche eine Möglichkeit, ein Skript aufzurufen, das eine Sicherungsdatei erstellt, und dann das Ergebnis auf das USB-Laufwerk zu kopieren. Ich brauche dann ein zweites Skript, um die Sicherungsdatei vom USB-Laufwerk zu kopieren und auf dem anderen SQL Server wiederherzustellen.

Die zu transportierenden Daten sind schreibgeschützt (oder alle vorgenommenen Änderungen müssen nicht zum Hauptserver zurückkehren), und die Daten werden am zweiten Speicherort nicht aktualisiert. Es ist derzeit mit einer einfachen alten Batch-Datei gescriptet, um die Backend-MDB-Datei zu kopieren, und ich brauche etwas, das für den Benutzer so einfach ist.

Es kann keine Abhängigkeiten von beispielsweise Powershell (von SQL Server Management Studio) haben, da ich nicht möchte, dass es auf dem Computer installiert werden muss, auf dem der Benutzer das Skript ausführt (es gibt eine Hälfte Dutzende Workstations, von denen das Skript ausgeführt werden soll, und ich möchte nicht auf all diesen installieren müssen.)

Ich werde den Backup-Agenten einrichten, um jeden Abend ein Backup zu erstellen, damit ich diese Datei vielleicht kopieren kann, ohne das Backup vor dem Kopieren starten zu müssen. Daher muss ich möglicherweise nur die Wiederherstellung auf dem Zielcomputer ausführen.

Gedanken, Vorschläge, Hinweise?

    
David-W-Fenton 31.08.2010, 18:44
quelle

4 Antworten

12

Sie sollten auf jeden Fall in der Lage sein, so etwas zu erstellen.

Ein Teil wäre ein T-SQL CREATE BACKUP -Skript als ein .sql -Skript und führt es aus einer Standard-Windows-Stapel- ( *.bat ) oder Befehls- ( *.cmd ) Datei mit der Befehlszeile sqlcmd aus Werkzeug.

Das wäre etwa so:

backup.sql

%Vor%

Der zweite Teil wäre eine .sql-Datei mit einem T-SQL RESTORE -Skript, das im Grunde genommen die Daten von einem bestimmten Speicherort auf der Festplatte liest und sie dort auf der SQL Server-Instanz wiederherstellt.

restore.sql

%Vor%

Natürlich müssen Sie diese Namen und Pfade an Ihre eigenen tatsächlichen Anforderungen anpassen - aber das sollte Ihnen nur einen Hinweis geben, wie Sie mit diesem Unterfangen beginnen können.

Um eines dieser .sql-Skripte mit sqlcmd auszuführen, benötigen Sie etwas wie:

%Vor%

z.B.

%Vor%

Ressourcen:

marc_s 31.08.2010, 18:57
quelle
2

Ich hatte das gleiche Problem, indem ich db zwischen Produktion (Server) und Test-Entwicklung (lokal an einem anderen Ort) transportiere und auch die fertige db zum gehosteten Server transportiere.

Wie sich herausstellte, kann ich die .MDF einfach selbst transportieren.

  1. Stellen Sie sicher, dass die Ziel-DB diese Datenbank nicht angehängt hat, löschen Sie sie zuerst in SSMS.
  2. Verschieben Sie die .MDF-Datei selbst (ohne die Protokolldatei).
  3. Am Zielort Standard c: \ Programme ... sql .. \ DATA stellen Sie sicher, dass alle früheren Instanzen von MDF und LDF verschoben oder gelöscht werden - wenn dort eine .ldf angezeigt wird, wird sie verwirrt.
  4. Wählen Sie in SSMS zum Anhängen. Drücken Sie Hinzufügen, wählen Sie die .mdf.
  5. An dieser Stelle wird in der Box rechts unten angezeigt, dass eine MDF und LDF angehängt sind und dass die LDF fehlt. Klicken Sie auf die LDF und drücken Sie die ENTFERNEN-Taste.
  6. Jetzt wird die MDF angehängt und eine neue / leere LDF wird hinzugefügt.

Ich mache das die ganze Zeit; Funktioniert perfekt - erspart den Transport eines großen .ldf. (Ich verwende oft dropbox.com anstelle eines USB-Sticks und verschlüssele die Datei zuerst mit PKZIP / SecureZip.)

Ich bin mir nicht sicher, was passiert, wenn Sie die MDF mit dem gestarteten Server kopieren, obwohl ich sie vor dem Kopieren nicht abbringe. Ich bin mir nicht sicher, wie man dieses skriptfähig macht - der Anhang kann skriptfähig sein, aber ich bin mir nicht sicher, ob ich die .LDF löschen soll, bevor ich fortfahre.

Sie könnten den Server skripten, um eine Snapshot-Kopie der Datenbank zu erstellen, und diesen MDF dann transportieren, wenn er weiß, dass er nicht aktualisiert wurde.

Eine andere Idee - schreiben Sie ein Programm, um alle Datensätze in eine SQL-Server-Compact-Edition-Datei einzufügen und diese zu transportieren? Ich habe es nicht ausprobiert, aber lies darüber.

    
pghcpa 08.09.2010 22:50
quelle
1

Nur ein Gedanke, aber wenn er jetzt mit einer Kopie einer MDB-Datei mit all den Daten nur für sich selbst weggeht, dann warum nicht so weitermachen. Sie könnten einfach alles mit einer Abfrage für jede Tabelle im Zugriff tun.

Wenn Sie Ihre MDB "Reporting" mit den verknüpften Tabellen "tblFoo_LINKED" und einer lokalen Tabelle namens "tblFoo" einrichten, können Sie einfach einen Teil des VBA-Codes ausführen, der alle Tabellen durchläuft und etwas wie

%Vor%

Die SQL Server-Backup-Wiederherstellung wäre immer noch die Option, die ich wählen würde, aber ich würde nur etwas anderes anbieten, was Ihren Anforderungen entspricht

    
Kevin Ross 01.09.2010 08:01
quelle
0

Warum nicht weiter die gesamte Datenbankdatei kopieren? Dies liest sich wie eine klein genug Operation, um mit einer momentanen Pause wegzukommen: Sie könnten die Datenbank verkleinern, trennen und kopieren Sie die Dateien direkt. Auf dem Zielsystem können Sie die SQLExpress-Datenbank mit dem Dateinamen anfügen in der Verbindungszeichenfolge.

    
Steve 31.08.2010 19:04
quelle