Als ich vor vielen Jahren an Oracle 8 gearbeitet habe, habe ich den Befehl COMMIT nach jedem Masseneinfügen manuell ausgeführt. In SQL Server ist Auto-Commit standardmäßig aktiviert, was sowohl Vorteile als auch Gefahren bietet.
Ich möchte wissen, ob in den neueren Versionen von Oracle Auto-Commit standardmäßig noch deaktiviert ist. Ich möchte auch wissen, wie das automatische Festschreiben in SQL Server 2005 deaktiviert wird.
Für SQL Server würden Sie IMPLICIT_TRANSACTIONS ON setzen .
Im impliziten Transaktionsmodus startet jede DML (
SELECT, INSERT, DELETE, UPDATE
etc) oder DDL (CREATE, ALTER, DROP
etc) eine Transaktion und Sie müssen explizitCOMMIT
oderROLLBACK
.Alternativ kann eine explizite Transaktion mit gestartet werden
BEGIN TRANSACTION
.quelle
Wie oben beantwortet, können Sie in SQL implizite Transaktionen für Ihre Verbindung mit dieser
SET IMPLICIT_TRANSACTIONS ON
Einstellung aktivieren und die von Mark und Jack bereitgestellten Links verwenden.Ich würde davor warnen, dies auf der ganzen Linie zu tun und es sogar oft in Ihren eigenen Verbindungen zu tun. Die Kehrseite dieser Änderung ist, dass Sie jetzt eine Transaktion für alle Ihre Aktionen haben. Wenn Sie nach sich selbst nicht richtig verwalten oder bereinigen, können jetzt offene Transaktionen die DML in Ihrem System blockieren.
Wenn Sie befürchten, dass bei der manuellen Bereinigung versehentlich die falschen Zeilen gelöscht / aktualisiert werden, gibt es einige bessere Optionen:
BEGIN TRANSACTION
vor dem Schreiben eines Updates / Einfügens / Löschens aus einem System zu tippen ...Manchmal starte ich eine Sitzung und tippe
(auskommentiert, damit es nicht passiert, aber tippe es, damit ich nicht beschäftigt werde und vergesse)
Dann mache ich meine Arbeit nach dem Beginn der Übertragung, schreibe in derselben Sitzung eine Select-Anweisung, die das Nachbild zeigt, um sicherzustellen, dass ich nichts falsch gemacht habe (oder verlasse mich nur auf die Anzahl der betroffenen Zeilen usw.) und dann verpflichten, wenn alles gut aussieht.
quelle
BEGIN TRAN ... ROLLBACK
.Nun ... Es ist nicht unbedingt richtig, dass Oracle keinen Autocommit-Modus hat. Wenn Sie sich die zugrunde liegende OCI ansehen, sehen Sie, dass es ein
OCI_COMMIT_ON_SUCCESS
Flag gibt, an das Sie übergeben könnenOCIStmtExecute()
. Wieso würdest du das machen? Wenn Sie das sehr verbreitete Muster INSERT → COMMIT → INSERT → ... verwenden (z. B. beim Protokollieren von Zeitreihendaten), halbiert dies die Anzahl der erforderlichen Netzwerk-Roundtrips. Dies kann eine erhebliche Leistungsverbesserung darstellen um dieses Flag zu verwenden, insbesondere über WAN-Verbindungen.Wenn Sie
OCI_DEFAULT
als Flag übergeben, ist die automatische Festschreibung deaktiviert. Dies ist also das Standardverhalten.quelle
In SQL Server (getestet mit SQL2005) können Sie zum Festlegen der automatischen Festschreibung auf Serverebene die TSQL verwenden, wie oben von anderen erläutert, oder Sie können die SSMS-GUI verwenden. So verwenden Sie SSMS:
Wenn das Kontrollkästchen deaktiviert ist, bedeutet dies, dass die automatische Festschreibung aktiviert ist. Wenn das Kontrollkästchen aktiviert ist, ist das automatische Festschreiben deaktiviert.
quelle