So today I did something fun. I wrote a script to parse out data from a CSV file and push the various data into several different (and mostly unrelated) tables in the database. I did it all in a test database (of course), and then I ran it in production.
It turns out, however, that even though I had OCI_NO_AUTO_COMMIT flagged in the queries, the system committed everything even when I had the “commit” lines commented out.
Apparently, in one of my many queries, I had one query where I had failed to specify OCI_NO_AUTO_COMMIT, and when you have different modes in multiple queries, well, then OCI determines that you wanted to auto commit after all. So, the test database had about 20 lines of extra data for quite a few users because of my little oversight.
Thankfully running it in Production came only after all other problems had been worked out.