Update rolled back after commit
Date: Mon, 7 Jun 2021 10:52:05 -0500
Message-ID: <CAANsBX3Q9CysQNpxuzMNqRuTJueJ062hW9+BJ=9QqFSYEM4sKA_at_mail.gmail.com>
Hey all,
In a 19.6 development DB, a developer updates a single row in a table and commits, but the change is rolled back after the commit (commands pasted into SQLPlus, thus the weird formatting):
SQL> select * from testsch.mytab08 where pk_col01='BH';
update testsch.mytab08 set data_col='ORIGVAL' where pk_col01='BH' and pk_col02 = ' AND';
select * from testsch.mytab08 where pk_col01='BH';
commit;
select * from testsch.mytab08 where pk_col01='BH';
- Output from first select
pk_col01 pk_col02 data_col
- ---------------------------------------------------- ------------- BH AND *NEWVAL * BH TL1 ORIGVAL BH TL2 ORIGVAL BH TL3 ORIGVAL BH STL3 ORIGVAL BH STL1 ORIGVAL BH REJ ORIGVAL BH RXS ORIGVAL BH SRXS ORIGVAL BH STL2 ORIGVAL
- UPDATE run SQL> 1 row updated.
- In-transaction SELECT to verify the single row updated
SQL>
pk_col01 pk_col02 data_col
- ---------------------------------------------------- ------------- BH AND *ORIGVAL * BH TL1 ORIGVAL BH TL2 ORIGVAL BH TL3 ORIGVAL BH STL3 ORIGVAL BH STL1 ORIGVAL BH REJ ORIGVAL BH RXS ORIGVAL BH SRXS ORIGVAL BH STL2 ORIGVAL
- COMMIT SQL> Commit complete.
- Post-transaction SELECT showing committed data.
SQL>
pk_col01 pk_col02 data_col
- ---------------------------------------------------- ------------- BH AND *ORIGVAL * BH TL1 ORIGVAL BH TL2 ORIGVAL BH TL3 ORIGVAL BH STL3 ORIGVAL BH STL1 ORIGVAL BH REJ ORIGVAL BH RXS ORIGVAL BH SRXS ORIGVAL BH STL2 ORIGVAL
- Manual SELECT pasted into SQL*Plus immediately after the initial statements showing the "rollback" value. SQL> select * from testsch.mytab08 where pk_col01='BH';
pk_col01 pk_col02 data_col
-------- ---------------------------------------------------- -------------
BH AND *NEWVAL * BH TL1 ORIGVAL BH TL2 ORIGVAL BH TL3 ORIGVAL BH STL3 ORIGVAL BH STL1 ORIGVAL BH REJ ORIGVAL BH RXS ORIGVAL BH SRXS ORIGVAL BH STL2 ORIGVAL
10 rows selected.
SQL> exit
This was originally done in Toad, where I suspected a threading/transactional issue, but as you can see above, was fully replicated in SQL*Plus. I needed to pause troubleshooting for a meeting. When I started again, I ran the above in a trace, which of course worked as expected without the phantom rollback. There are no triggers on the table. This is a standalone instance with no replication. There is a "AFTER ALTER OR TRUNCATE ON DATABASE" trigger in this DB, but I don't see how that could have affected this. No errors are evident in the SQL*Plus session, nor the alert log.
I'm struggling to come up with a transactional scenario where this could happen. Thoughts?
Thanks,
Rich
--
http://www.freelists.org/webpage/oracle-l
Received on Mon Jun 07 2021 - 17:52:05 CEST