Deaktivieren Sie das Transaktionsprotokoll

79

Oracle verfügt über SQL-Befehle, die ausgegeben werden können, damit eine Transaktion nicht protokolliert wird. Gibt es etwas Ähnliches für SQL Server 2008?

Mein Szenario: Wir benötigen Tx-Protokolle auf Servern (Dev, QA, Prod), aber vielleicht können wir auf Entwicklercomputern darauf verzichten.

Raj Mehr
quelle
1
Haben Sie versucht, Ansichten für Ihre berechneten Daten zu verwenden?
Es tut uns leid, Ihre Frage zu entführen, aber wie kann ich die Transaktionsprotokollierung in Oracle für eine bestimmte Prozedur / Abfrage deaktivieren? Vielen Dank!
Victor
3
@Kaushik du bist besser dran, dies als eigene Frage zu stellen.
Raj More
" Damit eine Transaktion nicht protokolliert wird " ist dies nicht der Fall, wenn Sie sich auf die NOLOGGEDOption beziehen .
a_horse_with_no_name
@RajMore Hast du mehr zu diesem Thema erfahren? In unserem Fall laden wir Massenware und es war überraschend, dass im SIMPLE-Modus so viele Daten auf die Festplatte geschaufelt wurden. Jetzt verstehe ich warum, aber ich frage mich, wie viel Leistung sich erhöhen könnte, wenn die Transaktionsprotokollierung beseitigt werden könnte.
D-Klotz

Antworten:

122

Sie können unter keinen Umständen auf Transaktionsprotokolle in SQL Server verzichten. Der Motor funktioniert einfach nicht.

Sie können Ihr Wiederherstellungsmodell auf Ihren Entwicklungscomputern auf EINFACH einstellen. Dadurch wird verhindert, dass das Transaktionsprotokoll aufgebläht wird, wenn keine Transaktionsprotokollsicherungen durchgeführt werden.

ALTER DATABASE MyDB SET RECOVERY SIMPLE;
Aaron Alton
quelle
18
Nur ein großes Heads-up: Diese Antwort ist zu 100% technisch korrekt. Es ist jedoch nur etwas, das Sie auf Ihren DEVELOPER-Computern verwenden möchten oder wenn es Ihnen NICHT wichtig ist, Ihre Daten sichern zu können. Weitere Informationen und Hintergrundinformationen finden Sie unter sqlservervideos.com/video/logging-essentials und sqlservervideos.com/video/shrinking-log-files .
Michael K. Campbell
Oder für Datenbanken auf RDS (oder gleichwertigen Diensten), bei denen die Sicherungsstrategie Snapshots anstelle von Transaktionsprotokollen verwendet.
bsplosion
oder die Datenbank wird aus einer anderen Quelle erstellt, z. B. aus Event-Sourcing, sodass keine Transaktionen und keine Protokollierung erforderlich sind
Anthony Johnston,
45

SQL Server benötigt ein Transaktionsprotokoll, um zu funktionieren.

Es gibt jedoch zwei Betriebsarten für das Transaktionsprotokoll:

  • Einfach
  • Voll

Im Vollbetrieb wächst das Transaktionsprotokoll , bis Sie die Datenbank sichern. Im einfachen Modus: Der Speicherplatz im Transaktionsprotokoll wird an jedem Prüfpunkt "recycelt" .

Nur sehr wenige Benutzer müssen ihre Datenbanken im vollständigen Wiederherstellungsmodell ausführen . Der einzige Punkt bei der Verwendung des vollständigen Modells besteht darin, dass Sie die Datenbank mehrmals pro Tag sichern möchten und das Sichern der gesamten Datenbank zu lange dauert. Sie sichern also nur das Transaktionsprotokoll.

Das Transaktionsprotokoll wächst den ganzen Tag und Sie sichern es einfach weiter. In dieser Nacht Sie tun , um Ihre vollständige Sicherung und SQL Server dann kürzt das Transaktionsprotokoll, beginnt den Raum in der Transaktionsprotokolldatei zugeordnet wiederzuverwenden.

Wenn Sie immer nur vollständige Datenbanksicherungen durchführen , möchten Sie nicht den vollständigen Wiederherstellungsmodus.

Ian Boyd
quelle
Dies ist etwas falsch: Sie müssen das Protokoll sichern, um (hoffentlich) das Wachstum des Transaktionsprotokolls zu stoppen. Wenn Sie eine offene Transaktion oder eine große Transaktion haben, wächst das Protokoll natürlich, da die internen Protokolldateizuordnungen (VLFs) nicht wiederverwendet werden können oder Sie mehr benötigen. Das ist
übrigens
1
@gbn Sie sichern das Protokoll nicht, um das Wachstum des Protokolls zu verhindern. Ich meine, Sie tun es , aber das ist nicht der Punkt der Funktion. Microsoft hat kein Transaktionsprotokoll erstellt, um das Spiel "Verbrauchen Sie Ihre gesamte Festplatte, weil Sie vergessen haben, das Protokoll zu sichern" zu spielen . Der Grund, warum das Protokoll weiter wächst (und dann gesichert werden muss, um das Wachstum zu verhindern), besteht darin, dass Sie nur das Protokoll sichern können .
Ian Boyd
44

Es gibt einen dritten Wiederherstellungsmodus, der oben nicht erwähnt wurde. Der Wiederherstellungsmodus bestimmt letztendlich, wie groß die LDF-Dateien werden und wie oft sie geschrieben werden. In Fällen, in denen Sie Masseneinfügungen durchführen, sollten Sie die Datenbank auf "BULK / LOGGED" setzen. Dadurch bewegen sich Bulk-Einsätze schnell und können im laufenden Betrieb gewechselt werden.

Um dies zu tun,

USE master ;
ALTER DATABASE model SET RECOVERY BULK_LOGGED ;

So ändern Sie es zurück:

USE master ;
ALTER DATABASE model SET RECOVERY FULL ;

Um das Gespräch darüber zu erweitern, warum jemand kein LDF möchte, füge ich Folgendes hinzu: Wir führen mehrdimensionale Modelle durch. Im Wesentlichen verwenden wir die Datenbank als großen Speicher von Variablen, die mit externen Programmen in großen Mengen verarbeitet werden. Wir benötigen NIEMALS Rollbacks. Wenn wir durch Ausschalten der ALL-Protokollierung eine Leistungssteigerung erzielen könnten, würden wir dies sofort tun.

NameIsPete
quelle
1
Danke dafür. Wir verwenden die DB genauso. Es könnte uns nicht weniger interessieren, ob wir zurückrollen können. Reine Leistung ist alles, was wir
Dan
Für dieses Szenario könnten Sie eine andere Datenbank wie Mongo (erlaubt das Deaktivieren von Protokollen) oder im Speicher (redis und andere) in Betracht ziehen
Tim
2

Was ist Ihr Problem mit Tx-Protokollen? Sie wachsen? Setzen Sie dann einfach die Option auf Checkpoint abschneiden.

Aus der Microsoft-Dokumentation:

In SQL Server 2000 oder in SQL Server 2005 entspricht das Wiederherstellungsmodell "Einfach" dem "Abschneiden des Anmeldeprüfpunkts" in früheren Versionen von SQL Server. Wenn das Transaktionsprotokoll jedes Mal abgeschnitten wird, wenn ein Prüfpunkt auf dem Server ausgeführt wird, können Sie das Protokoll nicht für die Datenbankwiederherstellung verwenden. Sie können nur vollständige Datenbanksicherungen verwenden, um Ihre Daten wiederherzustellen. Sicherungen des Transaktionsprotokolls werden deaktiviert, wenn das Wiederherstellungsmodell "Einfach" verwendet wird.

zvolkov
quelle
1
Nun, Platzprobleme - einige Entwickler haben ältere Maschinen und wir können darauf verzichten. Genauer gesagt bin ich gespannt, ob dies überhaupt möglich ist! Ich hatte den Eindruck, dass die Option "Protokoll am Prüfpunkt abschneiden" nur im einfachen Wiederherstellungsmodus in SQL 2008 festgelegt wurde. Gibt es einen anderen Weg?
Raj More
1
@ Tapori, sie sind das gleiche. Sie benannten es im Jahr 2000 um.
Zvolkov
0

Wenn dies nur für Entwicklungsmaschinen gilt, um Platz zu sparen, wählen Sie einfach den einfachen Wiederherstellungsmodus, und Sie werden es gut machen.

Auf Produktionsmaschinen würde ich jedoch dringend empfehlen, die Datenbanken im vollständigen Wiederherstellungsmodus zu belassen. Dadurch wird sichergestellt, dass Sie bei Bedarf eine Wiederherstellung zu einem bestimmten Zeitpunkt durchführen können.

Wenn Sie Datenbanken im vollständigen Wiederherstellungsmodus haben, können Sie versehentliche Aktualisierungen und Löschungen durch Lesen des Transaktionsprotokolls rückgängig machen. Siehe unten oder weitere Details.

Wie kann ich eine UPDATE-Abfrage in SQL Server 2005 zurücksetzen?

Lesen Sie die Protokolldatei (* .LDF) in SQL Server 2008

Wenn Speicherplatz auf Produktionsmaschinen ein Problem darstellt, erstellen Sie einfach häufige Transaktionsprotokollsicherungen.

JdMR
quelle