(Tested in 10g but version may be irrelevant) If you run ROLLBACK multiple times with no transactions, 'user rollbacks' statistic in v$sesstat increments with each rollback. But if you run COMMIT multiple times with no transaction, 'user commits' does not increment. If you run some DDLs (see Appendix), 'user commits' increments by 1, possibly with 'commit cleanouts' and 'commit cleanouts successfully completed' incremented too. Interestingly, 'rollback changes - undo records applied' also increments, by 2. (But other '%rollback%' stats stay the same) If you run a semantically incorrect DDL (such as GRANT AAA TO YONG, where role AAA does not exist), no '%commit%' stats are incremented but 'transaction rollbacks' increments by 1. Syntactically incorrect DDL (such as ALTER AAA MOVE) does not increment any '%commit%' or '%rollback%' stats. If you have a distributed transaction (including a query on a remote table or view), a COMMIT in the local session does not increment 'user commits', even if you modified the remote table (ran INSERT/DELETE/UPDATE), in which case, the COMMIT increments the statistic in the remote session. Partial rollback (ROLLBACK TO mysavepoint) increments only one of all '%rollback%' stats, namely 'rollback changes - undo records applied'. A full (default) ROLLBACK, understandably, increments 'transaction rollbacks', 'user rollbacks' and 'rollback changes - undo records applied' stats. _______________ Appendix (tested in 10.2.0.4): DDLs that increment 'user commits' statistic (even when there's no active transaction): GRANT to ALTER TABLE DROP COLUMN CREATE TABLE DROP TABLE [without PURGE] CREATE TRIGGER DROP TRIGGER DDLs that do not increment 'user commits' (unless there's active transaction): GRANT ON TO ALTER TABLE ADD DROP TABLE PURGE ALTER TABLE MOVE ALTER TABLE ENABLE ROW MOVEMENT ALTER TABLE SHRINK SPACE CREATE PACKAGE/PROCEDURE/FUNCTION ALTER TRIGGER COMPILE ALTER TRIGGER ENABLE/DISABLE ALTER INDEX SHRINK SPACE ANALYZE TABLE/INDEX