Wie lässt sich eine Instanz in SQL 2008 am effektivsten duplizieren?

14

Wir haben eine einfache Datenbankinstanz mit gerade genug Daten in den Datenbanken, um sie nützlich zu halten, und wir können sie zu Demonstrationszwecken verwenden. Ich möchte eine Kopie davon auf meinem Laptop ablegen, damit ich sie bei der Arbeit mit Entwicklern verwenden kann Ich bin nicht im Büro. (Die regulären Dev-Datenbankinstanzen haben ungefähr 150 GB, diese eine Instanz hat 3 GB)

Was ist die am besten wiederholbare / skriptfähige Methode zum Wiederherstellen der Instanz auf meinem Laptop? Ich bin mir sicher, dass ich das Installationsprogramm für SqlServer2008 erneut durchlaufen und eine Instanz einrichten muss, aber danach ... denke ich, ich möchte meine alten Datenbanken etwa jeden Monat löschen können und Kopieren Sie das gesamte neue Material auf meinen Laptop, da sich meine Instanz weder auf dem einen Demosystem noch auf dem Laptop ändert. Die Datenbanken selbst werden jedoch mit Aktualisierungen der Sprocs und dergleichen aktualisiert.

Ich habe mir überlegt, alle "drop database-files; add database-files {path}" per Skript zu schreiben und sie in einer Art ausführbaren Batch-Datei zu speichern, und dann kann ich "drop, delete, copy, add", aber ich frage mich, ob es das gibt war ein besserer Weg als nur xcopy und batch?

Ich versuche dies billig zu machen (versuchen wir nicht immer, Dinge billig zu machen), daher bin ich nicht besonders an RedGate-Produkten oder Ähnlichem interessiert. Ich möchte etwas, das ich einfach in einem Texteditor für mich selbst pflegen kann.

jcolebrand
quelle
Handelt es sich um eine einzelne Datenbank oder SQL Server-Instanz mit mehr als einer Datenbank? Ich gehe davon aus, dass Sie SQL Server auf Ihrem Laptop und Ihrer Entwicklungsmaschine installiert haben und über eine Datenbank verfügen. In diesem Fall können Sie Backup und Restore verwenden. Entwicklungsmaschine db sichern, auf Laptop kopieren und wiederherstellen, umgekehrt ... macht das Sinn?
CoderHawk
ist es SQL Server Express Edition? oder Standard? SSIS ist eine gute Option für solche Szenarien, die leider nicht in Express- und Web-Editionen verfügbar sind.
CoderHawk
Sorry @Sandy ~ Es ist SQL Dev 2008. Ich habe aufgrund von MSDN Zugriff auf so ziemlich alles, was Sie sich vorstellen können.
Jcolebrand
Der Fragentitel ist wenig verwirrend. "Wie lässt sich eine | Instanz | in SQL 2008 am effektivsten duplizieren?" - Instanz oder Datenbank?
CoderHawk
@ Sandy ~ "Instanz" ... in der Tat, ich will das Ganze.
Jcolebrand

Antworten:

4

Sie haben den Nagel auf den Kopf getroffen: Kopieren Sie die Dateien. Ich habe das gut genutzt.

Ich würde sagen, Sie müssen "billig" definieren, um Zeitinvestitionen zu berücksichtigen, um eine Lösung ohne xcopy vorzubereiten

gbn
quelle
3

Ich bin mir nicht sicher, ob dies hilft, aber wir verwenden eine Reihe von Skripten, um eine Produktionsdatenbank zu "bereinigen" und für den Missbrauch durch die Entwicklung vorzubereiten. Wir nehmen alle großen Tabellen mit einer datetime-Spalte und erstellen die Tabelle nur mit den Daten des letzten Jahres neu. Ab einer vollen Datenbank von ca. 200 GB stehen ca. 40 GB für die Entwicklung zur Verfügung. Hauptsächlich generieren wir dynamische Skripte zum Erstellen von BCP-Dateien für jede Tabelle, erstellen die Tabelle neu (einschließlich zugehöriger Einschränkungen) und fügen dann nur Daten des letzten Jahres als Masseneintrag ein.

Möglicherweise gibt es Tools, um dies zu tun, aber unser Shop ist billig :-).

Marian
quelle
Ja, wir gehen die BCP-Route für eine Menge Dinge, also verstehe ich, was Sie sagen, und einiges davon abzuschneiden wäre gut, aber ich habe bereits die ungefähr 3 GB an Daten, die ich brauche, also bin ich nicht wirklich suchen, um dort mehr hinzuzufügen. Ich möchte nur die gesamte Instanz kopieren und herausfinden, dass es eine Möglichkeit gibt, dies immer wieder zu tun. Aber ansonsten denke ich, ich bin auf dem gleichen Stand wie das, wovon du sprichst, nur ein kleineres Problem.
jcolebrand
Also alle Schritte stapelweise wiederholen :). SQL hat Batch-Parameter und Sie können Batch-Dateien mit SQL-Dateien kombinieren und erhalten ein schönes Paket. Ich habe ein benutzerdefiniertes Protokollversand-Paket (dumb) erstellt, das auf verschiedenen Domänen funktioniert, und die gesamte DB-Vorbereitung erfolgt in cmd / sql-Dateien. Sie können eine benannte Instanz nur für Ihre Verwendung erstellen und dort den Dienst starten / stoppen, die Datenbank wiederherstellen, bereinigen, vorbereiten, sichern und an einen bestimmten Ordner senden. Vielleicht könnten einige Arbeiten in Powershell schneller erledigt werden. Aber ich kenne mich damit nicht aus.
Marian
yep das ist die idee;)
jcolebrand
@jcolebrand - Vielleicht würde ein Tool wie Norton Ghost oder Clonezilla helfen? Sie brauchen es, um die Backup-Ordner der Produkte irgendwo auf Ihren Spielplatz zu kopieren, und dann machen Sie dort hinten den ganzen Spaß (restore..trim ... etc). Sie müssten die Kopieraktionen nicht skripten und Sie werden nur den SQL-Teil behandeln :).
Marian
oooooh das könnte nützlich sein. Neue Wege der Überlegung.
Jcolebrand
0

Am einfachsten können Sie Ihr Schema auf diese Systeme aktualisieren, indem Sie ein Tool wie Red Gate SQL Compare oder Embarcadero DB Change Manager verwenden.

Es gibt eine Reihe anderer Tools, die wahrscheinlich den gleichen Schemavergleich durchführen und Ihnen sogar die DDL zum Aktualisieren Ihres Datenbankschemas bereitstellen können.

Optionen

  1. Verwenden Sie ein Drittanbieter-Tool
  2. Datenbanksicherung und -wiederherstellung - Möglicherweise müssen Sie auf einer Staging-Instanz wiederherstellen, um Daten zu löschen (aufgrund von Speicherplatzbeschränkungen auf dem Laptop).
  3. Schreiben Sie Ihren eigenen Datenbank-Scripter mit SMO und erstellen Sie einfach einen Job, der die Objekte ausschreibt. Erstellen Sie dann Ihr Schema jeden Monat und jedes Mal neu, wenn Sie es benötigen. Verwenden Sie dann SSIS, um Daten in die neuen Objekte zu laden.
johndacostaa
quelle
Wie funktioniert die Funktion "Datenbanksicherung und -wiederherstellung" für die Instanz? Ich möchte die Daten in diesen Tabellen behalten, da es sich um einen vollständigen Datensatz handelt, der nur kleiner als die Produktion ist.
jcolebrand
SSIS würde mich wahrscheinlich das tun lassen, was ich brauche, aber ich weiß nicht genug darüber. Ich sollte weiter nachforschen.
jcolebrand
@jcolebrand - Ich schlug Backup Restore vor, indem ich einfach überlegen musste, wie Daten von Ihrem Live-System auf Ihr Demo-System übertragen werden sollen, wenn Sie beispielsweise Spalten hinzufügen. Dies hat jedoch den Nachteil, dass eine Wiederherstellung und dann eine Datenbereinigung vor einer weiteren Sicherung und Wiederherstellung / Trennung und Verbindung erforderlich ist.
Johndacostaa