Zum Inhalt springen

SQL Restore mit MOVE Befehl


Schneeherz

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...