wake-up-neo.net

Stellen Sie die SQL Server-Datenbank ohne Transaktionsprotokoll wieder her

Gibt es bei einer SQL Server 2008.bak-Datei eine Möglichkeit, nur die data-Datei aus der .bak-Datei, ohne das Transaktionslog wiederherzustellen? 

Der Grund, warum ich frage, ist, dass die Größe der Transaktionsprotokolldatei dieser Datenbank enorm ist - sie überschreitet den verfügbaren Speicherplatz.

Ich habe kein Interesse am Transaktionsprotokoll und kein Interesse an unvollständigen Transaktionen. Normalerweise würde ich das Protokoll einfach auf Null reduzieren, sobald ich die Datenbank wiederhergestellt habe. Dies ist jedoch nicht hilfreich, wenn der Plattenspeicherplatz zum Erstellen des Protokolls nicht ausreicht.

Was ich brauche, ist eine Möglichkeit, SQL Server anzuweisen, nur die Daten aus der .bak-Datei wiederherzustellen, nicht das Transaktionsprotokoll. Gibt es eine Möglichkeit, dies zu tun?

Beachten Sie, dass ich keine Kontrolle über die Generierung der .bak-Datei habe - sie stammt von einer externen Quelle. Das Verkleinern des Transaktionsprotokolls vor dem Generieren der .bak-Datei ist nicht eine Option.

40
PhantomDrummer

Dies ist wirklich eine Frage für die ServerFault- oder DBA-Sites, aber die kurze Antwort lautet Nein. Sie können nur die vollständige .bak-Datei wiederherstellen (wobei exotische Szenarien wie Dateigruppen- oder Piecemeal-Wiederherstellungen nicht berücksichtigt werden). Sie sagen nicht, was "riesig" bedeutet, aber der Speicherplatz ist günstig. Wenn Sie wirklich mehr hinzufügen möchten, müssen Sie einen alternativen Weg finden, um die Daten aus Ihrer externen Quelle zu beziehen.

4
Pondlife

Das Transaktionsprotokoll ist ein wesentlicher Bestandteil der Sicherung. Sie können SQL Server nicht anweisen, das Transaktionsprotokoll zu ignorieren, da es nicht möglich ist, die Transaktionsprotokolldatei gleichzeitig wiederherzustellen und zu verkleinern. Sie können jedoch einen Blick auf DBA post werfen, um den Prozess zu hacken, obwohl dies überhaupt nicht empfohlen wird

Alternativ können Sie auch Tools von Drittanbietern zum Wiederherstellen ausprobieren, insbesondere einen virtuellen Wiederherstellungsprozess, der viel Platz und Zeit sparen kann. Check out ApexSQL Restore , RedGate Virtual Restore, Virtuelle Idera-Datenbank.

Disclaimer: Ich arbeite für ApexSQL als Support Engineer

8
Marko Krstic

Nein, das Transaktionsprotokoll ist erforderlich. 

Option 1:

Eine Option kann sein, sie auf einem Computer wiederherzustellen, auf dem Sie nicht genügend Speicherplatz haben. Dann ändern Sie bei der wiederhergestellten Kopie die Protokollierung entweder in Massenprotokollierung oder in "Einfach", verkleinern Sie die Protokolle, führen Sie eine weitere Sicherungsoperation für diese neue Kopie durch und verwenden Sie diese dann zum Wiederherstellen auf dem Zielcomputer mit dem nun wesentlich kleineren Transaktionsprotokoll. 

Option 2:

Alternativ könnte der Kontakt an der externen Quelle möglicherweise das Transaktionsprotokoll verkleinern, bevor es an Sie gesendet wird (dies kann möglicherweise nicht funktionieren, wenn das Protokoll aufgrund vieler großer Transaktionen groß ist).

Dokumente zum Befehl zum Verkleinern der Protokolldatei stehen hier zur Verfügung .

6
Chris Townsend

Dies funktioniert möglicherweise nicht, da Sie keine Kontrolle über die Generierung der .bak-Datei haben. Wenn Sie jedoch die Quelle davon überzeugen können, die Datenbank zu trennen und Ihnen eine Kopie der .mdf-Datei direkt zu senden, können Sie die .mdf und anhängen Ihr Server erstellt automatisch eine neue leere Transaktionsprotokolldatei.

Siehe sp_detach_db und sp_attach_db (oder CREATE DATABASE database_name FOR ATTACH, abhängig von Ihrer SQL Server-Version).

2
Aaron

Ich weiß, dass dies ein alter Thread ist, aber ich stolperte darüber, während ich Probleme mit der Transaktionsprotokollkorruption hatte. So habe ich es ohne Datenverlust umgangen (ich hatte allerdings Ausfallzeit!)

Folgendes habe ich getan: -

Stoppen Sie den SQL Server-Instanz-Service Erstellen Sie eine Kopie der MDF-Datei der betroffenen Datenbank und der .ldf-Datei (wenn Sie eine .ndf-Datei haben, kopieren Sie diese ebenfalls!) - Nur um sicherzugehen, können Sie diese immer wieder ablegen wenn es bei dir nicht klappt.

starten Sie den Dienst neu.

Melden Sie sich bei SQL Management Studio an, ändern Sie den Datenbankmodus in "Einfach" und erstellen Sie anschließend eine vollständige Sicherung.

Ändern Sie den Datenbanktyp erneut und erstellen Sie erneut eine vollständige Sicherung und anschließend eine Transaktionsprotokollsicherung.

Trennen Sie die Datenbank.

Klicken Sie mit der rechten Maustaste auf Datenbanken und dann auf Wiederherstellen, wählen Sie den Datenbanknamen aus der Dropdown-Liste aus, wählen Sie die später erstellte vollständige Datenbanksicherung (nicht die aus dem einfachen Modus stammende) aus, und wählen Sie auch die Transaktionsprotokollsicherung aus.

Klicken Sie auf Wiederherstellen, und es sollte alles zurückgesetzt werden, ohne die Protokolldateien zu beschädigen.

Dies funktionierte für mich ohne Fehler und meine Sicherungen funktionierten danach korrekt und es gab keine Transaktionsprotokollfehler mehr.

0
Filfish