2011-01-07 15 views
3

Ich versuche, eine Datenbank aus einer Sicherungsdatei mit SMO wiederherzustellen. Wenn die Datenbank noch nicht existiert, funktioniert es gut. Wenn die Datenbank jedoch bereits existiert, bekomme ich keine Fehler, aber die Datenbank wird nicht überschrieben.SMO Wiederherstellung der SQL-Datenbank wird nicht überschrieben

Der "Restore" -Prozess dauert immer noch genauso lange, also sieht es so aus, als würde es funktionieren und eine Wiederherstellung machen, aber am Ende hat sich die Datenbank nicht geändert.

Ich mache das in Powershell mit SMO. Der Code ist ein bisschen lang, aber ich habe es unten eingefügt. Sie werden feststellen, dass ich $restore.ReplaceDatabase = $true eingestellt habe. Außerdem verwende ich einen try-catch-Block und berichte über mögliche Fehler (hoffe ich), aber keine werden zurückgegeben.

Irgendwelche offensichtlichen Fehler? Ist es möglich, dass ich keinen Fehler melde und dass er mir verborgen bleibt?

Danke für jede Hilfe oder Beratung, die Sie geben können!

+0

Ich bin nicht vertraut mit SMO, aber ich fand dies (http://www.sqldbatips.com/showarticle.asp?ID=40) Beispielcode für Wiederherstellungen. Vergleichen Sie vielleicht Ihren Code damit. Ich habe bemerkt, dass du "$ true" sagst und nicht "wahr" ... nicht sicher, ob das das Problem ist. – IamIC

+1

$ true ist die korrekte PowerShell-Repräsentation eines booleschen Werts. –

Antwort

4

Ich habe das gleiche Problem, ich versuche, die Datenbank von einem zurück vom gleichen Server, aber mit einem anderen Namen wiederherzustellen. Ich habe den Wiederherstellungsvorgang profiliert und fügt die 'with move' nicht mit den verschiedenen Dateinamen hinzu. Aus diesem Grund wird die Datenbank wiederhergestellt, wenn die Datenbank nicht existiert, sie schlägt jedoch fehl. Es gibt ein Problem mit der .PhysicalFileName -Eigenschaft.

0

Genau wie wenn Sie dies aus T-SQL tun, wenn die Datenbank von etwas benutzt wird, dann blockiert das die Wiederherstellung. Wann immer ich eine Datenbank wiederherstellen soll, nehme ich sie zuerst offline (mit sofortigem Rollback). Das tötet alle Verbindungen zur db. Möglicherweise müssen Sie es zuerst online zurücksetzen. Ich kann mich nicht erinnern, ob die Wiederherstellung intelligent genug ist, um zu erkennen, dass die Dateien, die Sie überschreiben, zu der Datenbank gehören, die Sie wiederherstellen, oder nicht. Hoffe das hilft.

+0

Danke für den Vorschlag. Ich hatte daran gedacht, dass es in Benutzung war und sp_who2 hat zu keinem Zeitpunkt irgendjemand anderen im DB verraten. Der Server wird nur von ein paar Entwicklern benutzt, die mit mir im selben Raum sitzen, also konnte ich das ausschließen. Ich habe Code hinzugefügt, um die DB nur für den Fall der Fälle offline zu schalten. –

3

Ich machte die Wiederherstellung SMO und lief in Fehler. Die einzige Möglichkeit, das Problem zu diagnostizieren, war das Ausführen eines SQL-Profils während der Ausführung meines Powershell-Skripts.

Dies zeigte mir die tatsächliche T-SQL, die ausgeführt wurde. Ich habe das dann in eine Abfrage kopiert und versucht, sie auszuführen. Dies zeigte mir die tatsächlichen Fehler: In meinem Fall war es, dass meine Datenbank mehrere Datendateien hatte, die verschoben werden mussten.

Das angehängte Skript funktioniert für Datenbanken mit nur einer Datendatei.