IT-Consulting

IT-Consulting bedeutet für uns vor allem eins: Zu verstehen, wie Ihr Unternehmen tickt, um Sie mit verlässlichen Lösungen in Ihrer Wertschöpfung zu unterstützen. Erfahren Sie mehr..

IT-Consulting

Database Management & BI

RDBMS sind aus dem modernen IT-Betrieb nicht mehr wegzudenken. Wir entwickeln für Sie ein Konzept, das die technische Architektur, den ausfallsicheren Betrieb, als auch Compliance-konforme Backups abdeckt. Erfahren Sie mehr..

Business Intelligence

Citrix Virtualisierung

Ein Versprechen vorweg: Wir ändern mit Citrix-Produkten die Arbeit der IT-Abteilung radikal – zum Guten. Skalierbare Rechenleistung von der kleinen Arztpraxis bis zur Enterprise Corporation. Virtualisierung ist das Zauberwort. Erfahren Sie mehr..

Citrix Virtualisierung

Sicherheit Exchange & Active Directory

Ihre Active Directory ist historisch gewachsen oder wurde zeitweise nicht korrekt gepflegt? Sie wissen nicht, wer alles legitimierten Zugriff auf Ihr Netzwerk besitzt? Erfahren Sie mehr..

Sicherheit Exchange & Active Directory

Hosting

Besonders für kleine und mittelständische Unternehmen bieten Infrastructure-as-a-Service (IaaS)-Modelle kostengünstige Alternativen zur Anschaffung und Instandhaltung eigener Hardware. Erfahren Sie mehr..

Hosting

Softwareentwicklung

„Wir machen möglich, was Standardsoftware nicht kann.“ Business Web Applications - Individualentwicklungen sind unsere Stärken. Sie haben ein Anliegen, wir können Ihnen helfen. Erfahren Sie mehr..

Softwareentwicklung

MSSQL-Datenbank-Export und -Backup: Wie bei MySQL als Script mit INSERT-Befehlen


Normalerweise mache ich Backups von Microsoft-SQL-Server-Datenbanken mit „BACKUP DATABASE“, was eine Binärdatei der Datenbank erstellt. Weiter unten gehe ich auf diese Methode ein.
Was raus kommt, ist eine Datei, die nicht manuell bearbeitet werden kann. Auf dem Zielserver heißt es dann: „Friss oder stirb“. Die Datenbank wird, genauso wie sie ist, importiert.

In der Regel ist das eine gute Sache. Der Export und Import geht schnell, es gibt keine Zeichenkodierungsprobleme, es passt einfach.

Es gibt aber noch eine weitere Möglichkeit eine Datenbank zu exportieren: Es wird eine Textdatei erzeugt, die die SQL-Kommandos enthält um die Datenbank zu erstellen. Viele kennen diese Möglichkeit durch MySQL. Dort ist das der Standardweg für Exporte.

Warum?

Wann macht dieser Umweg Sinn?

  • Du willst Daten händisch vor dem Import nachbearbeiten
  • Du brauchst nur ein paar Daten (Reihen) aus der Quelldatenbank und möchtest diese in die Zieldatenbank (zusätzlich) einfügen.
  • Du möchtest nur bestimmte Tabellen exportieren.
  • Die Quelldatenbank hat eine höhere Version als die Zieldatenbank. Wenn der Quelldatenbankserver ein MS SQL Server 2014 ist und der Zielserver ein MS SQL Server 2012 ist, verweigert der SQL-Server mit folgender Fehlermeldung seinen Dienst:

    Restore of database ‚blog_test_db‘ failed. (Microsoft.SqlServer.Management.RelationalEngineTasks)

    ADDITIONAL INFORMATION:

    System.Data.SqlClient.SqlError: The database was backed up on a server running version 12.00.2000. That version is incompatible with this server, which is running version 11.00.3128. Either restore the database on a server that supports the backup, or use a backup that is compatible with this server. (Microsoft.SqlServer.SmoExtended)

    Wenn du keine Funktionen vom 2014er benutzt, kannst du die Datenbank über diesen Umweg trotzdem auf dem 2012er importieren.

Wie wird’s gemacht? (Export)

Rechte Maustaste auf die zu exportierende Datenbank, Tasks, Generate Scripts...

Wizard: Choose Objects

Hier kannst du auswählen, dass nur bestimmte Objekte / Tabellen der Datenbank exportiert werden sollen.

Wizard: Set Scripting Options: Advanced-Button beachten!

Die Optionen entsprechend auswählen. Wichtig ist eine Option, die hinter dem Button Advanced steckt…

Advanced Scripting Options

Die Option „Types of data to script“ beachten: Steht sie auf „Schema only“ wird nur die Datenbankstruktur exportiert. Will man auch die Daten, muss die Option auf „Schema and data“ gestellt werden.

Wizard: Summary

So sieht der Export vom MS-SQL-Server aus:

/* ... */
CREATE TABLE [dbo].[Users](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[Users] ON 

INSERT [dbo].[Users] ([Id], [Name]) VALUES (1, N'Rolf')
INSERT [dbo].[Users] ([Id], [Name]) VALUES (2, N'Adam')
INSERT [dbo].[Users] ([Id], [Name]) VALUES (3, N'Michael')
/* ... */

Wie wird’s wieder importiert?

Ich empfehle dir die erzeugte SQL-Datei anzusehen. Eventuell brauchst du einige Optionen nicht oder sie müssen für den Zielserver angepasst werden (Beispielsweise die Pfadangaben).

Wenn die Scripte nicht riesig sind, kann das erzeugte Script per Copy and Paste in ein Abfragefenster der Zieldatenbank eingefügt und dort ausgeführt werden.

Bei größeren Datenmengen kann die SQL-Datei auch direkt ausgeführt werden. Dazu über die Kommandozeile folgende Zeile ausführen:

sqlcmd -i C:\Users\ds\Documents\script.sql

Normales Backup

Zum Abschluss erkläre ich kurz, wie das normale Backup funktioniert, das ein Binärdateiabbild der Datenbank erzeugt.

Rechte Maustaste auf die zu exportierende Datenbank, Tasks, Back Up...

Screenshot: Back Up Database

Hier natürlich wieder die Optionen beachten, insbesondere das Ziel (Destination).

Nach dem Klick auf „OK“ wird das Backup erstellt.

Alternativ kann auch folgender SQL-Befehl verwendet werden:

BACKUP DATABASE [SampleDb3] TO  DISK = N'D:\Tmp\blog\SampleDb3.bak' WITH NOFORMAT, NOINIT,  NAME = N'SampleDb3-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

Beachte dabei folgendes:

  • Das wird auf dem Server ausgeführt. Die Pfadangabe bezieht sich also auf das Dateisystem des Servers.
  • Bei produktiven Datenbanken beachten, dass bei einem Full-Backup die Kette der Transaktions-Logs gelöscht wird, weil der Server davon ausgeht, dass ein volles Backup erstellt wurde und die Transaktions-Logs nicht mehr benötigt werden. Daher bei produktiven Datenbanken das Vorhaben unbedingt mit dem Admin, der die Datenbank und das Backup betreut, absprechen.

Restore / Import / Wiederherstellung des Backups

Um die erzeugte .bak-Datei wieder einzuspielen, musst du wie folgt vorgehen:

Rechte Maustaste auf Databases, Restore Database...

Screenshot: Restore Database. Device anwählen, ... drücken

Select backup devices: Add drücken um die Datei auszuwählen

Screenshot: Restore Database. Mit OK den Import starten

Alternativ geht natürlich auch ein SQL-Kommando:

RESTORE DATABASE [SampleDb3] FROM  DISK = N'D:\Tmp\blog\SampleDb3.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5

Bei Interesse mache ich über das Backup / Restore noch einen separaten, ausführlichen Blog-Beitrag.


Schreibe einen Kommentar