Ansicht
Dokumentation

ABENDB_COMMIT - DB COMMIT

ABENDB_COMMIT - DB COMMIT

TXBHW - Original Tax Base Amount in Local Currency   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Datenbank-Commit

Datenbank-Commits werden in einem AS ABAP implizit oder explizit ausgelöst.

Hinweis

Ein Datenbank-Commit schließt alle geöffneten Datenbank-Cursor. Insbesondere in SELECT-Schleifen und nach der Anweisung OPEN CURSOR ist darauf zu achten, nicht versehentlich durch eine der hier genannten Möglichkeiten, einen Datenbank-Commit auszulösen.

Implizite Datenbank-Commits

Die impliziten Datenbank-Commits eines AS ABAP haben ihre Ursache darin, dass ein AS ABAP über seine Workprozesse an das Datenbanksystem angemeldet ist. Ein Workprozess kann immer nur eine einzige Datenbank-LUW ausführen auch nicht in die Datenbank-LUWs anderer Workprozesse eingreifen. Da ein ABAP-Programm während seiner Laufzeit von verschiedenen Workprozessen ausgeführt werden kann, muss bei jeder Aktion, die zu einem Wechsel des Workprozesses führen kann, die Datenbank-LUW des aktuellen Workprozesses abgeschlossen werden. Entsprechend wird in folgenden Situationen implizit ein Datenbank-Commit ausgelöst:

Das Programm wartet auf eine Benutzeraktion und belegt währenddessen keinen Workprozess. Im nächsten Dialogschritt wird dem Programm der nächste freie Workprozess zugeteilt.
Der aktuelle Workprozess übergibt die Kontrolle an einen anderen Workprozess oder an ein anderes System. Ausgenommen hiervon ist die Verbuchung. Während der Verbuchung führen sRFC und aRFC zu keinem Workprozesswechsel und zu keinem Datenbank-Commit.
  • Beendigung eines über synchronen Remote Function Call in einem eigenen Workprozess aufgerufenen Funktionsbausteins.
Dem aufrufenden Programm wird in der Regel ein neuer Workprozess zugeteilt. Wenn ein erneuter sRFC schnell genug erfolgt und es genügend freie Workprozesse gibt, wird der Workprozess für den sRFC zwar weiterverwendet, zu einem impliziten Datenbank-Commit kommt es aber in jedem Fall.
  • Verwendung der Anweisung RECEIVE in einer beim asynchronen RFC angegebenen Callback-Routine.
Zur Entgegennahme der Daten von einer anderen muss der aktuelle Workprozess vor Ausführung der Callback-Routine unterbrochen werden. Dabei kommt es außer während der Verbuchung zu einem Datenbank-Commit.
Vor jedem Senden einer Antwort in einem ICF-Server-Programm oder ICF-Client-Programm wird ein Datenbank-Commit ausgeführt. Ausgenommen hiervon ist die Verbuchung. Das Verhalten ist unabhängig davon, ob die Kommunikation zustandslos oder zustandsbehaftet ist.
Bei Ausführung der Methoden START_MESSAGE_DELIVERY und STOP_MESSAGE_DELIVERY eines Consumer-Objekts wird ein Datenbank-Commit ausgeführt.
  • Ausführung einer WebSocket- oder TCP-Kommunikation über ABAP Push Channels
Bei jedem Senden einer Nachricht und bei jedem Verlassen einer APC-Verarbeitung wird ein Datenbank-Commit ausgeführt. Ausgenommen hiervon ist die Verbuchung. Insbesondere führen auch die Methoden BIND_AMC_MESSAGE_CONSUMER und UNBIND_AMC_MESSAGE_CONSUMER für die Anbindung eines ABAP Messaging Channels zu einem Datenbank-Commit.
Nach der Unterbrechung wird dem Programm der nächste freie Workprozess zugeteilt. Ausgenommen hiervon ist die Verbuchung.
Diese Nachrichten unterbrechen den aktuellen Dialogschritt (siehe oben).

Der implizite Datenbank-Commit findet auf allen aktuell geöffneten Datenbankverbindungen des aktuellen Workprozess statt. Neben den oben aufgeführten Situationen, die zum Wechsel des Workprozesses innerhalb einer Programmausführung führen, können auch gesamte Programme in einem anderen Workprozess ausgeführt werden, wie beim Aufruf eines Programms in der Hintergrundverarbeitung in einem Hintergrund-Workprozess. Hier wird beim Wechsel des Workprozesses ebenfalls ein Datenbank-Commit ausgeführt.

Hinweise

  • Wenn eine mit -Anweisungen gefüllte globale temporäre Tabelle bei einem impliziten Datenbank-Commit nicht durch einen expliziten Datenbank-Commit oder Datenbank-Rollback oder durch die Anweisung DELETE FROM ohne WHERE-Bedingung geleert wurde, kommt es zum Laufzeitfehler COMMIT_GTT_ERROR.

Explizite Datenbank-Commits

Zum expliziten Auslösen der Datenbank-Commits in ABAP-Programmen gibt es folgende Möglichkeiten:

  • Verwendung der entsprechenden datenbankspezifischen Native-SQL-Anweisung:
  • In ADBC darf hierfür nur die Methode COMMIT der Klasse CL_SQL_CONNECTION verwendet werden. Andernfalls erkennt die Datenbankschnittstelle das Transaktionsende nicht und kann eventuell notwendige Aktionen nicht durchführen.

  • Eine statisch zwischen EXEC und ENDEXEC eingebettete COMMIT-Anweisung wird von der Datenbankschnittstelle erkannt und notwendige Aktionen werden ausgeführt.

  • Aufruf des Funktionsbausteins DB_COMMIT. Dieser Funktionsbaustein kapselt die entsprechende Native-SQL-Anweisung. Der Datenbank-Commit wird standardmäßig auf der aktuell für EXEC SQL geöffneten Verbindung ausgelöst. Um ihn explizit auf der Standardverbindung auszulösen, muss dem Eingabeparameter IV_DEFAULT der Wert von abap_true übergeben werden. Der Funktionsbaustein DB_COMMIT löst das Ereignis DB_TRANSACTION_FINISHED der Klasse CL_DBI_TRANSACTION_STATE aus, welches vom Framework des Application Log behandelt wird.
  • Ausführung der -Anweisung COMMIT CONNECTION. Der Datenbank-Commit wird auf allen aktuell geöffneten Datenbankverbindungen ausgeführt. Die Anweisung COMMIT WORK schließt zusätzlich die aktuelle SAP-LUW ab und führt die zugehörigen Aktionen aus.

In einer AMDP-Methode ist keine COMMIT-Anweisung erlaubt.

Hinweise

  • Zum einfachen Auslösen eines Datenbank-Commits in einem ABAP-Programm genügt in aller Regel die Anweisung COMMIT CONNECTION, wobei mit default die Standardverbindung angegeben werden kann. Wenn die Datenbank-LUW vom Application Log überwacht werden soll, ist der Funktionsbaustein DB_COMMIT zu verwenden. Bei der Anweisung COMMIT WORK sind neben dem Datenbank-Commit weitere Effekte zu beachten, welche die SAP-LUW betreffen.
  • Alle hier aufgeführten Möglichkeiten für einen expliziten Datenbank-Commit leeren globale temporäre Tabellen und verhindern den Laufzeitfehler COMMIT_GTT_ERROR bei einem impliziten Datenbank-Commit.

Datenbank-Commit auf Datenbankverbindungen

Das implizite Inaktivieren einer Sekundärverbindung oder einer Serviceverbindung am Ende einer internen Sitzung löst einen Datenbank-Commit im Transaktionskontext dieser Datenbankverbindung aus. Für mehr Informationen, siehe Datenbankverbindungen.

Ein Wechsel der internen Sitzung auf der Standardverbindung löst keinen Datenbank-Commit und auch keinen Datenbank-Rollback aus.






SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 13852 Date: 20240523 Time: 173549     sap01-206 ( 178 ms )