Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SQL Restore mit MOVE Befehl

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich bin momentan dabei mich ein bisschen in SQL Datenbanken einzuarbeiten und stehe jetzt vor folgendem Problem:

Ich habe ein kleines Programm, das auf Basis einer Backup-Datei eine Datenbank zurücksetzen soll bzw. die Datenbank aufbauend auf der Backup-Datei erstellen soll, falls diese noch nicht existieren sollte (also wenn quasi eine Datenbank unter einem anderen Namen kopiert werden soll oder lokal gezogen wird, wo sie noch nicht besteht).

Das alles soll über Code (Java, IntelliJ) und nicht direkt im Management Studio stattfinden. Dafür nutze ich PreparedStatements, um die SQL Befehle im Code zu verwenden.

Ich gehe folgendermaßen vor:

1. Ich erstelle eine Verbindung zur Datenbank. Funktioniert.

2. Ich überprüfe anhand des Datenbanknames in der Backup-Datei, deren Pfad ich aus einer Konfiguration hole, ob die Datenbank auf dem Server existiert oder nicht. Funktioniert.

3. Existiert sie nicht, soll sie mit folgendem SQL-Befehl erstellt werden:

String sql = "use master; restore database [dbname] from DISK=[backup-File Pfad] with file=1, move N'[dbname]' to N'[gewünschter Pfad für MDF Datei]', move N'[dbname]_LOG' to " + N'[gewünschter Pfad für LDF Datei]', nounload, replace";

Und hier liegt dann das Problem. Obwohl ich MOVE verwende und neue (bereits existierende) Pfade für die MDF und LDF Dateien angebe, sucht das Programm immer noch unter dem Pfad des Servers, auf dem die backup-Datei erstellt wurde.

Bsp:

Ich gebe einen Pfad an wie "D:\Programme\Microsoft SQL Server\...\DATA" (und der Pfad existiert auch), aber das Programm liefert folgende Fehlermeldung:

"Directory lookup for the file "D:\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\[dbname].mdf" failed with the operating system error 3(Das System kann den angegebenen Pfad nicht finden.)."

Es ist klar, dass er den Pfad nicht finden kann, weil er eben bei mir lokal auch nicht existiert und noch von dem Server übernommen wurde, auf dem das Backup-File erstellt wurde. Mir ist aber nicht bewusst, weshalb das so ist, weil ich eigentlich dachte, dass genau dafür der MOVE Befehl da ist. Damit man nicht mehr auf den alten Pfad zugreift.

Ich habe im Internet stundenlang alles durchsucht und bin auch immer nur auf die Lösung mit dem MOVE Befehl gestoßen, der nur eben leider bei mir nicht funktioniert.

Wenn ich die Befehle direkt im SQL Server Management Studio ausführe, kommt diese Fehlermeldung:

"Logical file '[dbname]' is not part of database '[dbname]'"

Ich nutze den SQL Server 2014 auf Windows 7...

Hat jemand eine Ahnung, weshalb es nicht funktioniert? Habe ich vielleicht etwas übersehen oder den Befehl falsch geschrieben?

Wenn ich den alten Pfad händisch anlege, funktioniert auch alles, nur ist es eben Voraussetzung, dass dieser Pfad nicht existieren muss.

Ich habe mir auch überlegt, ob ich den alten Pfad einfach anlege, wenn er nicht existiert, weil das wohl die Lösung mit weniger Aufwand ist. Allerdings trat da dann das Problem auf, dass ich keine Ahnung habe, wie ich auf diesen Pfad zugreifen kann. Mit Debuggen komme ich nicht weit, weil es mir über den Pfad keinerlei Informationen gibt und ich den Pfad letztendlich nur in der Fehlermeldung sehe und nicht nachvollziehen kann, woher er kommt. Wenn das jemand weiß, wäre das auch schon sehr nützlich ;)

Ansonsten hoffe ich, dass sich irgendjemand in der Materie auskennt und mir helfen kann.. :)

Vielen Dank im Voraus!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.