Zum Inhalt wechseln


Foto

Wie exportiert/imporiert man richtig eine Datenbank in MS SQL Server?

Windows Server 2008 MS SQL

  • Bitte melde dich an um zu Antworten
12 Antworten in diesem Thema

#1 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 22. Januar 2014 - 10:35

Wieder mal bin ich als Oracler auf die Hilfe von kompetenten MS SQL Server-Anwendern und Admins angewiesen, weil ich hier vermutlich nicht richtig verstehe und nicht so hinbekomme. wie ich mir das vorstelle.

 

Frage: Wie exportiere und importiere ich richtig eine Datenbank in  MS SQL Server (in meinem Fall 2008R2), um nur den Datenbestand von einem System auf den anderen zu kopieren?

 

Hintergrund: Wir DB-Admins müssen ja sehr oft Datenbanken klonen und kopieren, um beispielsweise mehrer Test- und Produktiv-Datenbanken zu befüllen.

 

Es gibt zwar oftmals ein DB-Cloning der DB-Hersteller, oder man kann per Backup-/Recovery. Das ist aber aus diversen Gründen nicht zu empfehlen, weil hier alle internen Vorgänger Datenbank, System-IDs, Zähler, Statistiken usw. mit übertragen werden. Genau deshalb verwende ich bei Oracle-DBs schon seit Jahren Datapump bzw. bis Oracle 9i imp/exp, und bei MySQL mysqldump. Man exportiert sauber den Datenbestand raus, kopiert diesen in eine neu installierte Datenbank.

 

Ich habe nun festgestellt, daß ein Kunde, den wir in diesem Bereich ebenfalls betreuen, Datenbanken per Backup-/Recovery kopiert, was hier sehr schnell funktioniert. Also kam ich auf die glorreiche Idee, daß es im SQL Server-Umfeld doch genau so einfach gehen müßte, Daten zu kopieren.

 

MIt Datenbank meine ich übrigens nur die Datenbanken innerhalb einer MS-SQL-Instanz, was in MySql und Oracle als Schema bezeichnet wird.

 

Meine Versuche:

 

Der Weg über den SQL-Server-Import/Export.Assistenen und den direkten Austausch mit dem SQL Server Native Client 10.0 funktioniert nicht, da die Kommunikation zwischen den Maschinen nicht funktioniert. Hier habe ich natürlich den SQL-Server-Browser in den Einstellungen auf Netzwerk umgestellt, was jedoch zu keinem Erfolg führte. Auch das Export über ein Flatfile funktioniert nicht, da man hier nur einzelne Tabellen (warum?) auswählen kann. Das exportieren in eine Excel-Datei ist ebenfalls gescheitert, da hier viele Datenfehler in der Datenbank gemeldet werden. Das Programm bcp kann anscheinend auch nur einzeilen Tabllene exportieren, aber nicht die gesamte Datenbank.

Bleibt nur noch das direkte Exportieren in SQL-Statements. Hier werden jedoch die Instanz- und Datenbanknamen direkt in die Statements reingeschrieben. Weiterhin werden auch feste Pfade mit Dateiennamen erzeugt! Das heißt, die Scripte würden bei Ausführung direkt die gleiche Instanz erzeugen, was auch nicht Sinn der Sache ist. Da die Dateien über 3,6 GB groß werden, ist eine nachträgliche Bearbeitung so einfach nicht möglich. Verwendet man ein Tool (sed.exe), darf die Datei nicht, wie Default, als Unicode angelegt sein, sondern muß im ANSI-Format erzeugt werden. Dann hat man zwar immer noch eine ca. 1.8 GB große Datei, diese läßt sich dann aber mit dem genannten Tool in der Weise bearbeiten, so daß die Dateipfade, -namen, Instanz und Datenbankname modifiziert werden können. Das Import der Struktur geht recht fix, aber der Import der Daten dauert aber sehr lange, da alle Statements per Insert per 100 Anweisungen pro Sekunde geschrieben werden. Ein Kopieren der Datenbank über das Backup geht wesentlich schneller, hier sind mehrere Gigabyte in Minuten erledigt.

 

Ich habe mehrere MS-SQL-Bücher (All-In-One Desk Reference For Dummies, Wiley - Microsoft - SQL - Server 2008 Bible,  Sams Microsoft SQL Server 2008 R2 Unleashed) studiert bzw. im Netz (MS-SQL-Online) und auf Youtube nachgeschaut. Die meisten Testfälle beschränken sich auf das Clonen/Kopieren auf einer Datenbank auf einer Maschine. Insgesamt sind alle Beschreibungen, die ich gefunden habe, für mich sehr unbefrieidigend.

 

Frage: Wie exportiere ich nun die Datenbank so in ein Flatfile, so daß ich sie variabel und flexibel schnell (!) in jede weitere Datenbank importieren kann? Wie gesagt, mein Vorbild ist Oracle Datapump bzw. mysqldump. Mit dem Export in ein SQL-Script habe ich zwar eine Lösung, die aber wegen der Nachbearbeitung vor dem Import unbefriedigend ist. Zudem dauert der Datenimport sehr sehr lange. Oder kann ich irgendwie ein Backup der MS SQL Datenbank in der Weise vornehmen, so daß sie wie eine neu installierte Datenbank in einem neuen System wirkt?

 



#2 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 22. Januar 2014 - 10:39

Aus einem Backup kannst du eine neue DB erstellen. Du musst den Restore nicht in die selbe DB fahren.


Stop making stupid people famous.


#3 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 22. Januar 2014 - 10:55

Das ist schon klar. Jedoch kopiere ich doch alle internen Zustände der Ursprungsdaten mit? Genau das will ich doch gar nicht.



#4 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 22. Januar 2014 - 11:52

Welche Internen Zustände?


Stop making stupid people famous.


#5 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 22. Januar 2014 - 13:54

In Oracle steckt in einem Backup die gesamte systeminternen Dinge wie SYSTEM, SYSAUX, UNDO, TEMP, REDO. Und darin stecken eben Dinge wie die SCN (System Change Number), Statisitken usw. MS SQL Server wird das ja bestimmt ähnlich machen.



#6 LiveeviL-Odw

LiveeviL-Odw

    Newbie

  • 23 Beiträge

 

Geschrieben 22. Januar 2014 - 16:47

Hi mst,

Da gebe ich dir Recht bei Oracle ist es so,

Beim MSSQL Server verhält sich ein Teil etwas anders. ( Ich gebe hier nur einen groben Abriss, würde sonst den  Rahmen sprengen)

Und zwar die LSN = SCN Nummern die du in der Datenbank siehst sind Systemview´s fangen mit sys. an.

 

Diese Views "auch wenn es die Gui einem vortäuscht" liegen nicht in der Datenbank wo man die aufruft. sondern in einer Systemdatenbank die für den Anwender "unsichtbar" ist sie wird von Microsoft für interne zwecke benötig. Sie heisst Ressourcesystemcol hier nachzulesen http://technet.micro...y/ms190940.aspx .

Die Daten wie zb die LSN usw werden beim restore auf einem andern Server nicht!!! übernommen sondern an das vorhandene System angepasst bzw. geleert.

 

Bevor jetzt der Aufschrei hier im Forum groß ist ;-) Das Stimmt und ist im Technet forum nachzulesen , (noch besser selber testen mit einer DAC Verbindung kann man sie direkt ansprechen).

Es werden nur User created Statistiken mitgenommen. Die Automatisch  vom SQL Server angelegten werden nicht mit Übernommen.

Die Administrativen Schemas wie es die bei Oracle gibt liegen beim SQL Server teils in der Oben benannten Datenbank und in der Masterdatenbank teils auch in der MSDB.

 

Also keine Sorge mit Backup und Recovery hast du eine "Saubere" Kopie ohne SYS schema :-)

Bitte jetzt nicht schema vom MSSQL mit Oracle verwechseln.

 

p.s

Bin unter anderm auch Oracle DBA

 

Viele Grüße

Alex


Bearbeitet von LiveeviL-Odw, 22. Januar 2014 - 16:55.

MS SQL-Server DBA

 


#7 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 22. Januar 2014 - 16:51

Wunderbar, danke sehr. Das ist doch mal eine Info, mit der ich was anfangen kann (im Gegensatz zu den Büchern und im Netz).

 

Frage, hast Du mal eine DB per SQL-Server-Import/Export.Assistenen und den direkten Austausch mit dem SQL Server Native Client 10.0 auf 2 verteilten Datenbanken gemacht? Und mal in ein Flatfile exportiert? Warum kann ich hier nur eine Tabelle, und nicht mehrere angeben?


Bearbeitet von mst@cimt, 22. Januar 2014 - 16:52.


#8 LiveeviL-Odw

LiveeviL-Odw

    Newbie

  • 23 Beiträge

 

Geschrieben 22. Januar 2014 - 17:07

Wunderbar, danke sehr. Das ist doch mal eine Info, mit der ich was anfangen kann (im Gegensatz zu den Büchern und im Netz).

 

Frage, hast Du mal eine DB per SQL-Server-Import/Export.Assistenen und den direkten Austausch mit dem SQL Server Native Client 10.0 auf 2 verteilten Datenbanken gemacht? Und mal in ein Flatfile exportiert? Warum kann ich hier nur eine Tabelle, und nicht mehrere angeben?

 

Der Import Export Manager ist nur eine Hilfe für , pass auf jetzt kommt´s,  Zitat Microsoft: Zum Importieren oder Exportieren von einzelnen Datenbankobjekten.

du kannst dir zwar ein Script bauen was du in den Wizard eingeben kannst das wäre aber IT zu Fuss

Ich habe und würde mir im SSiS selbst was zusammen bauen. Der Import und Export Wizard ist zwar nichts anderes aber nur in Abgespeckter form.

Mach BIDS auf und Klicker dir ein Packt zusammen. 

Die andere Möglichkeit die du hast ist der enthaltene DB Copy Manager zu nutzen. Rechte Maustaste auf Management Copy Database auch wieder eine Abgespeckte SSIS Oberfläche..

Ich hoffe ich konnte helfen.

 

VG

Alex

 

:


MS SQL-Server DBA

 


#9 Doso

Doso

    Board Veteran

  • 2.508 Beiträge

 

Geschrieben 22. Januar 2014 - 20:16

Für eine kleine Anzahl von Datenbanken klassisch per Backup und Restore, entweder über cmd, powershell, T-SQL oder Management Studio. Alternativ Datenbank vom alten Server abhängen und die LDF/MDF umkopieren wenn der alte Server sowieso abgeschaltet wird geht das wohl am Schnellsten. Dann ggf. Logins auf neuem Server erstellen/ anpassen, hier gibt es auch Skripte. Beides sauber, supported und in verschiedene Microsoft Anleitungen beschrieben. Für eine größere Anzahl an Datenbanken per Backup/Restore habe ich auch noch keine gute Lösung gefunden.



#10 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 23. Januar 2014 - 11:40

Alternativ Datenbank vom alten Server abhängen und die LDF/MDF umkopieren wenn der alte Server sowieso abgeschaltet wird geht das wohl am Schnellsten.

Kann man eigentlich diese Datendateien, welche für die Datenbank verwendet werden, auf eine neue Instanz kopieren, und diese dann einfach umbennenen, bzw. dann auch die Datenbank umbenennen?



#11 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 23. Januar 2014 - 12:19

Beim attachen (wie auch beim Restore) kann man für die Datenbanken gleich einen neuen Namen vergeben. Da braucht man dann nichts danach umbenennen.


Stop making stupid people famous.


#12 mst@cimt

mst@cimt

    Newbie

  • 9 Beiträge

 

Geschrieben 23. Januar 2014 - 17:05

Na, die Datendateien haben doch auch den Namen der Datenbank drin, die müßten man doch vorher umbenennen, damit es wieder konsistent ist.



#13 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 23. Januar 2014 - 17:13

Ja. Und bei einem Restore / Attach kann man diesen ändern.

Intern wird das alles vom SQL Server erledigt.


Stop making stupid people famous.




Auch mit einem oder mehreren der folgenden Tags versehen: Windows Server 2008, MS SQL