What this core oracle function is about ? Here is a little script that we can use to extract further information about a specific oracle kernel function which might help us in that process (Beside the usual way , another tool in your toolbox 🙂 ).
Which columns are rely tracked by oracle to grantee write consistency and if needed trigger a DML restart when using the default statement-level consistency ?
Sometimes you may see strange ,unexpected behavior and write consistency bugs because not all the columns that are supposed to be tracked ,are really tracked !
Just check the following articles :
A bug from 2011 (still there in 18c) : http://db-blog.web.cern.ch/blog/franck-pachot/2018-09-oracle-write-consistency-bug-and-multi-thread-de-queuing
A Bug from 2006 (still there in 12.2) : http://blog.sqlora.com/en/merge-and-ora-30926-part-2-or-differences-in-write-consistency-between-update-and-merge/
So how to know it the columns that are supposed to be tracked really are ? I’m going only to treat UPDATE and MERGE statement here.
The UEK5 kernel is out and as usually there is many enhancements and new features included in it ! One of the notable new feature is the dtrace PID provider Which allow setting “function boundary probes on user space functions, and to probe most arbitrary instructions within user space functions” check uek5-features-dtrace
Let’s give it a try :
Based on my previous blog posts :
- Oracle trace events hunting : dbgdChkEventIntV
- Oracle trace events hunting : Undocumented events/Filling the gaps
- Oracle trace events hunting : KST tracing/ X$TRACE
I created two files that can help us to quickly extract Events checked in specific oracle core function :
Using those files we can for example :
When we take a look at the TRACE event which is the Main event to control the UTS tracing we notice that it have a memory option which mean activate the tracing in-memory (If possible)
In my last blog post Oracle trace events hunting : dbgdChkEventIntV i talked about how we can extract events that are checked in specific oracle core function by analyzing the arguments passed to dbgdChkEventIntV function. I used for that a mapping file called dbgdChkEventIntV_event_list.txt (Basically mapping EventId to actual Event Name)
When we analyze the mapping file we observe something :
The different events seems to have a sequential Event ID (stored in an array ?) ! So what is stored in slot 1160002,116004 ,116007 etc ? Let’s check !