Jump to content

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


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?

 

Link zu diesem Kommentar

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.microsoft.com/de-de/library/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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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

 

:

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...