DataServer for Oracle supports savepoints for backing out sub-transactions and to maintain sub-transaction boundaries efficiently. The ABL sub-transactions are translated to Oracle DataServer savepoints and UNDO of a sub-transaction is handled by the Oracle DataServer.

The following sections describe how rollback of sub-transactions is handled:

UNDO of sub-transactions with LOBs

In the absence of savepoint, backing out a sub-transaction with LOBs aborted the entire transaction and resulted in the following error:
“Undo of sub-transaction modifying a large object. Backing out transaction. (11599)”
Using savepoints in the Oracle DataServer allows you to rollback only that specific sub-transaction with LOBs without backing out of the entire transaction.

UNDO of DELETE

Savepoints allows you to eliminate the gap in the PROGRESS_RECID value. You can submit a CREATE command after performing an UNDO of a DELETE sub-transaction.

The absence of savepoint will generate a gap in PROGRESS_RECID value. For example, consider that the PROGRESS_RECID value is 1, and you performed an UNDO of a DELETE sub-transaction. If you create a new record after the UNDO, the PROGRESS_RECID value changes to 3 instead of 2 which is a gap in the value.

Note: This feature is disabled by default as there is a performance impact observed while loading bulk records. you can enable this feature by using the -Dsrv PRGRS_SAVEPOINT connection switch.